Tôi đang bắt đầu một dự án mà tôi nghĩ sẽ đặc biệt phù hợp với MongoDB do tốc độ và khả năng mở rộng mà nó chi phối.MongoDB Schema Design - Trò chuyện thời gian thực
Mô-đun mà tôi hiện đang quan tâm là thực hiện trò chuyện trong thời gian thực. Nếu tôi đã làm điều này trong một RDBMS truyền thống Tôi muốn chia nó ra thành:
- Channel (Kênh có nhiều người sử dụng)
- tài khoản (Một người sử dụng có một kênh nhưng nhiều thông điệp)
- nhắn (Một tin nhắn có người dùng)
Mục đích của trường hợp sử dụng này, tôi muốn giả định rằng sẽ có 5 kênh hoạt động cùng một lúc, mỗi kênh xử lý tối đa 5 tin nhắn mỗi giây.
truy vấncụ thể mà cần phải được nhanh chóng:
- Fetch tin nhắn mới
- Đăng một tin nhắn tới một kênh
- Xác nhận (dựa trên một bookmark, tem thời gian có thể, hoặc một quầy incrementing?) mà người dùng có thể đăng trong kênh
Hãy nhớ rằng giới hạn tài liệu với MongoDB là 4mb, bạn sẽ thiết kế lược đồ như thế nào? Bạn sẽ trông như thế nào? Có bất kỳ gotchas tôi nên xem ra cho?
Tôi sẽ không đề xuất rằng các giải pháp MQ có thực sự tốt hơn nhiều so với một số giải pháp NoSQL ngoài kia. Rất nhiều công nghệ MQ có vẻ phức tạp và được thiết kế quá mức, cộng với hiệu năng không phải lúc nào cũng tuyệt vời, ổn định và tính di động cũng có thể bị hy sinh. Xem: http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/ – Klinky
Có những giải pháp MQ phong nha ngoài kia, tôi chỉ thấy chúng là những cái không có nhiều tính năng , ZeroMQ và Kestrel đều tốt cho mục đích của họ. ActiveMQ mặt khác là khủng khiếp. – Michael
@Klinky Tôi đặt cược hầu như bất kỳ giải pháp MQ cụ thể nào (đặc biệt là ActiveMQ) sẽ xử lý vấn đề nhắn tin tốt hơn so với giải pháp tùy chỉnh dựa trên NoSQL của loại không xác định (ý của bạn là DB hoặc khóa tài liệu) - bởi vì các giải pháp MQ được thiết kế cho vấn đề đó, và, FTN ActiveMQ sử dụng lưu trữ dữ liệu hiệu năng cao được tối ưu hóa của riêng nó để duy trì hàng đợi. –