Giả sử bạn có một số lượng lớn người dùng (M) và một số lượng lớn tài liệu (N) và bạn muốn mỗi người dùng có thể đánh dấu từng tài liệu đọc hoặc chưa đọc (giống như bất kỳ hệ thống email nào). Cách tốt nhất để đại diện cho điều này trong MongoDB là gì? Hoặc bất kỳ cơ sở dữ liệu tài liệu nào khác?MongoDB/NOSQL: Cách tiếp cận tốt nhất để xử lý trạng thái đọc/chưa đọc trên tin nhắn
Có một số câu hỏi về StackOverflow hỏi câu hỏi này cho cơ sở dữ liệu quan hệ nhưng tôi không thấy bất kỳ với các khuyến nghị cho cơ sở dữ liệu tài liệu:
What's the most efficient way to remember read/unread status across multiple items?
Implementing an efficient system of "unread comments" counters
Điển hình là các câu trả lời liên quan đến một danh sách bảng mọi thứ mà người dùng đã đọc: (ví dụ: id người dùng, id tài liệu) với một số tối ưu có thể cho ngày bị cắt cho phép đánh dấu tất cả là đã đọc để xóa cơ sở dữ liệu và bắt đầu lại biết rằng bất cứ điều gì trước ngày đó được 'đọc '.
Vì vậy, các chuyên gia MongoDB/NOSQL, bạn đã thấy những cách tiếp cận nào trong thực tế đối với vấn đề này và họ đã thực hiện như thế nào?
Cảm ơn, vì vậy đề xuất của bạn về bản chất là cùng một loại bảng 'tuple/join' giống như trường hợp quan hệ, đúng không? Bất kỳ lý do cụ thể nào bạn lưu trữ cả tin nhắn và các prefs trong cùng một bộ sưu tập? –
Điều với MongoDB thường là phẳng hơn bạn có thể làm cho đối tượng của bạn trở nên tốt hơn. Trong khi nó có thể lưu trữ các cấu trúc lồng nhau, nó không phải là tốt nhất tại truy vấn hoặc nhận được vào những cấu trúc sau này để thay đổi chúng. Vì vậy, rất nhiều thứ có thể kết thúc trông giống như một quan hệ, nhưng với ít trừu tượng hơn do không sử dụng các bảng. Ngoài ra không có lý do gì tôi lưu trữ chúng trong cùng một bộ sưu tập khác ngoài việc không thích có một bộ sưu tập bazillion. Nếu bạn có kế hoạch có hàng triệu thư, bạn nên sử dụng các bộ sưu tập khác nhau để bạn có thể thiết lập các chỉ mục để phù hợp với từng đối tượng tốt hơn. – Klinky