分片并不意味着分布式

news2024/9/27 21:23:48

Sharding(分片)是一种将数据和负载分布到多个独立的数据库实例的技术。这种方法通过将原始数据集分割为分片来利用水平可扩展性,然后将这些分片分布到多个数据库实例中。

110892dc686db40e8db30a57f5db2752.png

1*yg3PV8O2RO4YegyiYeiItA.png

但是,尽管"分布"一词出现在分片的定义中,但分片数据库并不是分布式数据库。

分片解决方案

每个分片解决方案在其架构中都有一个关键组件。该组件可以有各种名称,包括协调器、路由器或导演:

866a4e93bb1a023f95c743647da50d53.png

1*kp39_8mQ0E9bIO0Lw3PGFw.png

协调器是唯一一个知道数据分布的组件。它将客户端请求映射到特定的分片,然后转发到相应的数据库实例。这就是为什么客户端必须始终通过协调器路由其请求的原因。

例如,如果客户端想要将新记录插入到Car表中,请求首先会传递到协调器。协调器将记录的主键映射到其中一个分片,然后将请求转发到负责该分片的数据库实例。

7d7a12af7dc6f623340bab46e7e87dd7.png

1*YNUB6y8WJnp0CCVAXSjQ0g.png

在上面的示意图中,首先,协调器将键121映射到分片10,然后将记录插入到存储在拥有分片10的数据库实例上的表car_10中。

然而,还有一个问题:为什么在分片解决方案中需要协调器呢?答案很直接。分片存储在设计用于单服务器部署的数据库实例上。

这些数据库实例不相互通信,也不支持任何能促进这种通信的协议。它们彼此不知道,存在于各自的隔离环境中,对于它们是一个更大系统的一部分这一事实毫不知情。

因此,在分片解决方案中,协调器是不可或缺的。如果您有兴趣更深入地了解分片数据库架构,请考虑探索用于PostgreSQL的CitusData或Azure CosmosDB,用于MySQL的Vitess,用于Oracle的Distributed Autonomous Database以及MongoDB Sharded Cluster。

分布式数据库

与分片数据库解决方案类似,分布式数据库也使用类似的分片技术在数据库节点群集中分发数据和负载。但是,与分片解决方案不同,分布式数据库不依赖于协调器组件。

分布式数据库建立在共享无关架构上,没有像协调器这样的单一组件负担着做出许多决策:

11f846e701164f20fe1676f49f961b63.png

1*deOgcXccWs9lKUSgLPNOww.png

集群中的所有节点都知道对方,因此也知道数据的分布。通过直接通信,每个节点可以将客户端请求路由到适当的分片所有者。此外,它们可以执行和协调多节点事务。当扩展到更多节点时,集群会自动重新平衡和分割分片。节点保持数据的冗余副本(基于配置的复制因子),即使某些节点失败,也可以继续操作而无需停机。

所有这些对于客户端来说是透明的,客户端只需与任何节点建立连接,然后允许该节点管理分布式方面。

例如,客户端可能连接到node1并插入具有id121的新的Car记录。如果node1是记录分片的所有者,则它将在本地存储记录,并使用共识算法将更改复制到其他节点的子集。如果不是,node1将记录转发到分片的所有者,可能是node4

1faf4c27db45eedc14828be968f0d607.png

1*weEdq2BxIpf6GiLjipns5Q.png

如果您有兴趣探索真正分布式数据库的架构,请考虑研究Google Spanner,YugabyteDB,CockroachDB,Apache Cassandra或Apache Ignite。

在数据库领域,分片和分布经常被混为一谈,但它们有着不同的目的。

虽然分片涉及将数据分割到多个独立的实例中,但这并不意味着系统本质上是分布式的。分片解决方案中协调器的存在,该协调器指导客户端请求到适当的分片,突显了这一区别。

另一方面,建立在共享无关架构上的分布式数据库缺乏这种集中式协调器。这些系统中的节点都知道对方,管理数据分布,并无缝处理客户端请求。

这两种架构都有其优点,了解它们的细微差别对于进行数据库设计和选择至关重要。

 

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

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

相关文章

03-基于Feign的远程调用,详解Feign的自定义配置和优化,创建Feign模块

Feign远程调用 Feign替代RestTemplate 利用RestTemplate发起远程调用的代码的缺点 代码可读性差编程体验不统一 , 面对参数复杂的URL难以维护 String url "http://user-service/user/" order.getUserId(); User user restTemplate.getForObject(url, User.cla…

idea中的sout、psvm快捷键输入,不要太好用了

目录 一、操作环境 二、psvm、sout 操作介绍 2.1 psvm,快捷生成main方法 2.2 sout,快捷生成打印方法 三、探索 psvm、sout 底层逻辑 一、操作环境 语言:Java 工具: 二、psvm、sout 操作介绍 2.1 psvm,快捷生成m…

pytorch中gather函数的理解

pytorch函数gather理解 torch.gather(input, dim, index, outNone) → Tensor Parameters: input (Tensor) – 源张量dim (int) – 索引的轴index (LongTensor) – 聚合元素的下标(index需要是torch.longTensor类型)out (Tensor, optional) – 目标张量 公式含义 这个函数的…

STM32 寄存器配置笔记——系统时钟配置 HSE as PLL

一、概述 本文主要介绍使用HSE高速外部时钟通过PLL倍频输出72MHZ的时钟作为系统时钟。下图为时钟树。 使用正点原子的开发板调试OSC_IN、OSC_OUT接的是8MHZ的晶振即为HSE时钟。 二、配置流程 1)复位RCC相关的所有寄存器 复位内容是参考正点原子例程,按照…

