其他分享
首页 > 其他分享> > 简易版的微信聊天存储方式

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

作者:互联网

1、写在前面

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

2、读扩散 vs 写扩散

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

2.1 读扩散

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

2.2 写扩散

接下来看看写扩散。

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

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

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

 

标签:群聊,微信,聊天记录,信箱,简易版,聊天,扩散,消息
来源: https://blog.csdn.net/DrLai/article/details/123044530