Cách tiếp cận tốt nhất cho cơ sở dữ liệu của chuỗi dài


12

Tôi cần lưu trữ các câu hỏi và câu trả lời trong cơ sở dữ liệu. Các câu hỏi sẽ là một đến hai câu, nhưng câu trả lời sẽ dài, ít nhất là một đoạn, có thể nhiều hơn.

Cách duy nhất tôi biết để làm điều này ngay bây giờ là cơ sở dữ liệu SQL. Tuy nhiên, tôi không cảm thấy đây là một giải pháp tốt vì theo như tôi đã thấy, những cơ sở dữ liệu này không được sử dụng cho dữ liệu thuộc loại hoặc kích thước này. Đây có phải là cách chính xác để đi hoặc có cách nào tốt hơn để lưu trữ dữ liệu này? Có cách nào tốt hơn lưu trữ chuỗi thô?


Bạn đã nhìn vào tìm kiếm toàn văn? vi.wikipedia.org/wiki/Full bản_search
Thất vọngWithFormsDesigner

Vui lòng xác định "dài" 1k, 5M, 1GB ??
James Anderson

Tại sao bạn không thích chuỗi "thô"? Là dữ liệu trong chuỗi thực tế, hay nó là dữ liệu có cấu trúc? Bạn có kế hoạch để làm một cái gì đó với nó sẽ không làm việc cho chuỗi? Không có bất kỳ lý do rõ ràng nào trong câu hỏi của bạn tại sao cơ sở dữ liệu sẽ không phù hợp. Tương tự với các chuỗi (hoặc có lẽ CLOBS nếu chúng quá lớn và tùy thuộc vào cơ sở dữ liệu bạn sử dụng).
psr

Tôi đã đề cập đến một số cách lưu trữ thông minh, có thể thông qua một số loại nén, không phải chuỗi ký tự. Tôi lo lắng về cơ bản kích thước của cơ sở dữ liệu ở đây.
gsingh2011

1
Bạn đang sử dụng RDBMS nào? Oracle có một số hỗ trợ tuyệt vời để xử lý và tìm kiếm văn bản.
Matthew Flynn

Câu trả lời:


19

Mongodb là tuyệt vời, nhưng bạn biết SQL. Không có gì sai khi lưu trữ câu trả lời dài trong các lĩnh vực. Bạn có thể lưu trữ hình ảnh hoặc thậm chí các tệp trong SQL. Tôi nghĩ rằng kích thước trường tối đa là 2gb.

Tôi gần như tích cực câu trả lời này đang được lưu trữ trong một trường bảng ở đâu đó.

Đối với hàng ngàn người trong số họ, không có vấn đề. Ngay cả hàng triệu không nên là một vấn đề. Bạn có thể xem xét sử dụng lập chỉ mục toàn văn nếu bạn đang tìm kiếm trường cho từ khóa hoặc thứ gì đó. Nhưng tôi cố gắng không tối ưu hóa cho đến khi tôi thấy một vấn đề. Máy tính có giá rẻ, lưu trữ về cơ bản là miễn phí.


11
+1 về không tối ưu hóa cho đến khi bạn thực sự có vấn đề!
GrandmasterB

4
Kích thước trường tối đa không được chỉ định trong ANSI SQL, nó phụ thuộc vào DBMS (và thường là một vài yếu tố khác, chẳng hạn như bộ ký tự, kiểu dữ liệu cột, công cụ lưu trữ, HĐH, v.v.).
tdammers

6

Không có vấn đề lưu trữ văn bản dài trong cơ sở dữ liệu (SQL hoặc cách khác). Đó là cách hầu như mọi mục nhập blog (nghĩ Wordpress), bài viết tin tức và bài đăng diễn đàn (nghĩ phpbb) trên internet được lưu trữ. Tôi không biết chi tiết cụ thể về thiết lập trao đổi ngăn xếp, nhưng tôi chắc chắn rằng câu hỏi của bạn cũng được lưu trữ trong cơ sở dữ liệu. Hầu hết các cơ sở dữ liệu SQL có một TEXTloại trường hoặc tương đương chỉ nhằm mục đích lưu trữ dữ liệu văn bản có độ dài bất kỳ. Nhiều người cũng có hệ thống tìm kiếm toàn văn tại chỗ.

Đưa ra quyết định kỹ thuật dựa trên kiến ​​thức và hiểu biết kỹ thuật, không phải cảm xúc.


5

Vâng, đó là cách chính xác để đi. Lưu trữ các chuỗi trong cơ sở dữ liệu SQL là những gì bạn muốn làm. Một trong các bảng của tôi trong DB có hơn một loạt dữ liệu văn bản gốc và nó hoạt động tốt.

Nếu bạn lo lắng về không gian lưu trữ - hãy nhớ rằng nó rẻ!

Nếu bạn lo lắng về hiệu suất - thì đừng lo lắng, một cơ sở dữ liệu tốt có thể mở rộng (hoặc ra) theo nhiều dữ liệu bạn muốn gửi vào đó.

Điều cuối cùng bạn muốn làm là bắt đầu tối ưu hóa ngay bây giờ vì lợi ích của nó (nén các chuỗi trước khi bạn đặt chúng vào DB hoặc một cái gì đó) trước khi nó thực sự trở thành một vấn đề. Bạn chỉ đang cho mình nhiều công việc hơn.


2

Không có vấn đề lưu trữ chuỗi lớn hoặc dữ liệu nhị phân. Tôi đã làm việc với một cơ sở dữ liệu với hơn một terabyte dữ liệu nhị phân và hoạt động rất tốt (postgres) và điều tồi tệ duy nhất là thời gian sao lưu.

Câu hỏi lớn là: "Bạn sẽ cần tìm kiếm liên tục trong văn bản này?"

Nếu bạn định tìm kiếm các chuỗi trong văn bản, bạn có thể suy nghĩ trong một giải pháp chỉ mục:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.