使用分布式数据库,还需要考虑做分库分表吗?

news2024/9/20 17:00:24

随着数据存储需求的不断增加,分布式数据库成为了处理大规模数据的一种重要方式。分布式数据库可以将数据分散到多个计算节点上,并利用分布式计算的能力来提高数据处理的效率和可用性。然而,在使用分布式数据库的过程中,是否需要进行分库分表呢?

分库分表是指将数据库中的数据按照一定规则划分到多个数据库或表中,以减轻单个数据库或表的负担,提高数据查询和更新的效率。在单机数据库中,分库分表是一种常见的优化方式,可以解决单机数据库在数据规模增大时所面临的性能瓶颈问题。但是,在分布式数据库中,是否需要进行分库分表就需要根据具体情况进行判断了。

分布式数据库大多采用的是分片架构(sharding),即将数据按照一定规则分片存储到多个计算节点上,那么分库分表的工作已经在架构中完成了,不需要再进行额外的分库分表操作。

对于分布式数据库,sharding的分区机制就可以满足大多数场景的需求,不一定非要再进行分库分表。分布式数据库中的sharding功能,本质上就是通过把数据集合分区到多个节点上,实现数据和请求的均衡,从而解决单机的存储和计算能力瓶颈。

相比额外引入分库分表中间件,直接利用分布式数据库自身的sharding分区可以带来以下优势:

  1. 避免了额外的分表中间件层,系统架构更简单

  2. 数据分区自动平衡,避免手动调节分库分表

  3. 查询直接路由到指定分区,避免跨库跨表join

  4. 数据持久化和备份由分布式数据库统一管理

  5. 支持弹性扩容节点,自动重新平衡分区

以OceanBase数据库为例,OceanBase 数据库采用 Shared-Nothing 架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎、事务引擎,运行在普通 PC 服务器组成的集群之上,具备高可扩展性、高可用性、高性能、低成本、与主流数据库高兼容等核心特性。

OceanBase 数据库的一个集群由若干个节点组成。这些节点分属于若干个可用区(Zone),每个节点属于一个可用区。可用区是一个逻辑概念,表示集群内具有相似硬件可用性的一组节点,它在不同的部署模式下代表不同的含义。例如,当整个集群部署在同一个数据中心(IDC)内的时候,一个可用区的节点可以属于同一个机架,同一个交换机等。当集群分布在多个数据中心的时候,每个可用区可以对应于一个数据中心。每个可用区具有 IDC 和地域(Region)两个属性,描述该可用区所在的 IDC 及 IDC 所属的地域。一般地,地域指 IDC 所在的城市。可用区的 IDC 和 Region 属性需要反映部署时候的实际情况,以便集群内的自动容灾处理和优化策略能更好地工作。根据业务对数据库系统不同的高可用性需求,OceanBase 集群提供了多种部署模式,参见 高可用架构概述。

在 OceanBase 数据库中,一个表的数据可以按照某种划分规则水平拆分为多个分片,每个分片叫做一个表分区,简称分区(Partition)。某行数据属于且只属于一个分区。分区的规则由用户在建表的时候指定,包括hash、range、list等类型的分区,还支持二级分区。例如,交易库中的订单表,可以先按照用户 ID 划分为若干一级分区,再按照月份把每个一级分区划分为若干二级分区。对于二级分区表,第二级的每个子分区是一个物理分区,而第一级分区只是逻辑概念。一个表的若干个分区可以分布在一个可用区内的多个节点上。每个物理分区有一个用于存储数据的存储层对象,叫做 Tablet ,用于存储有序的数据记录。

OceanBase 数据库可以把普通的表的数据按照一定的规则划分到不同的区块内,同一区块的数据物理上存储在一起。这种划分区块的表叫做分区表,其中的每一个区块称作分区。OceanBase 数据库的 MySQL 模式中,单个表最多支持创建的分区个数为 8192 个。

如下图所示,一张表被划分成了 5 个分区,分布在 2 台机器上:

图片

分布式数据库是可以通过分区(Partition)代替大部分分库分表的场景的,两者目的都是为了解决单机数据库处理能力的存储和计算瓶颈。分区主要目的是:

  1. 分散数据库requests,缓解单机IO压力,提高吞吐。

  2. 分片存储数据,解决单机容量限制,实现横向扩展。

  3. 通过Hash或Range方式将数据均匀分配到不同节点,避免热点。

  4. 可方便地添加节点,实现存储和计算的弹性伸缩。

  5. 当节点故障时,通过重分片使得数据自动恢复。

  6. 可根据节点配置差异,存储计算能力 heterogeneous。

所以,分区是实现数据库扩展性的核心手段。分布式数据库本身也是通过分区来实现分布存储和计算的。 

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

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

相关文章

网络安全工具包NST发布38-13644版本

导读开源网络安全工具包NST近日发布了最新版本38-13644。该版本基于Fedora 38构建,使用Linux 6.3.12内核,主要针对软件的维护与功能增强进行了更新。 根据发布公告,新版本通过Docker容器方式重构了OpenVAS和Greenbone漏洞扫描组件,实现了完整的漏洞评估能力。另外,还增强了地理…

微信公众号程序PHP源码 收银台源码 商家PHP源码 微信支付扫码付款 商家收银台

商家收银台-微信支付扫码付款-微信支付收银台-PHP源码 微信公众号程序,必须微信认证服务号,微信支付商家 客户扫码,打开商家定义支付页面,输入金额和对应定义信息,提交微信支付,实现快速付款 支持创建多…

信息系统网络安全整改方案

