简易版的微信聊天存储方式

1、写在前面

作者在本文研究websocket已经数月,分享一个亿级消息量、分布式 IM 系统这个技术前提下,分析和总结读写扩散的知识。本文将做到通俗易懂,不涉及任何代码讲解。

2、读扩散 vs 写扩散

IM 系统里经常会涉及到读扩散和写扩散这两个技术概念,我们来看看。

2.1 读扩散

如上图所示: A 与每个聊天的人跟群都有一个信箱
(有些博文会叫 Timeline ,见
《现代 IM 系统中聊天消息的同步和存储方案探讨》), A 在查看聊天信息的时候
需要读取所有有新消息的信箱。
读扩散的优点:可以看到,一个聊天记录需要一个信箱存放
1 )写操作(发消息)很轻量,不管是单聊还是群聊,只需要往相应的
信箱写一次就好了;
2 )每一个信箱天然就是两个人的聊天记录,可以方便查看聊天记录跟
进行聊天记录的搜索。
读扩散的缺点: 读操作(读消息)很重,在复杂业务下,一条读扩散消息源需要
复杂的逻辑才能扩散成目标消息。

2.2 写扩散

接下来看看写扩散。

如上图所示:在写扩散中,每个人都只从自己的信箱里读取消息,我们从中需要维护用户的信箱即可。

但写(发消息)的时候,对于单聊跟群聊处理如下:
1 )单聊:往自己的信箱跟对方的信箱都写一份消息,同时,如果需要
查看两个人的聊天历史记录的话还需要再写一份(当然,如果从个人信箱
也能回溯出两个人的所有聊天记录,但这样效率会很低);
2 )群聊:需要往所有的群成员的信箱都写一份消息,同时,如果需要
查看群的聊天历史记录的话还需要再写一份。可以看出,写扩散对于群聊
来说大大地放大了写操作。
写扩散优点:
1 )读操作很轻量;
2 )可以很方便地做消息的多终端同步。
写扩散缺点: 写操作很重,尤其是对于群聊来说(因为如果群成员很多的话, 1
条消息源要扩散写成 成员数 ­1” 条目标消息,这是很恐怖的)

注:本文有参考于诸葛老师

 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华农DrLai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值