数据分片在分布式 SQL 数据库中的工作原理

各种规模的企业都在拥抱面向用户的应用程序的快速现代化,作为其更广泛的数字化转型战略的一部分。此类应用程序所依赖的关系数据库 (RDBMS) 基础设施突然需要支持更大的数据量和事务量。然而,在这种情况下,单体 RDBMS 往往很快就会过载。在 RDBMS 中获得更高性能和可扩展性的最常见架构之一是“分片”数据。在本博客中,我们将了解什么是分片以及如何使用它来扩展数据库。我们还将回顾常见分片架构的优缺点,并探讨如何在YugaByte DB 等基于 SQL 的分布式 RDBMS 中实现分片。

什么是数据分片?
分片是将大表分解成更小的块(称为分片)的过程,这些块分布在多个服务器上。分片本质上是一个水平数据分区,包含总数据集的子集,因此负责服务整体工作负载的一部分。这个想法是将无法容纳在单个节点上的数据分布到数据库节点集群上。分片也称为水平分区。水平和垂直之间的区别来自于数据库的传统表格视图。数据库可以垂直拆分(将不同的表列存储在单独的数据库中),也可以水平拆分(将同一表的行存储在多个数据库节点中)。

图 1:垂直和水平数据分区(来源:Medium)

为什么要对数据库进行分片?
依赖整体 RDBMS 的业务应用程序随着增长而遇到瓶颈。由于CPU、存储容量和内存有限,数据库性能必然受到影响。未分片数据库的查询性能和日常维护变得极其缓慢。当涉及到添加资源来支持数据库操作时,垂直扩展(也称为向上扩展)有其自身的限制,并最终达到收益递减的点。

另一方面,水平分区表意味着有更多的计算能力来服务传入的查询,因此您最终可以获得更快的查询响应时间和索引构建。通过不断平衡额外节点上的负载和数据集,分片还可以轻松扩展以容纳更多容量。此外,从长远来看,由更小、更便宜的服务器组成的网络可能比维护一台大型服务器更具成本效益。

除了解决扩展挑战之外,分片还可以减轻意外中断的影响。在停机期间,未分片数据库中的所有数据都无法访问,这可能会造成破坏或彻底灾难性的。如果做得正确,分片可以提供高可用性:即使托管几个分片的一两个节点出现故障,只要其他节点(托管剩余分片)运行,数据库的其余部分仍然可用于读/写操作。不同的故障域。总体而言,分片可以增加集群总存储容量,加快处理速度,并以比垂直扩展更低的成本提供更高的可用性。

手动分片的危险
分片,包括第一天的创建和第二天的重新平衡,如果完全自动化,可以为大容量数据应用程序带来福音。不幸的是,Oracle、PostgreSQL、MySQL 等单体数据库,甚至 Amazon Aurora 等较新的分布式 SQL 数据库都不支持自动分片。这意味着如果您想继续使用这些数据库,则需要在应用程序层进行手动分片。最终结果是开发复杂性大幅增加。您的应用程序必须具有额外的分片逻辑才能准确了解数据的分布方式以及如何获取数据。您还必须决定采用哪种分片方法、创建多少分片以及使用多少节点。如果您的业务需求发生变化,还要考虑分片键甚至分片方法的变化。

手动分片最重大的挑战之一是分片分配不均匀。数据不成比例的分布可能会导致分片变得不平衡,一些分片过载,而另一些则相对空。最好避免在分片上积累过多数据,因为热点可能会导致速度减慢和服务器崩溃。这个问题也可能是由小分片集引起的,这迫使数据分布在太少的分片上。这在开发和测试环境中是可以接受的,但在生产中则不行。数据分布不均匀、热点以及在太少的分片上存储数据都会导致分片和服务器资源耗尽。

最后,手动分片会使操作流程变得复杂。现在必须对多台服务器执行备份。数据迁移和架构更改必须仔细协调,以确保所有分片具有相同的架构副本。如果没有充分的优化,跨多个服务器的数据库连接可能效率极低且难以执行。

常见的自动分片架构
分片已经存在很长时间了,多年来,不同的分片架构和实现已被用于构建大规模系统。在本节中,我们将讨论三个最常见的问题。

基于哈希的分片
基于哈希的分片采用分片键的值并从中生成哈希值。然后使用哈希值来确定数据应驻留在哪个分片中。借助ketama等统一哈希算法,哈希函数可以将数据均匀分布在服务器之间,降低热点风险。通过这种方法,具有接近分片键的数据不太可能被放置在同一个分片上。因此,这种架构非常适合有针对性的数据操作。

