Tôi đang suy nghĩ về một cấu trúc tài liệu tốt để xử lý ứng dụng tin nhắn.Cấu trúc MongoDB cho ứng dụng nhắn tin
tôi về cơ bản cần ba (hoặc bốn) loại đối tượng:
- Người dùng (username, email, mật khẩu, vv)
- Danh sách liên lạc (có chứa địa chỉ liên lạc khác nhau hoặc địa chỉ liên lạc nhóm)
- Cuộc trò chuyện (cuộc trò chuyện là tập hợp các tin nhắn giữa một số người)
- Tin nhắn (chứa nội dung tin nhắn, một số dấu thời gian và người tạo.)
Ý tưởng của tôi là để nhúng các điểm tiếp xúc vào tài liệu sử dụng và nhúng các thông điệp trong một tài liệu hội thoại:
1. Người sử dụng
{
username: 'dev.puS',
usernameCanonical: 'dev.pus', // used for unique constraints
email: '[email protected],
emailCanonical: '[email protected],
salt: 'some hash',
password: 'hash with salt',
logs: { last_login: 12.06.2008, last_password_reset: 04.03.2007 },
state: { online: true, available: false },
contacts: [ user_id1, user_id2, user_id3 ]
}
2. Đối thoại
{
members: [ user_id1, user_id2 ],
messages: [
{ author: user_2, body: 'Hi what's up' },
{ author: user_1, body: 'Nothing out here :(' },
{ author: user_2, body: 'Whanna ask some question on stackoverflow' },
{ author: user_1, body: 'Okay, lets go' }
]
}
Bạn nghĩ gì về lược đồ này?
Tôi nghĩ sẽ tốt hơn nếu giữ chúng tách biệt (vì vậy mỗi tài liệu cho riêng nó) vì mỗi tài liệu có tần suất cập nhật khác nhau. Nhưng tôi thực sự không có bất kỳ kinh nghiệm về nó để nó sẽ là tốt để nghe một số lời khuyên :)
Trân
Lược đồ MongoDB không bao giờ "tốt" hoặc "xấu". Bạn cần nêu chi tiết các truy vấn và cập nhật bạn sẽ thực hiện. Chỉ khi đó bạn mới có thể đánh giá nếu một lược đồ đã cho phù hợp với các mẫu hoạt động này. –
Bạn cũng cần phải ước tính phân phối kích thước dữ liệu, ví dụ: số lượng cuộc hội thoại sẽ có tối đa bao nhiêu tin nhắn? Điều này có thể quan trọng nếu bạn muốn nhúng. –
OK, tôi sẽ ghi nhớ điều này. Đây có phải là một cách tiếp cận phổ biến cho bộ nhớ cache ví dụ như các thông báo có redis và lưu tất cả chúng vào mongo khi phiên kết thúc? Tôi có một chút không chắc chắn về việc thực hiện rất nhiều hành động viết cho một đối tượng "không có cấu trúc" –