请教一下聊天消息应该用什么数据库存储?

2022-09-29 10:06:43 +08:00
 monkeydream

公司要开发运营聊天功能,估计用户 10w 左右,在线 1w 人,消息每天 100w 以上,需要存储 6 个月左右的消息,差不多 2 亿条,而且考虑到不同终端之间的消息同步,客户端需要频繁的查询聊天数据。 请问针对这样的场景应该选择哪种数据库? 目前考虑 Mongodb 或 Clickhouse ;考虑 mongodb 主要是 mongodb 的分片模式适合存储大量数据、查询也比较快,考虑 clickhouse 主要是其能存储大数据并且查询性能也比较好(但是听说并发不太好,不知道是否适合并发查询要求)。

9749 次点击
所在节点    数据库
88 条回复
liuhan907
2022-09-29 10:09:26 +08:00
要查询聊天这种东西,第一反应应该是 es 吧。
Smilencer
2022-09-29 10:11:51 +08:00
学微信,聊天记录全部 sqllite 存在客户端本地,查询全部在本地
superbai
2022-09-29 10:12:10 +08:00
有没有考虑过直接用云服务厂商提供的 IM 功能
NGUP915
2022-09-29 10:13:51 +08:00
@Smilencer wx 这么🐶???
c332030
2022-09-29 10:17:42 +08:00
@Smilencer #2 微信动不动找不到文件、图片,但是空间又没减少
coderxy
2022-09-29 10:22:33 +08:00
2 亿条不算多,mongodb 的分片集群可以搞定。 如果量再大,可以考虑 hbase 这一类的分布式数据库,我们用 hbase 存的,一天都不止 1 亿条,稳得很。
tramm
2022-09-29 10:25:21 +08:00
查询的话都是查本地的吧.
monkeydream
2022-09-29 10:31:07 +08:00
@Smilencer 主要是要考虑消息同步,不同终端之间要保证消息一致性,还有离线消息存储,所以消息必须存在服务器。本地查询会存在 Sqlite 中。
julyclyde
2022-09-29 10:31:25 +08:00
首先 10w 用户就不可能,想多了
monkeydream
2022-09-29 10:32:49 +08:00
@coderxy 因为需要走消息同步,获取用户最近消息这个操作也很频繁;不知道 Mongodb 和 Hbase 针对这种并发查询的性能咋样?
awanganddong
2022-09-29 10:34:28 +08:00
热数据放 redis, 冷数据存 mysql ,定时归档。一般查询的话,都是查本地,如果想实现云端检索类似功能,直接异步走一份到 es 。

推荐个网站

http://www.52im.net/

即时通讯网

im 这块是天坑。单纯存储的不复杂。
monkeydream
2022-09-29 10:35:33 +08:00
@awanganddong 多谢。
tairan2006
2022-09-29 10:36:23 +08:00
你要做线上查询的话,肯定推荐 es 吧。

不然的话推荐用时序数据库,或者 hbase 这些方案也能用。
coderxy
2022-09-29 10:37:26 +08:00
@monkeydream 我们是仿照钉钉走的拉模式,全部都是走数据库,反正 hbase 稳得很(请求量大了或者数据量大了都会自动分片)。mongodb 的话,如果你用分片集群,提前做好压测,应该也没啥问题。
masterclock
2022-09-29 10:41:08 +08:00
公司有 10 万人?买一套不好吗?为啥要浪费时间开发?
monkeydream
2022-09-29 10:41:48 +08:00
@coderxy 多谢;那我们估计优先考虑 mongodb ,因为目前项目中已经有些应用在尝试使用 mongodb 数据库。
monkeydream
2022-09-29 10:44:14 +08:00
@masterclock IM 聊天是我们 SAAS 产品的一部分;不只是我们公司自己用。
coderxy
2022-09-29 10:45:19 +08:00
@monkeydream 可以的,符合自己需求的才是最好的。 毕竟 hbase 这一类数据库用的人少,维护起来也比较麻烦。IM 领域真正麻烦的是超大群,其它都还好。
coderxy
2022-09-29 10:45:50 +08:00
@masterclock 第三方的各种限制,而且也不便宜。 有能力的话自研一下其实成本不高的。
monkeydream
2022-09-29 10:47:17 +08:00
@tairan2006 ES 可以考虑下;时序数据库没接触过,不太敢用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/883731

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX