非常著名的设计模式, 把数据读取和数据写入过程相分离, 来拉升整个系统的性能. 同时也能避免多线程update时的冲突
问题
一般我们做数据统计, 面对的就是一个类似excel的表格, 我们从中读取数据或者向内写回数据.
在经典设计模式下, 通过Database access Level读出来一些数据, 组装成Data Transfer Object,
我们可以对这些DTO进行修改, 然后再刷回数据库
这种CRUD的操作的问题也很容易理解
高一致性的代价是多线程下加锁性能不高
解决
image.png读写分离了解一下, 其余的不再阐述了.基于读写分离的一致性问题是获得性能的代价.
决策
- 业务是否允许幻读, 如果不允许的话, 是否能通过一些标志位让业务层知道自己读的这一条高概率幻读了. 需要刷新(订票网站通常用的模式, 实际上飞机票是超额发票等退票或者自动升舱的. 这是一个基于排队论的业务问题而不是设计模式问题)
- 这种模式下带来的成本能否接受. Mysql读写分离意味着数据可能存了两份, 而read on snapshot的模式意味着为了读操作按照时间窗口不断生成snapshot
- 如果读进程是在客户端的, 服务端是否在updat后主动去通知客户端用最新的数据呈现给用户以减少幻读的影响范围
网友评论