什么是数据库分片?

2023年 8月 15日 76.6k 0

随着增长带来新的挑战,并且需要选择基础设施来应对这些挑战。其中一部分是找到合适的数据库架构来支持不断增长的应用程序规模和流量。

数据库分片是一种旨在帮助应用程序通过水平扩展来满足扩展需求的架构。它能够满足额外的存储需求并更有效地处理请求。

本教程解释什么是数据库分片并介绍其优点和缺点。该指南提供了要考虑的分片方法以及替代方案的示例。

什么是数据库分片?

数据库分片允许您跨多个数据库分布单个数据集。它是一种水平分区数据库架构,其中数据库共享一个模式,但每个数据库保存不同的数据行。与垂直分区相比,不要将分片视为一种特定类型的分区。

这允许其他服务器节点分担请求负载。这种负载分布同时增加了存储能力以及服务器可以处理的请求数量。

下图显示了分片通常的样子: 水平数据库分区/分片示例

这里,初始数据库 ( example_db) 被划分为两个数据库 (example_db_part_1example_db_part_2)。每个分区或“分片”都会从初始数据库中获取一些行。

数据库分片的优缺点

数据库分片可以适应应用程序的增长,从而扩大存储潜力并使请求更加高效。然而,它并不适合所有情况,并且可能有缺点。

接下来的两节介绍了考虑对应用程序进行分片的原因,以及寻找替代方案的原因。

分片的原因

分片适合水平扩展模型,也称为横向扩展模型。这些模型增加了节点数量,以提高服务器处理不断增长的流量和存储需求的能力。与这些水平扩展模型一致,数据库分片为不断增长的应用程序提供了性能优势,例如:

  • 增强的存储能力:单台机器具有实际的存储限制,但通过分片进行水平扩展有助于通过增加机器数量来避免这些限制。
  • 改进的响应时间:分片数据库通常在较小的数据库实例上读写,这可以减少定位数据和提供响应所需的时间。
  • 增强可靠性:由于分片数据库中的数据是分布式的,因此数据服务不会轻易被擦除。影响单个分片的中断不会自动关闭整个数据库。

不分片的原因

数据库分片满足特定需求,通过扩展来提高存储能力和性能。然而,它并不是适合所有数据库的正确解决方案。分片有其自身的缺点,必须予以考虑。在权衡分片的好处时,请记住以下不分片数据库的潜在原因:

  • 增加了复杂性:本质上,分片会扩展支持数据库服务器所需的节点数量。随着节点的增加,管理和维护工作也随之增加。不仅如此,还必须考虑额外基础设施本身的成本。
  • 每个请求的负载增加:分片数据库需要由路由器管理,路由器将请求定向到适当的分片。仅此一点就增加了请求的一些开销。任何需要整理来自多个分片的数据的请求都会增加负担,路由器必须查询每个相关分片才能满足这些请求。

数据库分片的方法

有多个选项可用于构建数据库分片。这些决定了在分片之间划分数据的位置和方式。为了使分片数据库有效,必须一致地划分数据。

以下是三种最常用的分片架构:

  • 基于密钥的分片:也称为基于哈希的分片。此方法采用一列,通过哈希函数运行其值,并根据结果将数据排序到分片中。用于散列的列可以称为散列键,其值可以像分片的主键一样使用。
  • 此图显示了一个数据库,其中id列被散列,由表表示example_db_hash。然后数据库根据哈希值进行分片: 基于键的分片的图示示例 实际上,哈希值并不存储在它们自己的表中。它们源自用于向分片添加数据的函数。该函数在这里简单地显示为表格,以帮助可视化该示例。
  • 基于范围的分片:该方法根据特定列中的值范围来划分分片。例如,按列date分片的数据库可能会将所有数据放置date < 2010-01-01在一个分片中,并将所有数据放置date >= 2010-01-01在另一个分片中。
  • 在上面使用的示例中添加一pub_year列对此效果很好。在这里,数据库被分为pub_year < 1900一个分片和pub_year >= 1900另一个分片: 基于范围的分片的图示示例
  • 基于目录的分片:这种方法采用分片查找表根据类别将数据与特定分片相关联。可以在特定列中跟踪类别,并且分片过程可以将该列的不同可能值与特定分片相关联。
  • 在此示例中,目录分片基于列type,该列有两个可能的值paperbackhardcover。查找表用于将这些类型的条目分配给适当的分片: 基于目录的分片的图示示例

数据库分片的替代方案

考虑到分片的优点和缺点,您可能会认为它不是您应用程序的最佳选择。也许您想知道有哪些替代解决方案。

为了提供帮助,这里有一些针对数据库分片可以考虑的选项。每个都提供不同的功能,可以满足不同的扩展需求:

  • 利用垂直扩展:当垂直扩展基础设施不可行时,分片和其他水平扩展解决方案是最好的选择。因此,最好首先考虑垂直缩放。这包括直接扩展数据库服务器的存储容量等。
  • 使用专业服务:例如,如果您的数据库当前存储二进制文件数据,则将该数据的存储移动到云存储提供商。这些措施可确保您使用最有效的服务来存储每种数据。
  • 实施数据库复制:此选项适用于需要大量读取请求但不需要太多写入请求的数据库。复制为读取请求创建数据库副本,并且可以通过负载平衡等方式增强性能。

结论

您现在应该了解数据库分片的概念,以及为什么它可能适合或不适合您的应用程序。通过不同分片方法的示例以及一些替代方案,您现在可以准备决定适合您的应用程序需求的最佳解决方案。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论