美文网首页
数据存储结构设计,是读扩散,还是写扩散?

数据存储结构设计,是读扩散,还是写扩散?

作者: 程就人生 | 来源:发表于2022-11-25 16:34 被阅读0次

今天在某个即时通讯的群中无意看到这么一句话:


不由问自己,什么是读扩散?什么是写扩散?感觉这两个词昨天才看的,怎么今天就忘了?翻翻工作记录,原来是在去年10月份接触到的。并且确认过眼神,在群聊里,我使用的是读扩散。

所谓读扩散,就是**存储一次,多次读。

所谓写扩散,就是存储多次,各自读**。

这样说,还是有点抽象。把它们放到群聊的场景里说吧。

读扩散,群里的每条消息只存储一份,群成员读取同一份数据。

优点:

  • 数据实时性高;
  • 写入逻辑简单;
  • 节约存储空间。

缺点:

  • 数据读取会存在热点问题;
  • 需要维护离线群成员与未读消息的关系。

写扩散,群里发一条消息,给每个群成员都存储一份,群成员各自读自己的那一份。

优点:

  • 控制逻辑与数据读取逻辑简单;
  • 用户数据独立,满足更多的业务场景,比如:回执消息、云端删除等等;
  • 一个数据点丢失,不影响其他用户的数据点。

缺点:

  • 存储空间的增加;
  • 写扩散需要专门的扩散队列;
  • 先写扩散后读,实时性差。

在平时的数据存储设计中,是读扩散还是写扩散,还是非常拷问灵魂的。

例子1:

用户表不仅存储了职位的唯一标识,还冗余了职位名称,这是读扩散还是写扩散呢?毫无疑问,只要是信息的冗余,为了查询方便多写了一份,都是写扩散。查询方便了,写操作就不那么方便了,各有取舍吧。

例子2:

群聊中的信息,群信息在服务器端只存储一份,在线和离线的群成员都读这一份。除此之外,还需要维护一个群成员与消息的对应关系,给离线的群成员使用,离线的成员上线后,拉取未读消息,拉取消息后再移除群成员与消息的对应关系。这是读扩散。

例子3:

朋友圈,有着和群聊类似的问题。一个用户在朋友圈发了新消息,对于他的好友,在拉取信息时是采用读扩散呢,还是采用写扩散呢?根据朋友圈信息的偏序关系。每次拉取新的信息时,都需要把本地朋友圈的最后一条信息的时间戳提交给服务器,只拉取大于这个时间戳的信息。如果想拉取旧的信息呢,也是提交时间戳,根据时间戳进行降序排序,就可以把该时间戳之前的信息按指定条数拉取下来。这次我还是采用了读扩散。

最后总结

读扩散和写扩散,已经不是什么新鲜概念了。没有完美的解决方案,只有最合适的解决方案,在使用时需要反复衡量,各有取舍。也可以试一试读扩散和写扩散的结合,那又会是一种什么样的情况。期待下次遇到这样的业务场景。

相关文章

  • 数据存储结构设计,是读扩散,还是写扩散?

    今天在某个即时通讯的群中无意看到这么一句话: 不由问自己,什么是读扩散?什么是写扩散?感觉这两个词昨天才看的,怎么...

  • IM群聊消息究竟是存1份(即扩散读)还是存多份(即扩散写)?

    1、前言 IM的群聊消息,究竟存1份(即扩散读方式)还是存多份(即扩散写方式)? 上一篇文章《IM群聊消息的已读回...

  • feed流 读扩散和写扩散 2022-06-28

    feed流 微信朋友圈、微博、小红书,都是典型的feed流应用 通俗的说就是用户拥有发布者和粉丝两种角色,依据用户...

  • 扩散

    天天窝在家里实在烦。前段时间天天下雨,昨天明知没啥事也上县去转了一趟。 大概是9点到县城西门口,老远就望到右手边那...

  • 扩散

    3.7,周六 8时起床,完成学习强国43分,订阅加1分,排名仍为11,无变动。 国外确诊病例已达17000,全球近...

  • 扩散

    大家都知道我要说什么,但是呢,我没法说那个的,也没法说那个词,因为这是不允许说的事情,但是我告诉大家的是大家也都知...

  • 扩散

    才明白,原来,向别人倾诉,并不能缓解烦恼。 反而,会让你更加烦恼。

  • 扩散

    一瞬间从2019跨到2022 可能是疫情吧 也有可能是 从20到30的跨度有点大 忽然又有种 那天坐在广州街头的失...

  • 你是我,我是另一个你

    “放下你的屏障,想象自己的意识不断扩散,扩散到你所在的省市,扩散到整个地球,扩散到地球外的宇宙,扩散到宇宙之外的宇...

  • 上涨扩散形态/下跌扩散形态

    上涨扩散形态 上涨扩散形态:次要反转形态 三根以上K线组成,阳线实体从小到大 不同位置结果相反 关键点:上涨扩散形...

网友评论

      本文标题:数据存储结构设计,是读扩散,还是写扩散?

      本文链接:https://www.haomeiwen.com/subject/ranffdtx.html