当前位置:首页>WordPress资讯>了解数据库分片的入门知识

了解数据库分片的入门知识

了解数据库分片的入门知识

创建一个网站是在互联网上建立你的存在的第一步。为了长期发展,你还必须确保你的网站能够扩展以适应增长。而第一步就是实施一个能与你一起扩展的。否则,你有可能遇到查询性能缓慢和数据库中断的风险。

这篇文章将讨论如何使用来实现数据的高扩展性和可用性。我们还将谈到分片的缺点和你可以使用的不同分片架构。

  1. 什么是数据库分片?
  2. 数据库分片的好处
  3. 分片的缺点
  4. 分片架构

什么是数据库分片?

分片是一种优化技术,将表分布在其他数据库上。它和分区一样,都涉及到将数据分割成更小的子集。不同的是,分片将这些子集分布在不同的服务器上,而分区将它们存储在一个数据库中。这些服务器使用相同的数据库引擎和硬件类型,以实现所有分片的类似性能水平。

分片的目的是完成一个无共享的架构,消除处理瓶颈和单点故障。

了解数据库分片的入门知识

分片的一个例子 (图片来源:Analytics Vidhya)

你可以通过两种方式实现分片–横向和纵向。横向分片是根据行来划分表,而纵向分片是根据列来划分表。

在这方面,分片就像分区一样,将大表分成小表。

水平分片对于大多数查询返回行的子集的数据库是有效的,比如客户数据库,它一次就能返回数据(如姓名、地址、等)。

垂直分片对那些查询返回单列的数据库来说是有效的。例如,如果客户数据库分别返回客户的姓名或电子邮件,你可以把姓名和电子邮件分成不同的群组。

数据库分片的优势

以下是数据库分片的一些优势。

改进水平扩展

你可以垂直或水平地扩展你的数据库。垂直扩展是指在服务器上增加更多的中央处理单元(CPU)和随机存取内存(RAM),以提高性能。对于中小型数据库来说,垂直扩展是一个有用的解决方案。然而,随着你的数据增长,垂直扩展变得不可行了。你能添加到一台服务器上的能量是有限的。

横向扩展是更灵活的。它使你能够通过在系统中添加更多的服务器,根据需要扩展你的数据库。这些服务器中的每一个都为不同的数据库分片提供资源。这分配了工作负荷,提高了系统处理更多请求的能力。

更快的查询响应时间

分片只有几行和几列。正因为如此,处理所需的时间更短。相比之下,对非分片数据库的查询可能需要通过数百–甚至数千–行的搜索。

在故障情况下增加可靠性

数据库中断有各种原因,包括意外的数据删除、连接错误和攻击。分片可以将故障的影响降到最低。由于每个分片是自主的,只有受影响的分片才会面临停机。例如,如果你有四个分片,其中一个出现故障,只有25%的操作会受到影响。

分片的弊端

虽然分片可以提高数据库的可靠性和可用性,但实施起来很复杂。使用错误的分片架构会降低性能并导致数据丢失。

请确保选择一种分片技术,允许在所有分片上平衡地分配数据。如果没有这种平衡,你就会有创造数据库热点的风险,当一个分片存储大部分数据而其他分片几乎保持空闲时,就会出现这种情况。这就减少了对单个分片的写入吞吐量。

为了解决这个问题,你可以将不平衡的分片进一步分区,但这个过程很有挑战性,而且在迁移数据时可能会使你的数据库瘫痪。

分片的另一个缺点是,涉及不同分片中的多个表的SQL连接会变得太慢,并降低性能。然而,有了正确的架构,你可以避免这个问题。

分片架构

你可以使用三种架构实现分片。

  • 基于密钥的分片
  • 基于范围的分片
  • 基于目录的分片

你选择的架构取决于你的使用情况。

基于密钥的分片

在基于密钥或散列的分片架构中,数据库使用分片密钥来定位一个分片。对分片的密钥值进行散列,输出将数据映射到一个特定的分片。一个简单的散列函数可以是密钥的模数和分片的数量。

散列函数可以采取一个以上的分片密钥。正因为如此,基于密钥的分片适用于可能有共享密钥的数据记录。通过算法分配数据,可以最大限度地减少创建数据库热点的可能性,即一个分片包含的数据比另一个多。

然而,由于分布只依赖于散列函数,不可能在逻辑上将数据分组。因此,需要从多个分片中获取数据的数据库操作可能效率很低,因为它们需要从每个分片中读取数据。

基于范围的分片

基于范围的分片涉及根据指定的数值范围来分片数据库。

它使用一个分片键来确定将一个值分配给哪个分片。数据库应用程序在查询表中检查与分片键相对应的分片,并存储数据。正因为如此,基于范围的分片很容易设计和实现。

例如,你可以使用库中的用户ID值作为分片键。你可以在一个分片上存储ID为0-2,000的用户,在另一个分片上存储ID为2,000到4,000的用户,以此类推。

基于范围的分片会导致数据库热点。考虑一个用户数据库,其中大多数用户的ID位于2,001和4,000之间。这个过程将它们分配到一个分片上,随着时间的推移,会产生不平衡的现象。因此,基于范围的分片对均匀分布的数据来说效果最好。

基于目录的分片

基于目录的分片将逻辑上相关的数据归入同一分片。它使用一个查找表,其中包含数据库中每个实体的映射列表。每个映射对应于一个数据库分片。

基于目录的分片比基于范围或基于键的分片更灵活,因为你可以动态地将数据添加到分片中。没有分片功能需要遵循,也没有范围值需要保持。这种灵活性提高了数据库的效率。你可以在一个分片中存储相关的数据,这意味着执行普通查询需要更少的时间。

例如,如果你使用基于目录的分片,并根据用户的位置进行分组,从一个特定的地方检索用户,你只需要查询一个分片。

小结

数据库分片是一种扩展技术,它将表分割成更小的子集,并将其分配到不同的服务器上,称为分片。你可以通过各种方式实现分片,如基于密钥的分片、基于范围的分片和基于目录的分片。

虽然分片提高了数据库的可扩展性、可靠性和可用性,但它的实现非常复杂。此外,一旦你创建了一个分片,要把到未分片的状态并不容易。正因为如此,只有当你确定其他可扩展性选项不起作用时,才使用分片进行优化。

原文地址:https://www.wbolt.com/database-sharding.html

WordPress资讯

十佳WordPress适用的CTA插件

2024-1-22 1:06:27

WordPress资讯

20+必须知道的电子邮件营销统计数据(利用数据来促进电子邮件营销活动)

2024-1-22 1:06:29

个人中心
今日签到
有新私信 私信列表
搜索