聊聊数据冗余

简介: 聊聊数据冗余

每天分享一个架构知识

我们总是说数据库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月前
|
缓存 Java API
数据一致性
数据一致性
33 1
|
1月前
|
负载均衡
网络分区容错性
网络分区容错性
27 2
|
5月前
|
存储 消息中间件 移动开发
分布式系统中的数据复制
网络故障可能会导致主主架构中的数据不一致。 让我们用一个例子来理解这一点,假设我们有两个数据库实例 A 和 B。
29 1
|
8月前
|
容灾 NoSQL Redis
关于冗余设计
冗余设计是保证系统和数据高可用的最常的手段。
166 1
|
9月前
|
SQL 缓存 算法
分库分表的优点
分库分表的优点
|
10月前
|
存储 缓存 文件存储
如何保证分布式文件系统的数据一致性
分布式文件系统需要向上层应用提供透明的客户端缓存,从而缓解网络延时现象,更好地支持客户端性能水平扩展,同时也降低对文件服务器的访问压力。当考虑客户端缓存的时候,由于在客户端上引入了多个本地数据副本(Replica),就相应地需要提供客户端对数据访问的全局数据一致性。
31145 66
如何保证分布式文件系统的数据一致性
|
11月前
|
算法 网络协议 NoSQL
「数据一致性」理解分布式系统中的一致性
「数据一致性」理解分布式系统中的一致性
|
数据采集
冗余分析
上一次给大家介绍了如何用R语言进行主成分分析,今天介绍的主角也是PCA的好朋友噢,掌声欢迎我们的第二位小伙伴——冗余分析(RDA)。
995 0
冗余分析
|
存储 NoSQL 数据库
分布式存储系统的一致性是什么?
(本文内容仅代表作者个人观点,不代表OceanBase官方。) 在分布式存储系统(包括OceanBase这样的分布式数据库)的使用中,我们经常会提到“一致性”这个词,但是这个术语1在不同的系统、不同人的心目中有不同的内涵,很容易造成混淆。 想象一个最简单的存储系统,只有一个客户端(单进程)和一个服务端(单进程服务)。客户端顺序发起读写操作,服务端也顺序处理每个请求,那么无论从服务器视角
3564 0
|
存储 关系型数据库 测试技术

热门文章

最新文章