2015-06-13 13 views
9

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!

Trả lời

11

Dựa trên dữ liệu mẫu của bạn trong ứng dụng nhắn tin, những gì bạn có thể làm là có hai bộ sưu tập: Đối thoại và tin nhắn. Trường hợp mối quan hệ là một Trò chuyện có nhiều Tin nhắn.

Conversation: 
{ id: 123 
    participants: ['john', 'marry'], 
} 


Message: 
{ sender: 'john', 
    content: 'howdy', 
    time_created: new Date(), 
    converstationId: 123 
}, 
{ sender: 'marry', 
    content: 'good u', 
    time_created: new Date(), 
    converstationId: 123 
}, 

Tạo nhắn văn bản mới sẽ tốt hơn trong trường hợp này, như bạn có thể có hai ứng dụng (1 cho john và 1 cho kết hôn) mà không xử lý khả năng của hai trong số họ cập nhật các tài liệu tương tự. Họ chỉ tình cờ chia sẻ cùng một phiên trò chuyện.

Ngoài ra, nếu một cuộc trò chuyện là một tài liệu duy nhất, bạn có thể kết thúc với một tài liệu rất lớn. (Mối quan tâm tăng trưởng Document)

Bạn có thể tìm hiểu thêm về mô hình dữ liệu cho MongoDB này doc

http://docs.mongodb.org/manual/core/data-modeling-introduction/

Xem thêm MongoDB: Socialite cho các ví dụ/thảo luận đối với trường hợp sử dụng mạng xã hội.

Hy vọng điều đó sẽ hữu ích. Chúc mừng.

+0

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? –

+0

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). –

+0

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? –

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