Một vấn đề thiết kế rất đơn giản. Nói rằng tôi muốn xây dựng Facebook Messenger. Giả sử John và Marry đang trò chuyện, đó là cách tiếp cận tốt hơn?MongoDB: thiết kế tốt nhất cho ứng dụng nhắn tin
1) 1 tài liệu mỗi cuộc nói chuyện, messages
là một mảng các đối tượng nhắn
{ participants: ['john', 'marry'],
messages: [
{ sender: 'john', content: 'howdy', time_created: new Date() },
{ sender: 'marry', content: 'good u', time_created: new Date() },
...
]
}
2) 1 tài liệu cho mỗi tin nhắn
{ participants: ['john', 'marry'], sender: 'john', message: 'howdy', time_created: new Date() } // document 1
{ participants: ['john', 'marry'], sender: 'marry', message: 'good u', time_created: new Date() } // document 2
....
Những phương pháp đều có hiệu suất tốt hơn về chèn một tin nhắn mới (cập nhật một cuộc hội thoại và tạo một tài liệu mới)?
hay có những cách tiếp cận bất kỳ tốt hơn (như trong cách tiếp cận thứ 2 của tôi, tôi không chắc chắn nếu đó là một thiết kế tốt để xác định các lĩnh vực tham gia trong mỗi tài liệu)?
Cảm ơn!
Có cập nhật 2 bộ sưu tập trên mỗi thư mới được nhiều cơ sở dữ liệu viết không? –
Bạn sẽ chỉ cập nhật bộ sưu tập tin nhắn cho mỗi tin nhắn mới. Bộ sưu tập cuộc trò chuyện chỉ được tạo/cập nhật khi có người tham gia mới hoặc bắt đầu cuộc trò chuyện mới. Ứng dụng của bạn có thể giữ lại id cuộc trò chuyện (giống như một phiên). –
nhưng nếu bạn không cập nhật bộ sưu tập cuộc hội thoại trên mỗi thư mới (để lưu trữ thời gian cập nhật lần cuối), bạn sẽ tìm nạp tất cả cuộc hội thoại được sắp xếp từ gần đây nhất đến gần đây nhất như thế nào khi người dùng mở ứng dụng? –