聊聊数据冗余

简介: 聊聊数据冗余

每天分享一个架构知识

我们总是说数据库3范式,范式其实是一种理想的实现方式。

然而理想很丰满,现实很骨感。

我们做的互联网项目,扩展快,需求变化多,什么事情都得有个度,其实严格遵循范式,就会导致多个表。对于查询不是很友好。

那么什么时候可以进行数据冗余呢?

以我丰富经验,总结了一下几点,如果你有更好的点,也可以私信评论。

1数据查询频繁:如果某个数据在系统中频繁被查询,而且通过联接操作会导致复杂的查询语句或性能问题,可以考虑在不同表之间进行冗余设计,将相关数据冗余存储到一个表中,以提高查询性能。2数据复杂度较高:当数据实体包含大量复杂的关联信息或需要多表联接才能获取完整信息时,可以通过冗余设计将关联信息冗余存储到一个表中,以简化查询操作。3数据报表或统计需求:如果系统需要频繁生成报表或进行统计分析,并且这些操作需要访问大量的数据和复杂的联接操作,可以通过冗余设计将报表或统计所需的数据冗余存储到一个表中,以提高生成报表和统计的性能。

那么这么做有什么优点呢?

1提高查询性能:通过数据冗余,可以避免复杂的联接操作和多表查询,减少查询语句的复杂度,从而提高查询性能和响应速度。2简化系统设计:数据冗余可以简化系统设计和查询逻辑,减少开发复杂度和维护成本。3支持报表和统计:通过冗余设计,可以提前计算和存储报表和统计所需的数据,从而加快报表和统计的生成速度。

那么如何实现表的冗余设计呢?

1冗余列:在一个表中添加冗余列,将其他表中的数据冗余存储到该列中,以避免联接操作。2冗余表:创建一个新的表,将相关的数据冗余存储到该表中,以简化查询操作。3数据同步:通过触发器、定时任务或其他机制,将数据从源表同步到目标表中,以提供冗余备份和查询性能的优化。canal 同步到nosql 大宽表
在实施数据冗余设计时,需要注意数据一致性和更新维护的问题。由于数据冗余会导致数据的冗余存储和更新的复杂性,需要确保对冗余数据的维护和同步机制的正确性,以避免数据不一致的问题。同时,也需要权衡冗余设计带来的存储成本和维护复杂性,并根据具体的系统需求和性能要求选择适合的实现方式。
最后一个问题
在实施数据冗余设计时,保持数据一致性的方式有那些?

  1. 事务管理:使用数据库事务来确保在进行数据更新或插入操作时的原子性和一致性。在涉及到冗余数据的更新操作时,确保所有相关数据的更新在同一个事务中进行,要么全部成功,要么全部回滚。
  2. 数据同步机制:使用合适的数据同步机制来确保冗余数据的同步和一致性。可以考虑使用触发器、定时任务或消息队列等机制来监测和同步源数据和冗余数据之间的变化。
  3. 异步更新:在更新源数据后,异步地更新冗余数据。通过使用消息队列等异步机制,将源数据的变更事件发送到冗余数据的更新程序,以减少源数据更新操作的延迟。
  4. 定期检查和修复:定期检查冗余数据与源数据的一致性,并进行必要的修复操作。可以通过定期运行校验脚本或作业来比较源数据和冗余数据的差异,并纠正不一致的部分。
  5. 数据审计和监控:实施数据审计和监控机制,记录冗余数据的变更历史和监控数据一致性。通过记录和监控,可以及时发现数据一致性问题并进行处理。
  6. 数据访问控制:限制对冗余数据的直接访问,只允许通过指定的渠道或接口访问冗余数据。这样可以确保数据的一致性维护在冗余数据的更新程序中进行。
  7. 自动化测试:实施自动化测试,包括单元测试和集成测试,用于验证冗余数据的一致性和正确性。通过编写和运行测试用例,可以及时发现和修复冗余数据的问题。

学习架构首先得懂的架构设计的原则,下面是一些经典书籍,感兴趣的可以看看

  1. 《软件架构设计的艺术》(The Art of Software Architecture) - Stephen T. Albin 著
  2. 《软件架构师实践指南》(Software Architecture for Developers) - Simon Brown 著
  3. 《软件架构设计模式》(Software Architecture Design Patterns in Java) - Partha Kuchana 著
相关文章
|
1月前
|
存储 监控 关系型数据库
如何避免使用冗余索引
【10月更文挑战第15天】如何避免使用冗余索引
29 1
|
6月前
|
存储
云存储中的数据一致性与冗余策略
【5月更文挑战第31天】云存储关键在于数据一致性和冗余策略。强一致性确保所有副本始终同步,可能影响性能;最终一致性允许短暂不一致,最终达一致。多副本策略复制数据提高可用性,纠删码策略通过编码创建冗余。结合两者以平衡性能与准确性。选择合适策略可提升云存储系统性能、可用性和可靠性,未来研究将深化这一领域。
94 1
|
1月前
|
算法 Java 关系型数据库
漫谈分布式数据复制和一致性!
漫谈分布式数据复制和一致性!
|
4月前
|
存储 人工智能 负载均衡
分布式存储的数据冗余
【7月更文挑战第28天】分布式存储的数据冗余
156 4
|
6月前
|
存储 关系型数据库 数据库
关系型数据库的数据一致性和完整性
【5月更文挑战第1天】关系型数据库的数据一致性和完整性是数据库设计中的两个重要概念,它们共同保证了数据库中数据的准确性和可靠性。
234 2
关系型数据库的数据一致性和完整性
|
6月前
|
关系型数据库 数据库 数据库管理
关系型数据库数据一致性和完整性
【5月更文挑战第8天】关系型数据库数据一致性和完整性
156 4
|
6月前
|
负载均衡
网络分区容错性
网络分区容错性
132 2
|
6月前
|
缓存 Java API
数据一致性
数据一致性
59 1
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
31530 70
如何保证分布式文件系统的数据一致性
|
存储 消息中间件 移动开发
分布式系统中的数据复制
网络故障可能会导致主主架构中的数据不一致。 让我们用一个例子来理解这一点,假设我们有两个数据库实例 A 和 B。
55 1