聊聊数据冗余

简介: 聊聊数据冗余

每天分享一个架构知识

我们总是说数据库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 著
相关文章
|
SQL 关系型数据库 MySQL
MyCat2介绍以及部署和读写分离/分库分表(MyCat2.0)
MyCat2介绍以及部署和读写分离/分库分表(MyCat2.0)
2409 0
|
分布式计算 Java Hadoop
三台阿里云服务器搭建完全分布式Hadoop集群
三台阿里云服务器搭建完全分布式Hadoop集群
2164 1
三台阿里云服务器搭建完全分布式Hadoop集群
|
存储 分布式计算 安全
HDFS分布式文件系统架构原理详解
HDFS(Hadoop Distributed File System)是Hadoop核心组成之一,是分布式计算中数据存储管理的基础,被设计成适合运行在通用硬件上的分布式文件系统。HDFS架构中有两类节点,一类是NameNode,又叫“元数据节点”,另一类是DataNode,又叫“数据节点”,分别执行Master和Worker的具体任务。HDFS是一个(Master/Slave)体系结构,“一次写入,多次读取”。HDFS的设计思想:分而治之—将大文件、大批量文件分布式存放在大量独立的机器上。
HDFS分布式文件系统架构原理详解
|
安全 数据中心
HTTP静态、动态住宅ip代理和数据中心代理是什么?有什么区别?
HTTP静态、动态住宅ip代理和数据中心代理是什么?有什么区别?
809 0
HTTP静态、动态住宅ip代理和数据中心代理是什么?有什么区别?
|
JSON 关系型数据库 MySQL
MySQL全文搜索与JSON支持:高效检索与灵活数据处理
本文深入探讨了MySQL数据库中的全文搜索与JSON支持,通过详细的代码示例,阐述了全文搜索的原理、全文索引的创建,以及JSON数据类型的使用与操作。全文搜索在数据库中的重要性日益凸显,MySQL提供了全文索引来实现高效的文本数据检索,通过MATCH AGAINST语句,可以轻松地进行全文搜索操作。此外,MySQL的JSON支持为半结构化数据的存储和查询提供了灵活的解决方案,您可以存储JSON对象、数组等数据,并使用JSON函数来查询和修改数据。
1658 0
|
消息中间件 存储 缓存
golang如何使用rocketmq 附加闭坑指南 建议收藏!!!
golang如何使用rocketmq 附加闭坑指南 建议收藏!!!
1908 0
|
安全 Unix Linux
信息安全:恶意代码防范技术原理.
信息安全:恶意代码防范技术原理.
414 1
|
机器学习/深度学习 数据采集 算法
数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(二)
数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(二)
1320 1
|
供应链 监控 安全
【区块链】记账的千年演化:从泥板到区块链
记账,作为人类文明进步的重要标志之一,其技术与方法的演变,见证了经济、社会乃至文化的深刻变迁。从最原始的实物记录到今天的数字账本——区块链,每一阶段的革新都推动着交易透明度、安全性与效率的大幅提升。本文将穿越千年历史长河,探索记账科技的演进之路。
443 0

热门文章

最新文章