0

我是 Couchbase 的新手,我想了解如何建模存储来自 Couchbase 中典型 IM 应用程序的数十亿条聊天消息。在 Couchbase 中建模的正确方法是什么?假设每秒插入 10000 条新消息,每秒对这 10000 条消息进行 40000 条更新。假设将一对一聊天作为主要用例,尽管每个人都会有很多朋友——很像 Whatsapp

谢谢,感谢所有反馈。

**更新: **

感谢您的回复,这是我的数据库设计:

在此处输入图像描述

Couchbase 上的示例数据存储(文档存储):

文档用户

123_user => {"id" : 123, "friend_ids" : [456, 789, ...], "session": "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,“body”:“Hello world”,“create_time”:1243124124,“state”:1}

这里有问题,当历史消息上的message_ids字段存储百万或十亿个消息 id 时,这在读取和写入消息历史时确实是一个大问题。谁能给我一个解决这个问题的方法?

4

1 回答 1

0

首先,我们需要将 CouchBase 放在一边。关键问题是如何对这个应用场景进行建模,那么我们知道 CouchBase 是否是您的最佳选择。

一对一聊天应用程序可以使用每对聊天者作为主键。

例如,鲍勃到杰克,他们聊天:
1.“你好!”;
2.“去休息吗?”;
3.“不,我现在很忙。”;
...

您将插入一条新记录,主键为“Bob-Jack”,值为“hello; go for rest; no,....”。

如果对话停止,此记录将停止增长并存储以备将来使用。

如果第二天,两个人再次聊天,您的应用程序将通过键“Bob-Jack”获取此记录,显示他们昨天的对话(值),并通过在末尾附加新的聊天内容来更新值。

值的长度会增长,如果超过某个阈值,您会将其拆分为两条记录。由于许多数据库系统对一条记录有大小限制。

一个人有很多朋友,所以现实世界中有数十亿对(密钥),每一对都有一个很长的对话(价值)。No-sql 解决方案是这种数据量的不错选择。

那么你可能知道 CouchBase 是否能够完成这种任务。我认为这还可以,但不是唯一的选择。

于 2016-01-19T11:33:44.570 回答