图 2:基于哈希的分片(来源:MongoDB 文档)

基于范围的分片
基于范围的分片根据数据值的范围(也称为键空间)来划分数据。具有附近值的分片键更有可能落入相同的范围并进入相同的分片。每个分片本质上都保留了原始数据库中相同的模式。分片变得就像识别数据的适当范围并将其放置在相应的分片上一样简单。

图 3:基于范围的分片示例

基于范围的分片允许高效查询,读取连续范围内的目标数据或范围查询。然而,基于范围的分片需要用户先验选择分片键,而选择不当的分片键可能会导致数据库热点。

一个好的经验法则是选择基数大、重复频率低且不会单调增加或减少的片键。如果没有正确的分片键选择,数据可能会在分片之间分布不均匀,并且与其他数据相比,特定数据可能会被更多地查询,从而在分片中产生潜在的系统瓶颈,从而导致工作负载较重。

解决分片大小不均匀的理想解决方案是执行自动分片拆分和合并。如果分片变得太大或托管频繁访问的行,则将分片分成多个分片,然后在所有可用节点上重新平衡它们,从而获得更好的性能。同样,当小分片过多时,可以进行相反的过程。

基于地理的分片
在基于地理(也称为位置感知)的分片中,数据根据用户指定的列进行分区,该列将范围分片映射到特定区域以及这些区域中的节点。例如,跨美国、英国和欧盟 3 个区域运行的集群可以依赖 User 表的 Country_Code 列将用户的行映射到最近的符合 GDPR 规则的区域。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络】DNS协议、ICMP协议、NAT技术

DNS协议、ICMP协议、NAT技术 一、DNS协议1、产生背景2、域名简介3、域名解析的工作流程4、使用dig工具分析DNS过程 二、ICMP协议1、ICMP介绍2、ICMP协议格式3、ping命令4、traceroute命令 三、NAT技术1、NAT技术背景2、NAT IP转换过程3、地址转换表4、NAPT技术5、重新理解路由器…

2023年亚太杯数学建模A题——深度学习苹果图像识别(思路+模型+代码+成品)

Image Recognition for Fruit-Picking Robots 水果采摘机器人的图像识别功能 问题 1:计数苹果 根据附件 1 中提供的可收获苹果的图像数据集,提取图像特征,建立数学模型,计算每幅图像中的苹果数量,并绘制附件 1 中所有…

佳易王各行业收银管理系统软件,企业ERP管理软件,企业或个体定制开发软件以及软件教程资源下载总目录,持续更新,可关注收藏查阅

系统简介 1、佳易王软件功能实用、操作简单、软件绿色免安装,解压即可使用,软件已经内置数据库,不需再安装其他数据库文件。 2、佳易王软件,已经形成系列,上百款管理系统软件涵盖多个行业。 3、已为多个企业个体定制…

mac rancher desktop 修改docker镜像源

1. ssh到rancher虚拟机 LIMA_HOME"$HOME/Library/Application Support/rancher-desktop/lima" "/Applications/Rancher Desktop.app/Contents/Resources/resources/darwin/lima/bin/limactl" shell 0 2. 提升权限 sudo bash 3. 更改镜像源 vi /etc/dock…

在 Go 中使用 Protocol Buffers

各位准备好了吗!这一次,我们将深入探讨 Protocol Buffers(protobuf)及其在数据序列化中的超能力所在。 介绍 Protocol Buffers,也被称为 protobuf,是由谷歌开发的一种语言无关的二进制序列化格式。其主要…

究极短的快排代码【QuickSort】

快排 QuickSort 两边向中间扫描法:取一个基点值,从左往右扫描,基点值左边所有元素小于它,遇到大于基点值的则停下,开始从右往左扫描,右边所有元素大于他,遇到小于基点值则停下,如果…

Win 10部署stable-diffusion-webui时github报错的解决方法

这篇博客就是简单记录一下。有很多文章已经详细介绍了怎么在Windows上部署stable-diffusion-webui了,例如: 本地部署Stable Diffusion教程,详细教学,已安装成功 - 知乎 (zhihu.com) 五千字长文:Stable Diffusion 保姆…

MySQL日期函数sysdate()与now()的区别,获取当前时间,日期相关函数

select sleep(2) as datetime union all select sysdate() -- sysdate() 返回的时间是当前的系统时间,而 now() 返回的是当前的会话时间。 union all select now() -- 等价于 localtime,localtime(),localtimestamp,localtimestamp(),current_timestamp,curre…

