切换导航
首页
技术问答
编程语言
前端开发
移动开发
开发工具
程序设计
行业应用
CMS系统
服务器
频道导航
▸ PHP
▸ Java
▸ Java SE
▸ Python
▸ C#
▸ C&C++
▸ Ruby
▸ VB
▸ asp.Net
▸ Go
▸ Perl
▸ netty
▸ Django
▸ Delphi
▸ Jsp
▸ .NET Core
▸ Spring
▸ Flask
▸ Springboot
▸ SpringMVC
▸ Lua
▸ Laravel
▸ Mybatis
▸ Asp
▸ Groovy
▸ ThinkPHP
▸ Yii
▸ swoole
▸ HTML
▸ HTML5
▸ JavaScript
▸ CSS
▸ jQuery
▸ Bootstrap
▸ Angularjs
▸ TypeScript
▸ Vue
▸ Dojo
▸ Json
▸ Electron
▸ Node.js
▸ extjs
▸ Express
▸ XML
▸ ES6
▸ Ajax
▸ Flash
▸ Unity
▸ React
▸ Flex
▸ Ant Design
▸ Web前端
▸ 微信小程序
▸ 微信公众号
▸ iOS
▸ Android
▸ Swift
▸ Hybrid
▸ Cocos2d-x
▸ Flutter
▸ Xcode
▸ Silverlight
▸ cocoa
▸ Cordova
前端之家
设计模式
信息流聚合类系统(如RSS阅读器)中数据同步的架构设计
信息流聚合类系统(如RSS阅读器)中数据同步的架构设计
2020-06-16
设计模式
前端之家
前端之家
收集整理的这篇文章主要介绍了
信息流聚合类系统(如RSS阅读器)中数据同步的架构设计
,
前端之家
小编觉得挺不错的,现在分享给大家,也给大家做个参考。
信息流聚合类系统(如
RSS
阅读器)中数据同步的架构设计
@H_
301
_2@
目录
1
需求
2
基于时间戳的设计
3
基于每个用户消息队列的设计
4
书签(或网盘类应用)的双向同步问题
需求
要求
支持
用户
能够用一个账号在多台设备上同步数据(这要求同步状态存储在服务器上)
凡是需要在服务器存储
用户
状态数据的,需要评估存储容量的限制
要求
用户
标记
为已阅的信息下次刷新不会再从服务器重复刷新
要求能够
支持
书签(或网盘类应用)的双向同步问题
基于时间戳的设计
主要思想:
将信息拆分为基本的item单位,以每个
用户
可
自定义
的最小时间间隔作为桶
每个桶里的item要么全部读完,否则下次还会重复更新下来
优点:不需要额外的存储,但是每次会有计算开销
要点:保证各个桶是整个数据集的disjoint的子集的union
基于每个
用户
消息队列的设计
每个信息源里的item有按照时间顺序的唯一id编号,不要使用
数据库
生成
id,使用领域自然id或对象hash id
信息流的聚合相当于多队列聚合为一个队列,考虑某些
支持
消息序列持久化的中间件?
优点:稳定可靠
缺点:每个
用户
的聚合队列可能是一笔不小的存储开销
要点:
当
用户
长时间不使用系统时,要求没有额外的存储开销,也就是说,每个
用户
的聚合队列可以JIT
生成
可通过某种算法
生成
一个同步Token,相当于
标记
聚合后的信息流阅读位置的一个“书签”
书签(或网盘类应用)的双向同步问题
在这类使用场景下,
用户
可用多个设备
上传
item(信息最小单位),(每个设备可视为一个信息源)
同时多台设备可获得一致的视图(或者叫“最终一致”)
同样,服务器端需要给这些item
生成
id以便引用,不要使用
数据库
生成
id
但是又可能需要这些item以更新顺序排序,因此需要持久化消息队列中间件
关系
数据库
不能
解决
这个问题,关系
数据库
里要对item进行排序必须
增加
事件戳列(不要混淆对象id和对象的更新顺序key 2个概念)
如果客户端视图需要某种
用户
自定义
的UI排序,不要把它作为一个整体XML
文件
进行更新;
相反的,每个信息item项
增加
一个“手工order_num”
属性
,将它与“对象的更新顺序key”相区别开来
如果设计时图简单,将所有的书签作为一个XML
文件
存储,则在多台设备上可能会遇到写操作的版本冲突
引入“版本号”的概念,每次本地更新的
上传
均需要递增版本号,使用update_if_prev_version_match,许多No
sql
类
数据库
均有这个设计
原文链接:/javaschema/284183.html
上一篇:小蚂蚁学习C语言(36)——题目——
下一篇:[转]关于TDD、BDD和DDD的一些看法
猜你在找的设计模式相关文章
适配器模式-让不兼容的接口得以适配
适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本接口不兼容的类可以相互合...
作者:前端之家 时间:2021-02-24
策略模式-定义一个算法族
策略模式定义了一系列算法族,并封装在类中,它们之间可以互相替换,此模式让算法的变化独...
作者:前端之家 时间:2021-02-24
设计模式之高质量代码
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,它是针对软件开发中经常遇到的...
作者:前端之家 时间:2021-02-24
模板方法模式-封装一套算法流程
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,使得子类可以在...
作者:前端之家 时间:2021-02-24
迭代器模式-统一集合的遍历方式
迭代器模式提供了一种方法,用于遍历集合对象中的元素,而又不暴露其内部的细节。
作者:前端之家 时间:2021-02-24
单例模式的五种实现方式及优缺点
单例模式(Singleton Design Pattern)保证一个类只能有一个实例,并提供一个全局访问点。
作者:前端之家 时间:2021-02-24
组合模式-统一的处理个别对象与组合对象
组合模式可以将对象组合成树形结构来表示“整体-部分”的层次结构,使得客户可以用一致的方...
作者:前端之家 时间:2021-02-24
装饰者模式-动态的包装原有对象的行为
装饰者模式能够更灵活的,动态的给对象添加其它功能,而不需要修改任何现有的底层代码。
作者:前端之家 时间:2021-02-24
观察者模式-将消息通知给观察者
观察者模式(Observer Design Pattern)定义了对象之间的一对多依赖,当对象状态改变的时候...
作者:前端之家 时间:2021-02-24
代理模式-访问对象的代理而非其本身
代理模式为对象提供一个代理,来控制对该对象的访问。代理模式在不改变原始类代码的情况下...
作者:前端之家 时间:2021-02-24
编程分类
算法
设计模式
多媒体技术
正则表达式
Elasticsearch
Flink
Hadoop
IDE
最新文章
• 适配器模式-让不兼容的接口
• 策略模式-定义一个算法族
• 设计模式之高质量代码
• 模板方法模式-封装一套算法
• 迭代器模式-统一集合的遍历
• 外观模式-简化子系统的复杂
• 单例模式的五种实现方式及
• 组合模式-统一的处理个别对
• 装饰者模式-动态的包装原有
• 观察者模式-将消息通知给观
热门标签
更多 ►
受约束
摘*
day25
Java常用类库
置信
lamda
留存
持续录入
年后
正则表达式30
3.17
regularexpre
匹
多模
适
20130322
基础理论
pathmunge
涵义
reec
tok
需要转义的特
资源分享
validationex
简明魔法
里弄
形如
源码实现
完备
actionscript