数据库管理-第179期 分库分表vs分布式(20240430

数据库管理179期 2024-04-30

  • 数据库管理-第179期 分库分表vs分布式(20240430)
    • 1 分库分表
      • 1.1 分库
      • 1.2 分表
      • 1.3 组合
      • 1.4 问题
    • 2 分布式
    • 3 常见分布式数据库
    • 4 期望
    • 总结

数据库管理-第179期 分库分表vs分布式(20240430)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Associate: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、认证技术专家、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,OceanBase观察团成员
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

趁着4月最后一天,再写一篇文章吧,给4月收个尾,顺便提前祝大家五一劳动节快乐,但还是要在这里批斗一下调休补班。
其实这篇文章的启发,来自于前几天一个去了某大厂做数据库的兄弟来电,和我讨论分库分表和分布式区别,以及分布式高可用方面的一些探讨,想着还是总结一下。

1 分库分表

其实在我看来吧,分库分表和分布式的界限挺模糊的,但二者的目的其实是差不多,即当数据量达到一定规模,业务并发无法由单机数据库承载,需要将数据与负载打散至若干数据库/服务器,以求用更小的个体在整体层面支撑更大的业务并发和数据量。

1.1 分库

其实分库很好理解,就是将不同的业务分在不同的数据库上:
image.png

1.2 分表

分表其实和分区表类似,把一张大表拆分成若干小表,这些小表既可以分散在一个数据库中,也可以分散在不同数据库中:
image.png
分表同样需要业务侧去阻止数据在不同数据库之间的分布,并根据业务需求到指定地方查询需要的数据。

1.3 组合

分库分表一般通过业务应用程序配置或使用数据库中间件(比如MyCAT)来实现,为了尽可能提高关联数据查询效能,可以将打散后不同业务的关联数据以某种约定的关联方式(主外键、表父子关系等)存放在同一数据库节点(或多个)内。
image.png
为何要这么做,其实无论是分库分表还是分布式,数据拆分之后,部分涉及跨数据分组或全局的查询,其实就是将传统数据库中放在内存中的计算部分通过网络去实现,而现在IT架构中网络是最不稳定的因素之一,同时高性能(高带宽、低延迟)的网络环境又是相对比较贵的。因此要尽可能将关联数据查询放在一块内存中实现;很多使用分库分表/分布式的地方,也要求业务逻辑简单,尽可能以点查为主。其余全局查询则使用搜索引擎或列存实现。

1.4 问题

  • 对于数据库分散情况的元数据,往往需要在业务程序中或者数据库中间件之中配置好,不便于动态扩展或变更
  • 其实仍为多个独立数据库运行,无法实现全局负载均衡、并行等功能
  • 每个数据库需要自己维护高可用,使用主从或者多副本实现
  • 备份困难
  • 多模、HTAP依托使用的数据库本身,难以独立实现

2 分布式

其实分布式,或者说叫原生分布式,其实和分库分表要实现的目标类似,但是又实现了其他一些由数据库本身实现的一些功能:

  • 维护数据分散,包括元数据和路由等
  • 实现部分与全局的高可用
  • 实现全局执行计划生成
  • 实现全局负载均衡、并行等功能
  • 实现多模、HTAP等高级功能

3 常见分布式数据库

TiDB的架构倾向于存算分离架构,数据以分布式方式存放,通过PD维护元数据和数据路由,整体维护两套数据副本:TiKV用于OLTP,TiFlash实现OLAP(Online),整体实现HTAP(如果资源有限可以只上TiKV,TiFlash比较吃CPU资源,按需配置使用,TiFlash的数据由TiKV同步,相当于TiKV的列存只读副本-感谢严少安同学补充)。Storage Cluster本身维护自己的高可用,同时TiDB Cluster和PD Cluster都以多节点实现高可用。而计算层面从使用方式更倾向于集中式。
image.png

Oceanbase 4.3的架构则倾向于存算一体架构,数据库元数据存放在数据库的系统租户中。在每个OBServer中通过数据库内核实现行列混存、多模等功能,以实现HTAP和多模联查等功能。OBProxy则作为无状态服务,提供SQL分发能力。多个OBProxy节点通过网络负载均衡对应用提供统一的网络地址。租户的全局多副本实现了数据库的高可用。Oceanbase还通过引入租户模式,可以实现业务的拆分与隔离,通过对租户主可用区的规划,可以做到不同副本承载不同业务的负载。
image.png

PolarDB-X则和TiDB的架构类似,但是相较于TiDB和Oceanbase使用的LSM Tree存储,PolarDB仍然以B-Tree存储。
image.png

4 期望

我希望在以后的分布式数据库能提供节点降级的能力:

  • 当某节点磁盘故障:该节点的CPU、内存与网络资源仍能为集群提供相应能力;或者仅在本节点屏蔽损坏磁盘的相关数据使用
  • 使用多链路网络的节点部分网卡故障:减少该节点的网络流量
  • 节点部分CPU、内存故障:降低该节点负载分担

我希望能通过这个功能,降低硬件异常对全局性能的影响,减少性能波动。

总结

本期简单讲了下分库分表和分布式的一些异同,也扩展了一下自己对分布式数据库的一些期望。
老规矩,知道写了些啥。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue路由(路由基本使用,传参,多级路由)

目录 vue-router简介路由配置和使用嵌套(多级)路由路由传参方式1:路由的query参数方式2:路由的params参数props配置 命名路由取消路由组件在前进后退 vue-router简介 vue的一个插件库,专门用来实现SPA应用 路由配置…

k8s环境prometheus operator监控集群外资源

文章目录 k8s环境添加其他节点基于prometheus operator k8s环境prometheus operator添加node-exporter方式一:通过 ServiceMonitor 方式可以写多个监控node节点运行 external-node.yaml查看资源有没有被创建热更新 外部需要被监控服务器安装 node-exporterdocker 方…

git如何将多个commit合并成一个?

我们使用git进行版本控制,在本地开发完某个功能时,需要提交commit,然后push至开发分支。简单的功能还好,几个commit可能就好了。但是如果功能比较复杂,commit多达十几甚至几十个时,commit管理就会很冗长。比…

使用Pandas和Matplotlib实现数据探索性可视化

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用 Pandas 和 Matplotlib 实现数据探索性可视化 在数据分析和机器学习领域,数…

Apache POI 在java中处理excel

介绍: Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。 一般情况下&#xff0c;POI 都是用于操作 Excel 文件。 如何使用: 1.maven坐标引入 <depend…

实验八智能手机互联网程序设计(微信程序方向)实验报告

请在上一次实验的基础之上完成“手机快速注册”页面、“企业用户注册”页面&#xff0c;并实现点击手机快速注册和企业用户注册后转跳至该页面在“手机快速注册”页面&#xff0c;输入框内输入内容并失去焦点后&#xff0c;下方的按钮会变化 在企业用户注册页面&#xff0c;用户…

思考!思考!jmeter线程数≠用户并发数

最近又在搞性能测试了&#xff0c;相较于之前的写脚本出数据就完事&#xff0c;这次深入的思考了一下测试出来的指标&#xff0c;到底有什么意义&#xff1f;&#xff1f;&#xff1f; 绞尽脑汁思考了好几天&#xff0c;终于有了点思路&#xff0c;写出来与大家分享&#xff0…

掌握JavaScript面向对象编程核心密码:深入解析JavaScript面向对象机制对象基础、原型模式与继承策略全面指南,高效创建高质量、可维护代码

ECMAScript&#xff08;简称ES&#xff0c;是JavaScript的标准规范&#xff09;支持面向对象编程&#xff0c;通过构造函数模拟类&#xff0c;原型链实现继承&#xff0c;以及ES6引入的class语法糖简化面向对象开发。对象可通过构造函数创建&#xff0c;使用原型链共享方法和属…

基于RK1126的小型化低功耗AI相机,支持人体特征识别、人脸特征识别、案例帽识别等

提供可定制的⼀套 AI相机软硬件开发平台&#xff0c; 硬件采⽤ RockchipRV1126处理器解决 ⽅案&#xff0c;可选择搭配 SonyIMX系列传感器&#xff0c;POE供电与数据传输&#xff0c;采⽤ 38板标准结构设计&#xff0c;快速按需定制外壳&#xff0c;⽀撑从开发到验证到批量⽣产…

基于Matlab使用深度学习的多曝光图像融合

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在图像处理领域&#xff0c;多曝光图像融合技术是一种重要的技术&#xff0c;它可以将不同曝光条件下…

Ubuntu安装Neo4j

Ubuntu&#xff08;在线版&#xff09; 更新软件源 sudo apt-get update 添加Neo4j官方存储库 wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add - 将地址添加到系统的软件包源列表中 echo deb https://debian.neo4j.com stable latest | su…

update_min_vruntime()流程图

linux kernel scheduler cfs的update_min_vruntime() 看起来还挺绕的。含义其实也简单&#xff0c;总一句话&#xff0c;将 cfs_rq->min_vruntime 设置为&#xff1a; max( cfs_rq->vruntime, min(leftmost_se->vruntime, cfs_rq->curr->vruntime) )。 画个流…

第十四届蓝桥杯国赛:2023次方的思考(指数塔,数论)

首先我们要知道&#xff0c;正常计算的话&#xff0c;指数优先级最高&#xff0c;因此得先计算指数&#xff0c;比如&#xff1a; 2 3 2 512 2^{3^2}512 232512 欧拉定理的关键在于&#xff0c;它允许我们通过减少计算的指数大小来简化模运算。 经过仔细研究&#xff08;看题…

手写一个uart协议——rs232(未完)

先了解一下关于uart和rs232的基础知识 文章目录 一、RS232的回环测试1.1模块整体架构1.2 rx模块设计1.2.1 波形设计1.2.2代码实现与tb1.2.4 仿真 1.3 tx模块设计1.3.1波形设计 本篇内容&#xff1a; 一、RS232的回环测试 上位机由串口助手通过 rx 线往 FPGA 发 8 比特数据&a…

Qt在任务栏图标和系统托盘图标上显示红点

在任务栏图标上显示红点 关键类&#xff1a;QWinTaskbarButton #include <QWinTaskbarButton>QPointer<QWinTaskbarButton> taskbarBtn nullptr; if (!taskbarBtn) {taskbarBtn new QWinTaskbarButton(window);taskbarBtn->setWindow(window->windowHand…

用C实现通讯录(详细讲解+源码)

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL.. &#x1f4da;以后会将数据结构收录为一个系列&#xff0c;敬请期待 ● 本期内容会给大家带来通讯录的讲解&#xff0c;主要是利用结构体来实现通讯录&#xff0c;该通讯…

一周学会Django5 Python Web开发 - Django5 ORM数据库事务

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计50条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

如何给MP3添加专辑封面

MP3的专辑封面可以直接显示在音频播放器上&#xff0c;但如果我们的音乐文件没有专辑封面怎么办&#xff1f;下面来给大家介绍如何添加mp3封面 打开智游剪辑&#xff08;官网&#xff1a;zyjj.cc&#xff09;&#xff0c;搜索音乐封面添加 我们上传一下音乐文件和专辑封面&…

8 聚类算法

目录 0 背景 1 Kmeans 1.1 聚类数量k的确定 2 DBSCAN 2.1 三个点 2.2 算法流程 3 层次聚类 3.1 过程 4 基于分布的聚类:高斯混合模型 0 背景 聚类算法是一种无监督学习技术&#xff0c;用于将数据集中的数据点划分为不同的组或簇&#xff0c;使得同一组内的数据点彼此相…

【微信公众平台】扫码登陆

文章目录 前置准备测试号接口配置 带参数二维码登陆获取access token获取Ticket拼装二维码Url编写接口返回二维码接收扫描带参数二维码事件编写登陆轮训接口测试页面 网页授权二维码登陆生成ticket生成授权地址获取QR码静态文件支持编写获取QR码的接口 接收重定向参数轮训登陆接…