分布式环境中使用的通用数据保持技术概述

图片标题

本文总结了分布式环境中常用数据处理技术的高级概述,以及它们的一些关键点和优点。

正常化

还记得RDBMS的旧时代,我们曾经在同一个表中组织关联的列集,外键作为引用实体,主要是为了减少不同表中数据的冗余吗?例如,不是将'employee_ name'列放在employee的personal_detail表和address_detail表中,而是将它保留在personal_details中,而'emp_id'可以是address_detail表中的外键。

关键点

  • 大表拆分为具有列子集的各种表,以减少重复和冗余列值。

  • 归一化过程包括各种阶段,如1NF,2NF,3NF和Boyce&codd(BCNF)。

  • 涉及各种参考实体,如Unique_key,Foreign_key,Super_key等。

  • 需要连接才能从多个表中获取数据。

图片标题

目的

  • 由于数据冗余而在表上插入,更新和删除操作期间删除数据库异常。

  • 搜索,排序和创建索引的速度更快,因为表格更窄,更多行适合数据页面。

  • 索引搜索通常更快,因为索引往往更窄更短。

  • 调整查询的灵活性更高。

  • 更少的空值和更少的冗余数据,使数据库更紧凑

这是一篇关于这个主题的好文章:https://beginnersbook.com/2015/05/normalization-in-dbms/

分区

分区是一个通用术语,仅指数据库拆分(分片)。它可以以多种形式实现,例如,列分割或行分割。分区将包含数据表和索引的大型数据库划分为更小且更方便的数据片段,称为分区。分区表直接由查询使用,无需任何更改。

一旦数据库被分区,数据定义语言就可以轻松地在较小的分区切片上工作,而不是完全处理巨型数据库。这就是分区如何减少管理大型数据库表的问题。

图片标题

目的

  • 分区提高了查询功能。查询可以对相对较小的分区而不是巨型数据库的集合响应更快,因此功能和性能级别得到提升和改进。

  • 并行性,数据可以由应用程序以并行方式获取和处理,这减少了处理时间。

  • 与大型数据库相比,较小分区的可管理性和维护相对容易。

  • 当然,通过复制分区可以实现高可用性。

拆分

数据库分片是将一个数据库/表中存在的数据分成具有相同模式的多个数据库/表的过程,使得数据被分成多个较小的不同块,称为分片。换句话说,分片是一种在单个逻辑数据集中分割和存储多个数据库并且通常在多台机器上的方法。

图片标题

水平分片

简单来说,逐行拆分表意味着在多个数据库之间分配表行,称为水平分片。

这个想法本质上是非常笼统的。这就是为什么可以在应用程序或数据库级别实现分片。在许多数据库中,分片是一流的概念,数据库知道如何在一组数据库(即集群)中存储和检索数据。

如今,几乎所有现代数据库本身都支持分片。Cassandra和MongoDB是一些流行的分布式数据库。

图片标题

关键点

  • 在所有数据库中复制相同的模式。

  • 分片键对于查找所需数据所在的位置非常重要。

  • 每个分片中都存在唯一的数据集。

  • 通过添加更多数据库来保存新数据,分片可以解决水平轴上的缩放问题。

  • 与数据分区相比,它是一种更便宜的解决方案。

目的

通常,只要满足以下任何条件,建议进行分片:

  • 写入/读取工作负载太高,无法由单个服务器处理。许多并发用户访问单个数据库。

  • 工作数据集或索引不再适合内存。

  • 数据集太大,即使在单个服务器中也不容易适应,可维护性是一场噩梦。

注意:  #1和#2是迄今为止人们在大多数传统数据库中需要分片的最常见原因。

怎么样?

对于分片数据,需要一个密钥,称为分片密钥。此分片键是索引字段或集合中每个文档中存在的索引复合字段。

选择分片键没有一般规则; 您选择的密钥取决于您的应用程序和数据。例如,您可以选择ID作为员工数据库中的分片键。例如,它可以取决于跨应用程序使用的频繁搜索条件,数据库的地理位置等。

图片标题

分片允许您的应用程序减少查询次数。当它收到请求时,应用程序知道在哪里路由请求,因此它必须搜索较少的数据而不是遍历整个数据库表。

它可以提高应用程序的整体性能,减少延迟,让您更轻松地休息,而不必担心可伸缩性问题。

垂直分片

从概念上讲,垂直分片只不过是一种数据分区形式。这可以通过将大模式拆分成各种小模式并相应地将不同的数据块存储在不同的机器中来完成。逐列拆分表,即单个故事列,分布在不同的数据库中。考虑到业务应用程序领域,会发生这种情 我们在应用程序数据中进行逻辑拆分,并将数据存储在不同的数据库中。

大多数情况下,这是在应用程序级别实现的。代码负责从指定的数据库进行读写操作。

图片标题

关键点

  • 模式在不同数据库之间进行逻辑分割。

  • 主要涉及领域知识。

  • 每个数据库中都可以存在重复的列。例如,主键列“Id”作为不同数据库中的外键。

  • 它通过在同一台机器中增加更多空间或计算能力来解决垂直轴上的缩放问题,以保存或计算新数据。

  • 与某个级别之后的分片相比,这是一个更昂贵的解决方案。

目的

  • 主要针对空间和性能问题做好准备。例如,客户的账单地址信息被转储到一个单独的表中,其中CustomerId作为参考,以便将来设计可以灵活地将该信息移动到单独的数据库中,以解决不同的安全问题等。

  • 有一些blob类型的列可以容纳真正的大图像或多媒体信息,可以轻松存储到一个单独的数据库中,该数据库计划用于不同的维护计划。

  • 某种数据需要一种特殊的数据库,如时间序列数据库,以便进行有效处理。

复制

数据复制是将数据保存在可以存在于地理位置不同的站点上的多台计算机上的过程。它有利于提高数据的性能和可用性,尤其是在分布式环境中。此技术只是将数据从一台计算机上的数据库复制到另一台计算机,以便所有用户都可以看到相同的数据而不会出现任何不一致。

关键点

  • 数据复制包含事务级别的双重性,以便它可以以一致的状态复制信息并与源数据库同步。

  • 完全复制是一种方案,其中整个数据库存储在每个站点。

  • 部分复制是一种方案,其中复制一些经常使用的数据库片段而不复制其他片段。

目的

  • 增加数据的可用性。

  • 增加应用程序的吞吐量。

  • 最大限度地降低数据丢失或数据损坏的风险。

  • 最小化整体延迟,使应用程序更具响应性。

因此,在一个地方总结各种数据库概念的高级概述是一项小小的工作。

一如往常,如果我犯了任何错误,或者我可以以任何方式提供帮助,请在评论中留言。谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值