第1章 项目概述 1.1 项目目标 本方案将通过对公司网络信息系统的安全现状进行分析工作,参照国家信息系统等级保护要求,找出信息系统与安全等级保护要求之间的差距,给出相应的整改意见,推动 XX 企业公司网络信息系统安全整改工作的…

将jar包打入本地maven仓库

1、准备好要入仓的jar包 2、在jar包所在文件夹打开cmd 3、输入如下命令进行打包 mvn install:install-file -DgroupIdcom.netty.common -DartifactIdnetty-common -Dversion1.0-SNAPSHOT -Dpackagingjar -Dfilenetty-common-1.0-SNAPSHOT.jar如下图所示:

TCP连接的状态详解以及故障排查(三)

TCP连接建立三次握手 TCP是一个面向连接的协议,所以在连接双方发送数据之前,都需要首先建立一条连接。 Client连接Server: 当Client端调用socket函数调用时,相当于Client端产生了一个处于Closed状态的套接字。 (1)第一次握手&a…

10.事件流

10.1事件流和两个阶段说明 ●事件流指的是事件完整执行过程中的流动路径 简单来说:捕获阶段是从父到子 冒泡阶段是从子到父 10.2事件捕获 事件捕获概念: 从DOM的根元素开始去执行对应的事件(从外到里) ●事件捕获需要写对应代码才能看到效果 ●代码:…

Java从入门到精通(三)· 基础逻辑

Java从入门到精通(三) 基础逻辑 一 分支结构 1.if分支 if分支是根据条件的真假来决定执行某段代码。 If 分支的小技巧和常见问题: 2.switch分支 通过比较变量的值来确定执行哪条分支。 switch的使用注意事项: 当存在多个case分…

基于Java的闲置物品管理系统(源码+文档+数据库)

很多在校学生经常因为冲动或者因为图一时的新鲜,购买了很多可能只是偶尔用一下的物品,大量物品将会闲置,因此,构建一个资源共享平台,将会极大满足师院学生的需求,可以将其闲置物品挂在资源共享平台上让有需要的学生浏览&#xff0…

玩转graphQL

转载至酒仙桥的玩转graphQL - SecPulse.COM | 安全脉搏 前言 在测试中我发现了很多网站开始使用GraphQL技术,并且在测试中发现了其使用过程中存在的问题,那么,到底GraphQL是什么呢?了解了GraphQL后能帮助我们在渗透测试中发现哪些…

Go语言Gin框架的基本用法

目录 【基本的HTTP请求】 GET请求 POST请求 文件操作 重定向 HTTP获取三方服务数据 不同格式的内容输出 异步请求 【中间件】 中间件校验数据 登录中间件 【启动多个服务】 Gin框架官网:https://gin-gonic.com/zh-cn/,新增一个Go文件&…

为机器人装“大脑” 谷歌发布RT-2大模型

大语言模型不仅能让应用变得更智能,还将让机器人学会举一反三。在谷歌发布RT-1大模型仅半年后,专用于机器人的RT-2大模型于近期面世,它能让机器人学习互联网上的文本和图像,并具备逻辑推理能力。 该模型为机器人智能带来显著升级…

光线追踪会影响3D渲染速度吗?

什么是光线追踪? 光线追踪 是模拟光源在现实生活中如何反应的方法。它追踪光线到达物体的路径,真实地模拟光线如何反射回来,以创建准确的反射、折射、阴影和间接照明。 我们在光线追踪中经常遇到的术语之一是路径追踪。它们是一样的吗&#x…

有什么进行仓库出入库管理的软件?

公司的仓库管理一直都是难题,不论是仓库进货发货,还是仓库储存,每一步都至关重要。其实对于仓库管理系统来说,主要包括以下三个需求: 1.录入商品信息2.记录进出货过程3.查询分析仓库数据 那么有哪些进行仓库出入库管…

【Spring Boot】请求参数传json对象,后端采用(pojo)CRUD案例(102)

请求参数传json对象,后端采用(pojo)接受的前提条件: 1.Spring Boot 的启动类加注解:EnableWebMvc 2.Spring Boot 的控制层接受参数采用:RequestBody Spring Boot 启动类:加注解:En…

03 制作Ubuntu启动盘

1 软碟通 我是用软碟通制作启动盘。安装软碟通时一定要把虚拟光驱给勾选上,其余两个可以看你心情。 2 镜像文件 我使用清华镜像网站找到的Ubuntu镜像文件。 Index of /ubuntu-releases/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 请自己选择镜像…

关于视频汇聚融合EasyCVR平台多视频播放协议的概述

视频监控综合管理平台EasyCVR具备视频融合能力,平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台既具备传统安防视频监控的能力与服务,也支持AI智能检测技术的接入,可应用在多行业领域的智能化监管场…

【实操教程】如何开始用Qt Widgets编程?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 在本文中&#xff0…

矩阵按键行列扫描法与反转扫描法:原理、代码实现

矩阵按键:行列扫描法与反转扫描法 通常情况下,按键按下时会产生低电平信号,按键一般用低电平表示按下状态。 当按键没有被按下时,通常处于高电平状态,这是因为按键连接到电路时,内部的上拉电阻或外部的上拉…

快速创建vue3+vite+ts项目

安装nodejs 创建项目 npm init vitelatest 默认之后回车 选择项目名字my-vue-project 选择vue框架 选择ts 运行项目 cd my-vue-project npm install --registryhttps://registry.npm.taobao.org npm run dev

2023年第四届“华数杯”数学建模思路 - 案例_ ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法,就是频繁模式树算法&…