我是Couchbase的新手, 我想了解如何建模存储来自Couchbase中典型IM应用程序的数十亿条聊天消息。在Couchbase中对此进行建模的正确方法是什么?假设在10000条消息/秒上有10000条新消息/秒插入和40000条更新。假设,一对一聊天作为主要用例,尽管每个人都会有很多好友 - 非常像Whatsapp
谢谢,感谢所有反馈。
**更新:**
感谢您的回复,这是我的数据库设计:
Couchbase上的示例数据存储(文档存储):
文档用户:
123_user => {" ID" :123," friend_ids" :[456,789,...],"会话":" 123asdcas123123qsd"}
文档历史消息(channel_name = userId1 +" -to - " + userId2)
123-to-456_history => {" channel_name":" 123-to-456"," message_ids" => [" 545_message,999_message,...."]}
记录消息:
545_message => {" ID" :545,client_id:4143413,from_uid:123," to_uid" :456,"身体" :" Hello world"," create_time" :1243124124,"州" :1}
此处存在问题,当历史消息上的 message_ids 字段存储数百万或十亿条消息ID时,这在读取和写入消息历史记录时确实是一个大问题。 谁能给我一个解决这个问题的方法呢?
答案 0 :(得分:0)
首先,我们需要将CouchBase放在一边。关键问题是如何对这个应用场景进行建模,然后我们知道CouchBase是否是您的最佳选择。
一对一聊天应用程序可以将每对聊天用作主键。
例如,Bob-to-Jack,他们聊天:
1. “你好!”;
“休息一下?”;
“不,我现在很忙。”;
......
您将使用主键“Bob-Jack”插入一条新记录,并将值“hello; go for rest; no,....”。
如果对话停止,此记录将停止增长并存储以备将来使用。
如果在第二天,两个人再次聊天,你的应用程序将通过键“Bob-Jack”获取此记录,显示他们的昨天对话(值),并通过将新的聊天内容添加到端。
值的长度增加,如果超过某个阈值,则将其分成两个记录。由于许多数据库系统对一条记录有一个大小限制。
一个人有很多好友,所以在现实世界中有数十亿对(键),每对都有很长的对话(价值)。 No-sql解决方案是这个数据量的不错选择。
然后你可能知道CouchBase能否完成这项任务。我认为这是可以的,但不是唯一的选择。