带你一起理解什么是数据库分片?

如果你想将你的关系数据库变得可扩展和高可用,你应该记住哪些权衡点呢?

  • 数据库分片是将数据划分为分区的过程,然后可以存储在多个数据库实例中。
  • 它使用一些键来对数据进行分区。此键是要存储的数据的属性。

假设数据库中有 1000 个用户,而您有 5 个数据库服务器。您希望对用户 ID 上的数据进行分片。因此,您可以通过以下方式对数据进行分区

  • 用户 ID 000–199 ->数据库 1。
  • 用户 ID 200–399 -> 数据库 2。
  • 用户 ID 400–599 -> 数据库 3.
  • 用户 ID 600–799 -> 数据库 4.
  • 用户 ID 800–999 -> 数据库 5.

现在,如果用户 ID 546 想要执行读/写操作,他将仅连接到数据库实例 3。由于只有 200 个用户 ID,查询处理速度很快。

注意:这是基于范围的分片的示例。

分片架构的类型

基于范围的分片

  • 在此方法中,我们根据键的范围对数据进行分区。
  • 它非常容易实现
  • 数据可能不会均匀分布在分片之间。
  • 在下面的示例中,有 5 个元组和 3 个分片。

 

基于键的分片/基于哈希的分片

  • 在此方法中,我们生成键的哈希值(此处键是数据的属性之一)。此哈希值确定我们将用于存储数据的分片。
  • 使用简单哈希函数分发数据可能会导致分布偏斜。为了克服这个问题,我们可以使用一致哈希。
  • 在下面的示例中,有 6 个元组和 3 个分片。我们使用了一个简单的哈希函数h(x) = x%3

 

基于目录的分片

  • 在这种方法中,我们创建一个查找表,该查找表使用共享键来检查哪个分片保存哪些数据。查找将每个键映射到分片。
  • 它比基于范围和键的分片更灵活。
  • 查找表会变成单点故障。

 

水平分区和分片的区别

  • 在水平分区中,我们将表拆分为同一数据库实例中的多个表,而在分片中,我们将表拆分为跨多个数据库实例的多个表。
  • 在水平分区中,我们使用相同的数据库实例,因此分区表的名称必须不同。在分片中,由于表存储在不同的数据库实例中,因此表名可以相同。

分片的优势

  • 高可用性 即使一个分片崩溃,其他分片仍在运行,仍然可以处理查询。因此,数据库作为一个整体保持部分功能。
  • 提供安全性 用户只能访问某些分片。因此,您可以在不同的分片上实现不同的访问控制机制。
  • 更快的查询处理 由于每个服务器中的数据集大小都很小,因此索引的大小也很小。这样可以加快查询处理速度。
  • 提高读取和写入吞吐量 只要在一个分片上完成操作,读取和写入容量都会增加。
  • 高可扩展性 对数据进行分区并将它们存储在不同的分片中,在数据和内存方面提供了可扩展性(因为它将负载分散到多台机器上 每个分片中的内存使用量较少,并且网络带宽不会饱和)

分片的缺点

  • 复杂性 服务器必须知道如何将查询路由到适当的分片。如果我们添加用于在服务器中查找分片的代码,则会使服务器更加复杂。
  • 事务和回滚 您无法处理对不同分片中存在的两个不同表的查询。因此,跨分片的交易是不可能的。因此,回滚也是不可能的。
  • 如果我们想连接来自两个不同分片的两个表,那么查询需要转到两个不同的分片,提取数据并通过网络连接数据。这是一项非常昂贵的操作。
  • 基础设施成本 分片需要通过单个数据库服务器获得更多的计算机和计算能力。如果没有适当的优化,那么成本的增加可能会很大。

分层分片

增加/减少分片的数量是非常困难的。因此,您只能拥有固定数量的分片。

由于分片的数量是固定的,因此其中一个分片可能会变得太大。为了解决这个问题,我们可以对大分片进行分片。每个分片都有一个管理器,用于将请求映射到正确的迷你分片。它被称为分层分片。

在下面的示例中,在第一级,我们有 3 个分片,我们使用基于目录的分片。我们再次对分片 0 进行分区并使用基于键的分片。

 

实现高可用性的主从架构

如果我们想在数据库实例下线的情况下从分片查询数据,我们可以使用主从架构。

在主从架构中,有多个从站正在复制主站。每当有书面请求时,它总是在主服务器上,每当有读请求时,它就会均匀地分布在从站上。如果主站发生故障,从站从站会在他们中间选择一个主站。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值