2012-06-25 42 views
14

Tóm lại: Nếu bạn có một số lượng lớn tài liệu với kích thước khác nhau, trong đó có ít tài liệu đạt kích thước đối tượng tối đa, các phương pháp hay nhất để lưu trữ các tài liệu đó trong MongoDB là gì?Lưu trữ các tài liệu rất lớn trong MongoDB

tôi đã tập hợp các tài liệu như:

{_id: ..., 
    values: [12, 13, 434, 5555 ...] 
} 

Chiều dài của danh sách các giá trị khác nhau rất lớn từ một tài liệu khác. Đối với phần lớn các tài liệu, nó sẽ có một vài phần tử, vì một vài phần tử sẽ có hàng chục triệu phần tử và tôi sẽ đạt đến giới hạn kích thước đối tượng tối đa trong MongoDB. Vấn đề là bất kỳ giải pháp đặc biệt nào tôi đưa ra cho những tài liệu rất lớn (và tương đối ít) có thể có tác động đến cách tôi lưu trữ các tài liệu nhỏ, nếu không, sống hạnh phúc trong bộ sưu tập MongoDB.

Theo tôi thấy, tôi có các tùy chọn sau. Tôi sẽ đánh giá cao bất kỳ đầu vào về ưu và khuyết điểm của những người, và bất kỳ tùy chọn khác mà tôi bị mất.

1) Sử dụng kho dữ liệu khác: Điều đó có vẻ quá quyết liệt. Tôi thích MongoDB, và nó không giống như tôi nhấn giới hạn kích thước cho nhiều đối tượng. Trong trường hợp từ ngữ, ứng dụng của tôi có thể xử lý các đối tượng rất lớn và các đối tượng khác nhau một cách khác nhau. Nó không có vẻ thanh lịch.

2) Sử dụng GridFS để lưu trữ các giá trị: Giống như blob trong DB truyền thống, tôi có thể giữ lại vài nghìn giá trị đầu tiên trong tài liệu và nếu có nhiều yếu tố trong danh sách, tôi có thể giữ phần còn lại trong Đối tượng GridFS dưới dạng tệp nhị phân. Tôi sẽ không thể tìm kiếm trong phần này, nhưng tôi có thể sống với điều đó.

3) Lạm dụng GridFS: Tôi có thể giữ mọi tài liệu trong gridFS. Đối với phần lớn tài liệu (nhỏ), đoạn nhị phân sẽ trống vì bộ sưu tập tệp sẽ có thể giữ mọi thứ. Đối với phần còn lại tôi có thể giữ các yếu tố dư thừa trong bộ sưu tập khối. Điều đó có giới thiệu chi phí so với tùy chọn số 2 không?

4) Thực sự lạm dụng GridFS: Tôi có thể sử dụng các trường tùy chọn trong bộ sưu tập tệp của GridFS để lưu trữ tất cả các phần tử trong các giá trị. GridFS có làm chunking thông minh cũng cho việc thu thập tập tin không?

5) Sử dụng bộ sưu tập "quan hệ" bổ sung để lưu trữ quan hệ một-nhiều, nhưng số lượng tài liệu trong bộ sưu tập này sẽ dễ dàng vượt quá hàng trăm tỷ hàng.

+0

Bạn có cần truy vấn các trường tùy chọn này theo bất kỳ cách nào không? – Thilo

+1

"GridFS có thực hiện chunking thông minh cũng cho việc thu thập tập tin không?". Không. Siêu dữ liệu tệp phải phù hợp với một tài liệu BSON duy nhất. – Thilo

+0

Bạn cần loại nguyên tử nào để cập nhật/chèn? – Thilo

Trả lời

1

Nếu bạn có tài liệu lớn, hãy thử lưu trữ một số siêu dữ liệu về chúng trong MongoDB và đặt phần còn lại của dữ liệu - phần bạn sẽ không truy vấn trên-- bên ngoài.

Các vấn đề liên quan