一、为什么会有冗余表 创建表的时候,为了方便查询,通常在分表的时候会对一些字段做冗余,即同一个字段会存在于多个表中,这样在查询的时候避免同时关联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
数据一致性方案一--数据在多个冗余表中的一致性优化
最新推荐文章于 2024-07-06 22:21:19 发布
本文探讨了在面临数据冗余时如何保证数据一致性,提出了三种双写策略:服务同步写、服务异步写和线下异步写,分析了各自的优缺点,并针对数据不一致问题提出了解决方案,包括线下全量检查、增量数据检测和实时消息对检测。
摘要由CSDN通过智能技术生成