美文网首页
冗余表设计

冗余表设计

作者: 上海马超23 | 来源:发表于2017-08-20 19:48 被阅读0次

弱关联多对多:弱关联指的是单向关系,即A关注B,但不一定B就关注A

需要额外增加2张关系表,分别是关注表和粉丝表(为什么不能只用一张表分2个字段,“关注人”字段和“粉丝”字段?因为1个关系会产生2条记录,那是按“关注人”字段做切分还是按“粉丝”字段做切分呢?加入按“关注人”字段切分,要查询某用户是哪些用户的粉丝,就得全表扫描,失去了分库分表的意义了)

强关联多对多:即A关注B的同时,B也关注了A

增加一张有好友1字段和好友2字段的关系表,每个好友关系关联只用一条记录表示

单表查询用户A的所有好友,建议用:
select * from friend where uid1=A
union
select * from friend where uid2=A
而不要用 select * from friend uid1=2 or uid2=2 (用or是不会走索引查询的)
缺点:同上一个结论,分库分表按“好友1”还是按“好友2”切分?

表设计同弱关联,分别在关注表和粉丝表里各插入2条记录

数据虽然冗余,但每张表都有自己的维度,方便按各自的维度分库分表。

数据冗余的表结构设计

分成2张表就涉及到双写同步,同步方式双写会增加响应时间。

PS:第二次写表发生异常造成不一致情况,考虑手工订正或者新增异常处理服务。

异步推送双写

同步写入第一张表后,通过异步消息方式写第二张表不阻塞后续处理。
缺点:

  1. 增加系统复杂性,需要消息组件和异步写表服务。
  2. 存在不一致性的时间窗口,异步双写只能保证最终一致性。
  3. 要考虑到消息丢失的异常场景处理。

异步拉取双写

同步写第一张表后记录初始status,新增轮询服务区扫该表status是初始的记录,去写第2张表,增加了可靠性。
缺点:
异步推送双写的前2个问题还是存在。

最终一致性的架构设计

新增服务扫描2张表获取数据不一致的记录,进行订正。

缺点: 效率低导致不一致的时间窗口过长。

每次写入后推送消息通知订正服务,实时性高

缺点:增加系统复杂性

数据不一致的场景引出了写数据顺序的问题,根据场景决定如果第一步成功,第二步失败会有什么结果(不存在第一步失败第二部成功的场景)

相关文章

  • 冗余表设计

    弱关联多对多:弱关联指的是单向关系,即A关注B,但不一定B就关注A 需要额外增加2张关系表,分别是关注表和粉丝表(...

  • DDBS 冗余表数据一致性

    本文主要讨论四个问题:(1)为什么会有冗余表的需求(2)如何实现冗余表(3)正反冗余表谁先执行(4)冗余表如何保证...

  • MYSQL优化杂谈五,表结构设计优化

    模型设计 适度冗余,让Query尽量减少Join 大字段垂直拆分summary表优化(表的垂直拆分) 大表的水平拆...

  • 关系数据库规范化

    如何设计关系数据库的各个表,减少数据冗余? 数据库范式化 目的减少数据中重复和冗余 冗余带来的问题额外的存储开销语...

  • 数据库性能优化

    选择合适的 DBMS 数据表的设计方式 3范式设计反范式设计,冗余,空间换时间,减少多表连接,从而提高查询效率 逻...

  • 数据库表设计之经验总结

    表设计软件:一般都用 powerdesign 1、数据库设计的实用原则是: 在数据冗余和处理速度之间找到合适的...

  • 第34期:MySQL 表冗余设计

    引言: 上一篇我介绍了 MySQL 范式标准化表设计,范式设计具有以下优点:把如何消除数据冗余做到极致,从而减少关...

  • mysql表设计规范和字段设计规范和开发使用规范

    表设计规范: 每个innodb表都要有一个主键, 限制表上索引的数量,避免简历重复和冗余索引 注意合理选择符合索引...

  • Mysql调优思路

    设计合理的表结构。 根据业务场景建立合适的索引,避免出现大量全表扫描的请求。 添加适量的冗余字段,尽可能避免多表连...

  • 数据库设计三范式

    按照范式进行,可以避免表中数据的冗余、空间的浪费 第一范式: 1. 最核心,最重要的范式,所有表的设计都要满足 ...

网友评论

      本文标题:冗余表设计

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