PyTorch-ReID重识别算法库与数据集资料汇总

Torchreid 是一个用于深度学习人员重新识别的库,用 PyTorch 编写,为我们的 ICCV’19 项目 Omni-Scale Feature Learning for Person Re-Identification 开发。 PyTorch-ReID的特点是 多GPU训练支持图像和视频 REID端到端培训和评估极其轻松地准备 Rei…

图书管理系统源码,图书管理系统开发,图书借阅系统源码三框架设计原理和说明

TuShuManger项目简介和创建 这里一共设计了6个项目,主要是借助三层架构思想分别设计了主要的三层,包括model实体层,Dal数据库操作层,Bll业务调用层,其他有公共使用项目common层,DButitly提取出来的数据库访问层,下面我们分别创建每个项目和开始搭建整个过程 TuShuManger…

nodejs+vue+python+PHP+微信小程序-书吧租阅管理系统的设计与实现-安卓-计算机毕业设计

在当今高度发达的信息中,信息管理改革已成为一种更加广泛和全面的趋势。为确保中国经济的持续发展,信息时代日益更新,书吧租阅管理系统仍在蓬勃发展。同时,随着信息社会的快速发展,各种管理系统面临着越来越多的数据需…

柑橘病害数据集(四类图像分类,没有打yolo标签)

1.文件夹分为训练集和测试集 在这个数据集中,有一类是新鲜柑橘,还有另外三种疾病,溃疡病、黑斑病和绿化病。 2.train文件夹 2.1.blackspot(黑斑病) 文件夹 206张照片 2.2.canker(溃疡病) 文…

STM32 配置中断常用库函数

单片机学习 目录 一、配置AFIO相关库函数 1.1函数GPIO_AFIODeInit 1.2函数GPIO_EventOutputConfig 1.3函数GPIO_EventOutputCmd 1.4函数GPIO_EXTILineConfig 二、配置EXTI相关库函数 2.1函数EXTI_DeInit 2.2函数EXTI_Init 2.3函数EXTI_StructInit 2.4函数 EXTI_Gener…

运维高级-day02

一、编写系统服务启动脚本 RHEL6风格 1、Linux运行级别 Linux运行有七个级别 级别 描述 0 停机状态,系统默认运行级别不能设置为0,否则系统不能正常启动。使用init0命令,可关闭系统 1 单用户状态,此状态仅root用户可登录。用…

超越噪音,让音乐重获新生:iZotope RX 10音频降噪修复软件

在音乐制作或者音频处理的过程中,噪音往往是一个让人头痛的问题。无论是环境噪音,还是设备产生的噪音,都会对音频质量产生重大影响。而现在,我们有了iZotope RX 10,这款专业的音频降噪修复软件,可以将你从噪…

C# 使用NPOI操作Excel的工具类

写在前面 NPOI是POI项目的.NET迁移版本。POI是一个开源的Java 读写 Excel、Word 等微软Ole2组件文档的项目;使用NPOI可以在没有安装Office或者相应环境的机器上对Word或Excel文档进行读写操作。 NPOI类库中操作EXCEL有两个模块分别是: 1️.HSSF模块&a…

【UCAS自然语言处理作业二】训练FFN, RNN, Attention机制的语言模型,并计算测试集上的PPL

文章目录 前言前馈神经网络数据组织Dataset网络结构训练超参设置 RNN数据组织&Dataset网络结构训练超参设置 注意力网络数据组织&Dataset网络结构Attention部分完整模型 训练部分超参设置 结果与分析训练集Loss测试集PPL 前言 本次实验主要针对前馈神经网络&#xff0…

#define例题

我们已经学了#define的所有知识,让我们来看这道题,可不要又陷入陷阱 题目要求: #define N 4 #define Y(n) ((N2)*n) int main() {int z 2 * (N Y(5 1));printf("z%d\n", z);return 0; } 求这个z的值是多少? 我们直接…

vuex actions异步请求 跟module模块化

actions vuex里面的异步操作,接受参数context ,参数有commt,getters,state 列如:调用 mutations 方法实现修改state 数据 (只能通过mutations 修改 state 数据) state:()>{count: 0, }mutations: {addCount(state)…

机器学习算法——主成分分析(PCA)

目录 1. 主体思想2. 算法流程3. 代码实践 1. 主体思想 主成分分析(Principal Component Analysis)常用于实现数据降维,它通过线性变换将高维数据映射到低维空间,使得映射后的数据具有最大的方差。主成分可以理解成数据集中的特征…