2012-01-25 31 views
6

Giả sử tôi có một người dùng có một ID và tôi muốn để lưu trữ một kỷ lục lịch sử (tài liệu) trên thành viên này mỗi ngày, những gì là tốt hơn:MongoDB lưu trữ dữ liệu lịch sử - thực tiễn tốt nhất?

  • tạo một tài liệu mới cho mỗi bản ghi và tìm kiếm cho người sử dụng ID; hoặc
  • tiếp tục cập nhật và nhúng dữ liệu đó vào một tài liệu người dùng duy nhất liên tục phát triển theo thời gian?

Chủ yếu tôi chỉ muốn truy xuất tài liệu hiện tại cho người dùng nhưng tất cả các bản ghi sẽ có thể truy cập bất kỳ lúc nào mà không cần tìm kiếm/truy vấn siêu dài.

+0

GivEn rằng phần lớn thời gian bạn muốn chỉ là tài liệu hiện tại, bạn nên quan tâm hơn đến việc có thể truy xuất * đó * "mà không cần tìm kiếm/truy vấn siêu dài" – APC

+0

có đó là suy nghĩ của tôi nhưng chỉ muốn đảm bảo rằng đây là thực tế là cách tiếp cận đúng (cũng cảm ơn cho chỉnh sửa) –

Trả lời

3

Có rất nhiều biến có thể ảnh hưởng đến quyết định như vậy. Một tài liệu lớn dường như rõ ràng nhất với điều kiện là nó không phát triển đến kích thước không lớn hoặc thậm chí không được phép (nhớ bạn, một tài liệu có thể có kích thước tối đa 16MB).

Sử dụng tài liệu cho mỗi mục cũng hoàn toàn khả thi và miễn là bạn tạo các chỉ mục thích hợp không được dẫn đến truy vấn chậm.

4

Có giới hạn về mức độ lớn của tài liệu. Đó là (tính đến v1.8) 16 MB. Vì vậy, bạn có thể chỉ cần chạy ra khỏi phòng nếu bạn cập nhật nhúng &. Ngoài ra, mongo phân bổ không gian tài liệu dựa trên kích thước tài liệu trung bình trong một bộ sưu tập. Nếu bạn tiếp tục điều chỉnh/thay đổi kích thước, điều này có thể có tác động tiêu cực về hiệu suất.

Tôi nghĩ sẽ an toàn hơn khi tạo tài liệu mới cho mỗi bản ghi và nếu/khi bạn muốn đối chiếu dữ liệu đó, bạn làm điều đó trong công việc bản đồ/giảm.

+3

Giới hạn kích thước là 16MB là 1,8;) –

+0

Cập nhật. Cảm ơn. – z5h

+0

cảm ơn bạn đã trả lời. Vì cả hai câu trả lời đều có chất lượng như nhau (IMHO), tôi sẽ đánh dấu Remons là đúng chỉ vì bây giờ bạn có thêm một upvote và anh ấy cũng có ít điểm hơn, hy vọng bạn không phiền. Câu trả lời của bạn vẫn được đánh giá cao. –

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