家政保洁预约小程序app开发特点有哪些?

家政预约服务小程序APP开发的特点介绍; 1. 低成本:用户通过手机APP下单,省去了中介费用,降低了雇主的雇佣成本。 2. 高收入:家政服务人员通过手机APP接单,省去了中介费用,从而提高了服务人员的…

2023.11.20使用flask做一个简单图片浏览器

2023.11.20使用flask做一个简单图片浏览器 功能: (1)输入指定路径,打开文件夹 (2)判断文件格式为图片 (3)在前端进行预览 (4)使用bootstrap进行简单美化 ma…

Android Studio 引入Xui框架-简单应用

Android Studio Flamingo | 2022.2.1 Patch 2 Android 11开发、Gradle Version 8.0、 jdk17 源代码:GitHub - xuexiangjys/XUI: 💍A simple and elegant Android native UI framework, free your hands! (一个简洁而优雅的Android原生UI框架&#xff…

Centos8部署LNMP架构

LNMP架构 LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python。 1.Linux是一类Unix计算机操作系统的统称…

13 redis中的复制的拓扑结构

1、一主一从 为了性能考虑,主节点可以不开启AOF,但是要避免重启。 2、一主多从 适用于读操作的场景。由于从节点多,所以主的复制压力大 3、树状主从 数据先同步到redisB,redisC从节点C,E来看,redisB相当于主机了,可以…

微服务 Spring Cloud 8,开源RPC框架如何选型?

目录 一、开源RPC框架有哪些?1、跟语言平台绑定的开源RPC框架2、跨语言平台的开源RPC框架 二、跟语言平台绑定的开源RPC框架 -- Dubbo1、Dubbo的架构主要包含四个角色2、Dubbo的调用框架是如何实现的? 三、如何选择?四、跨语言平台的开源RPC框…

Linux shell编程学习笔记27:tput

除了stty命令,我们还可以使用tput命令来更改终端的参数和功能。 1 tput 命令的功能 tput 命令的主要功能有:移动更改光标、更改文本显示属性(如颜色、下划线、粗体),清除屏幕特定区域等。 2 tput 命令格式 tput [选…

基于SSM的校园活动资讯网设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

OceanBase:OBServer节点管理

目录 1.查看节点 2.添加节点 2.1 创建数据目录 2.2.OceanBase 运行时所依赖的部分三方动态库 2.3.安装 OceanBase 数据库的 RPM 包 2.4.启动节点 observer 进程 2.5.向集群中添加节点 3.隔离节点 4.重启节点 4.1 停止服务 4.2 转储 4.3 关闭进程 4.4 启动进程 4.…

单体进化微服务:拆分、注册、调用、网关、过滤、治理、分布式事务

这里写目录标题 基本介绍生产-消费-网关父依赖生产者服务消费者服务网关服务common服务 感想 基本介绍 Spring Cloud 是一个用于构建分布式系统和微服务架构的开发工具包。它提供了一系列的功能和组件,用于解决微服务架构中的常见问题,如服务注册与发现…

Python---函数的应用案例(多个)

案例:使用print方法打印一条横线 print(- * 40) 案例:对上个案例进行升级,可以根据输入的num数值,生成指定数量的横线 def print_lines(num, length):""" print_lines函数主要作用用于生成多条指定长度的横线&…

Windows安装MongoDB

1、下载MongoDB的zip,解压 2、创建目录 mkdir D:\JavaSoftware\Database\MongoDB\mongodb-win32-x86_64-windows-5.0.8\data\db mkdir D:\JavaSoftware\Database\MongoDB\mongodb-win32-x86_64-windows-5.0.8\data\log 3、创建一个配置文件mongod.cfg&#xff0c…

【JavaEE】Servlet实战案例:表白墙网页实现

一、功能展示 输入信息: 点击提交: 二、设计要点 2.1 明确前后端交互接口 🚓接口一:当用户打开页面的时候需要从服务器加载已经提交过的表白数据 🚓接口二:当用户新增一个表白的时候,…

Self-Supervised Exploration via Disagreement论文笔记

通过分歧进行自我监督探索 0、问题 使用可微的ri直接去更新动作策略的参数的,那是不是就不需要去计算价值函数或者critic网络了? 1、Motivation 高效的探索是RL中长期存在的问题。以前的大多数方式要么陷入具有随机动力学的环境,要么效率…

1.Qt5.15及其以上的下载

Qt5.15及其以上的下载 简介: ​ Qt是一个跨平台的C库,允许开发人员创建在不同操作系统(如Windows、macOS、Linux/Unix)和设备上具有本地外观和感觉的应用程序。Qt提供了一套工具和库,用于构建图形用户界面&#xff0…

C语言基础---函数、数组

目录 一、函数 二、数组​ 一、函数 交换两个数: 发现这样并没有交换a和b的值,只是交换了x和y的值,这是因为: //当实参传递给形参的时候,形参是实参的一份临时拷贝 //对形参的修改不能改变实参 实参与形参是…