常用数据保存技术概述
本文概述了分布式环境中常用的数据处理技术,以及它们的一些关键点和优点。
还记得过去的关系数据库管理系统吗?我们过去常常在同一个表中用外键作为引用实体来组织列的关联集,主要是为了减少不同表之间的数据冗余。 例如,我们不是在员工的个人详细信息表和地址详细信息表中放入“员工姓名”列,而是只在个人详细信息表中保留它,而“emp_id”可以是地址详细信息表中的外键。
- 大表被分割成具有列子集的各种表,以减少重复和冗余的列值。
- 标准化过程包括不同的阶段,如1NF、2NF、3NF和Boyce & codd (BCNF)。
- 所涉及的各种引用实体,如唯一键、外键、超级键等。
- 从多个表中获取数据需要连接。
- 由于数据冗余,在表的插入、更新和删除操作过程中消除数据库异常。
- 搜索、排序和创建索引的速度更快,因为表更窄,数据页可以容纳更多的行。
- 索引搜索通常更快,因为索引往往更窄、更短。
- 更灵活地调整查询。
- 更少的空值和mysql数据库同步 冗余数据,使数据库更加紧凑
这里有一篇关于这个主题的好文章。com/2015/05/normalization-in-DBMS/
分区是一个通用术语,仅指数据库拆分(分片)。 它可以以多种形式实现,例如,列划分或行划分。 分区将包含数据表和索引的大型数据库分成更小、更方便的数据片段,称为分区。 查询直接使用分区表,不做任何更改。
一旦数据库被分区,数据定义语言就可以很容易地在较小的分区上工作,而不是完全处理大型数据库。 这就是分区如何减少管理大型数据库表的问题。
- 分区提高了查询功能。 查询在相对较小的分区集合上比在大型数据库上响应更快,因此功能和性能水平得到了提高。
- 并行性,应用程序可以以并行方式提取和处理数据,从而减少处理时间。
- 与大型数据库相比,较小分区的可管理性和维护相对容易。
- 当然,高可用性可以通过复制分区来实现。
数据库分片是将一个数据库/表中的数据分割成多个具有相同模式的数据库/表的过程,这样数据就被分割成多个更小的不同块,称为分片。 换句话说,分片是一种将单个逻辑数据集拆分并存储在多个数据库中的方法,通常是在多台机器上。
简而言之,按行分割表意味着在多个数据库中分布表行,这就是所谓的水平分割。
这个想法在本质上是非常普遍的。 这就是为什么分片可以在应用程序或数据库级别实现。 在许多数据库中,分片是一个一流的概念,数据库知道如何在一组数据库中存储和检索数据。e. 集群。
如今,几乎所有现代数据库都支持分片。 Cassandra和MongoDB是一些流行的分布式数据库。
- 在所有数据库中复制相同的模式。
- 分片**对于查找所需数据所在的位置很重要。
- 每个碎片中都有唯一的数据集。
- 分片通过添加更多的数据库来保存新数据,解决了水平轴上的缩放问题。
- 与数据分区相比,这是一个更便宜的解决方案。
一般来说,只要满足以下任一条件,就建议进行切片:
- 写/读工作负载太高,单个服务器无法处理。 许多并发用户访问一个数据库。
- 工作数据集或索引不再适合内存。
- 数据集太大,即使在单个服务器中也不容易容纳,可维护性是一个噩梦。
注意: #1和#2是大多数传统数据库中人们需要碎片的最常见原因。
为了分割数据,需要一个**,称为分片**。 该分片键是集合中每个文档中存在的索引字段或索引复合字段。
没有选择切分键的一般规则;您选择的**取决于您的应用程序和数据。 例如,您可以在员工数据库中选择标识作为分片**。 例如,它可能依赖于应用程序中使用的频繁搜索标准、数据库的地理位置等。
分片允许您的应用程序进行更少的查询。 当应用程序收到请求时,它知道将请求路由到哪里,因此它必须搜索更少的数据,而不是搜索整个数据库表。
它提高了应用程序的整体性能,减少了延迟,让您更轻松地休息,而不必担心可伸缩性问题。
从概念上讲,垂直分片只不过是一种数据分区形式。 这可以通过将大模式分成不同的小模式,并相应地将不同的数据块存储在不同的机器上来实现。 按列拆分表,这意味着单列的列分布在不同的数据库中。 考虑到业务应用领域,这种情况会发生。 我们对应用程序数据进行逻辑分割,并将数据存储在不同的数据库中。
大多数情况下,这是在应用程序级别实现的。 代码负责从指定的数据库进行读写。
- 模式在不同的数据库之间进行逻辑分割。
- 主要涉及领域知识。
- 每个数据库中都可能存在重复的列。 例如,主键列“标识”在不同的数据库中作为外键。
- 它通过在同一台机器上增加更多空间或计算能力来保存或计算新数据,从而解决垂直轴上的缩放问题。
- 与达到一定水平后进行分割相比,这是一个成本更高的解决方案。
- 主要出于空间和性能考虑。 例如,将客户的账单地址信息转储到一个单独的表中,并以客户标识作为参考,这样,在将来,该设计可以灵活地将该信息移动到一个单独的数据库中,以解决不同的安全问题等。
- 有一些blob类型的列保存非常大的图像或多媒体信息,可以很容易地存储到单独的数据库中,这是为不同的维护计划而设计的。
- 某些类型的数据需要一种特殊的数据库,如时间序列数据库,以便进行有效的处理。
数据复制是将数据保存在多台机器上的过程,这些机器可以位于不同的地理位置。 它有利于提高数据的性能和可用性,尤其是在分布式环境中。 这种技术只是将数据从一台机器上的数据库复制到另一台机器上,这样所有的用户都可以看到相同的数据而不会有任何不一致。
- 数据复制包含事务级别的重复,因此它可以以一致的状态复制信息,并与源数据库同步。
- 完全复制是一种将整个数据库存储在每个站点的方案。
- 部分复制是一种复制数据库中一些常用片段而不复制其他片段的方案。
- 增加数据的可用性。
- 增加应用程序的吞吐量。
- 将数据丢失或数据损坏的风险降至最低。
- 将总延迟降至最低,使应用程序更具响应性。
因此,在一个地方总结各种数据库概念的高级概述是一件小事。
和往常一样,如果我犯了什么错误,或者如果我能以任何方式提供帮助,请在评论中给我写一行。 谢谢!