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

2024-05-01 04:52

本文主要是介绍数据库管理-第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、内存故障:降低该节点负载分担

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

总结

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

这篇关于数据库管理-第179期 分库分表vs分布式(20240430的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950757

相关文章

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

在Java中基于Geotools对PostGIS数据库的空间查询实践教程

《在Java中基于Geotools对PostGIS数据库的空间查询实践教程》本文将深入探讨这一实践,从连接配置到复杂空间查询操作,包括点查询、区域范围查询以及空间关系判断等,全方位展示如何在Java环... 目录前言一、相关技术背景介绍1、评价对象AOI2、数据处理流程二、对AOI空间范围查询实践1、空间查

Python+PyQt5实现MySQL数据库备份神器

《Python+PyQt5实现MySQL数据库备份神器》在数据库管理工作中,定期备份是确保数据安全的重要措施,本文将介绍如何使用Python+PyQt5开发一个高颜值,多功能的MySQL数据库备份工具... 目录概述功能特性核心功能矩阵特色功能界面展示主界面设计动态效果演示使用教程环境准备操作流程代码深度解

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动

MySQL数据库实现批量表分区完整示例

《MySQL数据库实现批量表分区完整示例》通俗地讲表分区是将一大表,根据条件分割成若干个小表,:本文主要介绍MySQL数据库实现批量表分区的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录一、表分区条件二、常规表和分区表的区别三、表分区的创建四、将既有表转换分区表脚本五、批量转换表为分区

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

基于MongoDB实现文件的分布式存储

《基于MongoDB实现文件的分布式存储》分布式文件存储的方案有很多,今天分享一个基于mongodb数据库来实现文件的存储,mongodb支持分布式部署,以此来实现文件的分布式存储,需要的朋友可以参考... 目录一、引言二、GridFS 原理剖析三、Spring Boot 集成 GridFS3.1 添加依赖

MySQL Workbench工具导出导入数据库方式

《MySQLWorkbench工具导出导入数据库方式》:本文主要介绍MySQLWorkbench工具导出导入数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录mysql Workbench工具导出导入数据库第一步 www.chinasem.cn数据库导出第二步