数据一致性方案一--数据在多个冗余表中的一致性优化

本文探讨了在面临数据冗余时如何保证数据一致性,提出了三种双写策略:服务同步写、服务异步写和线下异步写,分析了各自的优缺点,并针对数据不一致问题提出了解决方案,包括线下全量检查、增量数据检测和实时消息对检测。
摘要由CSDN通过智能技术生成
一、为什么会有冗余表
创建表的时候,为了方便查询,通常在分表的时候会对一些字段做冗余,即同一个字段会存在于多个表中,这样在查询的时候避免同时关联2个或两个以上的表。
比如有一种情况淘宝上的交易,买家需要看到自己的订单情况,商家需要查看到商品的销售情况,规范情况的设计
Order(order_id,good_detail)
Table(buyer_id, seller_id, oid)

如果用buyer_id来分库,seller_id的查询就需要扫描多库。
如果用seller_id来分库,buyer_id的查询就需要扫描多库。
这时候的设计可以改成这样
Order(order_id,good_detail)
Buyer(buyer_id, seller_id, oid)
Seller(seller_id, buyer_id, oid)
同一个数据,冗余两份,一份以buyer_id来分库,满足买家的查询需求;
一份以seller_id来分库,满足商家家的查询需求。

二、冗余表的实现方案
【方法一:服务同步写】


顾名思义,由服务层同步写冗余数据,如上图流程:
(1)业务方调用服务,新增数据
(2)服务先插入T1数据
(3)服务再插入T2数据
(4)服务返回业务方新增数据成功
优点:
(1)实现简单,服务层由单次写,变两次写
(2)数据一致性相对较高(因为双写成功才返回)
缺点:
(1)请求的处理时间增加(要插入多次,消耗时间)
(2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值