数据库管理-第七十七期 再探分布式(20230523)

news2024/12/28 18:05:18

数据库管理 2023-05-23

  • 第七十七期 再探分布式
    • 1 单机分布式
    • 2 分布式改造
    • 3 尝试改造一个订单系统
      • 3.1 表类型和分片键选择
      • 3.2 扩展分片
      • 3.3 业务扩展
    • 总结

第七十七期 再探分布式

上一次系统探讨分布式数据库还是在第三十六期,经过大半年的“进步”加上中间参加了不少国产数据库的研讨会或者交流,对分布式数据库的理解还是有了些许进步。

1 单机分布式

最近出现了所谓的“新词”:单机分布式,简言之就是一台服务器运行多个数据库实例,通过spanner框架等技术,通过服务器本机内存而不是网络实现数据库实例之间的数据交互。同时分片也能分布在不同服务器上,并实现跨服务器跨机房跨区域的副本。
在我看来单机分布式的出现有以下几个原因:

  • 高性能服务器性能卓越,CPU核心巨多、内存巨大、NVMe SSD巨快
  • 单个数据库实例无法完全使用高性能服务器的硬件性能资源(数据库本身差距或一些系统原因影响)
  • 环境网络能力不足,10GE网络无法满足大量数据库实例间的网络交互

第三十六期也讲过,分布式数据库的很多操作对内存和网络开销是灾难性的,所以单机分布式也是为了减少这方面的影响。同时更少的服务器也能极大减轻维护压力。
但是单机分布式本身又会带来一些其他的问题,比如各个数据库实例对CPU、内存、IO的争用,当然对于CPU和内存可以使用类似于Cgroup之类的技术实现隔离,IO则只能通过把不同实例分别部署在不同的物理磁盘上实现资源隔离。

2 分布式改造

正如我第六十九期讲的一样,各个使用分布式架构的国产数据库厂商基本上都在有意无意的避开分布式改造这件事情,其中需要涉及的代码改造、业务逻辑改造、数据逻辑改造要么不提要么就一笔带过,更有甚者直接说,我们的数据库不需要分布式改造。我还是那句话,就算是用单机分布式,原来使用集中式数据库向分布式数据库迁移,不进行分布式改造都是放屁和耍流氓。
为啥不提或隐去分布式改造需求,我认为有以下几点:

  • 可以卖更多的数据库实例license(向钱看,可能还能顺便帮助客户进行服务器换代)
  • 可以深度绑定数据库厂商(跑不动就给优化)
  • 可以更加便捷的入场(反正坑的是业务开发方)

总而言之,只要上船了,就可能任人宰割了。

3 尝试改造一个订单系统

这里我自己“编”了一套基于Oracle数据库架构的商城订单系统的数据库表设计:
在这里插入图片描述

这里的设计并非涉及订单系统的方方面面,主要还是涉及订单的主要内容:其中备注中的外面标识仅表示有主外键关系并非一定建立外键;表类型涉及基础数据、生产数据;各表按照范式要求进行设计。
接下来我们以5个分片为例,尝试对这个系统的数据库设计进行分布式改造,这里不考虑分片内是多副本还是主备,也不考虑高可用等因素:

3.1 表类型和分片键选择

表的类型(单表、复制表、分片表)和分片键的选择其实是相关联的,如何选择分片键也就选择了表的类型。首先我们可以判定本次涉及的表不会涉及到使用单表(当然如果加上一些系统配置信息是可以使用单表的);那么在分片键的选择就是重中之重。
下面以黄色指代复制表,以红色指代分片表。

  • 以用户进行划分
    这里我认为没有必要根据用户进行划分,因为人的消费能力、消费习惯是千差万别的,通过用户进行划分,即便是通过hash方式打散都很难做到最终涉及订单分片的跨分片数据平衡。

  • 以商品类型进行划分
    同和用户划分类似,商品的销售量也是千差万别的,涉及国计民生的商品销量可能很大,而奢侈品销量则可能很小,而这里又无法以自然划分的方式像地域那样进行划分,更可能的是某些大类需要拆成几种小类到多几个分片(甚至出现小类也需要分片或分片内分区),而某些大类则可能需要合并在一起到一个或少数几个分片。

  • 根据地域进行划分
    首先我们需要考虑一点,每个省根据人口、消费水平,各省的订单数量差距是有点大的,为了确保每个分片所涉及的数据量保持一致,所以需要在省表之上建立一个片区表,根据订单数量对片区进行划分,同时对省表、订单表和地址表还要做一些调整:
    在这里插入图片描述
    分片情况如下:
    在这里插入图片描述
    这里订单主表通过与片区表的主外键关系确保订单信息和地址相关信息都会存放在一个分片内;订单主表与详表之间的关联数据也通过主外键保持在一个分片内;而由于商品信息是全国化的,所以商品表是全局保持一致的复制表。这里需要考虑下面几个问题:
    – 商品表也可能出现数据量过大的问题,甚至会因为相同的商品在不同店铺(本次未涉及)之间而出现更加庞大的数据量维护,这就可能出现分片内关联查询数据比较大的问题。因此在涉及商品数据查询时,要把SQL语句写好,或者换一种方式获取商品信息(列存、全局搜索等)。
    – 用户表数据量可能非常庞大,如果按照片区进行关联分片则需要考虑用户跨片区下单和用户变更片区的问题,主要是跨分片查询;如果作为复制表则可能每个分片都要维护一个贼大的用户表,分片内关联查询则可能出现一些性能问题。但用户跨片区购买和片区变更毕竟是少数,因此用户表仍然可以考虑使用分片表。但还是建议根据更加详细的数据模型进行判断,并需要考虑用户相关的业务逻辑、语句书写。
    – 如果地域相关表完全分片有两个问题,首先是地域表数据量是非常小的其实没必要分片,第二是在跨分片查询时需要上升到元数据获取分片信息,因此其实可以数据还是按照地域进行划分,而地域相关的表则配置为复制表。
    综上进行一些变更:
    在这里插入图片描述
    我认为这样的设计就当前涉及范围是相对比较合理的。

3.2 扩展分片

这里我们考虑一个情况,咱们东边的(原属于北区和南区的部分区域)业务量增长比较迅速,导致分片3和4有点扛不住了,需要通过增加一个分片的方式把东区(江浙沪)以外给划分出去,这里就会涉及部分分片数据变更的问题:
在这里插入图片描述
之前也讲过,这样的操作对集群压力还是挺大的,这里需要将原来在分片3和4上的部分数据查出来并传输到分片6上(按照很多厂商的说法这个是业务无感的),如果业务仍然在运行还需要考虑迁移过程中的数据一致性;迁移完成校验数据后还需要在分片3和4上删除移走的数据。这一系列操作会对服务器性能以及网络的极大占用,是大概率影响数据库性能的,还有就是集群元数据更新的压力;另一方面如果分片是使用的副本,那么操作成本更大。
这里薛老师也补充了一下,如果某些业务按照hash分片是一次性从10个分片扩展至20个分片,那么还是停机吧,数据重新平衡的过程数据库是几乎不可用的。

3.3 业务扩展

根据精细化、网格化要求需要添加街道表:
在这里插入图片描述
同时还要在地址表添加相关内容:
在这里插入图片描述
以上两个操作在集中式数据库中仅需增加一个表、变更一个表(操作也不小就是了)。而在6个分片上总共相当于要增加6个表并变更6个表,同时至少增加6个新增表的元数据维护,并增加集群间复制表的同步压力。
这只是一个简单的需求增加,如果涉及复杂的需求变更在分布式数据库上要考虑的更多的东西,做更多的操作(原谅我想不出来复杂的变更,欢迎大佬添加)。

总结

我不是一个开发,也不是架构师,加上上面的一个例子也没有完全覆盖对应的业务场景,所以大家看看就好。
我觉得上分布式还是很难的,而且根据当前的硬件发展水平来看也是没有必要的,当然也提到过用不完硬件资源这个问题,就完全是很尴尬的为了分布式而分布式了。
老规矩,不知道写了些啥。

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

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

相关文章

Linux启动过程的问题解决

文章目录 Linux启动过程的问题解决忘记root密码的解决因文件系统错误而无法启动 Linux启动过程的问题解决 当我们在使用Linux时,可能会因为某些设置或突然断电等原因导致文件系统出现错误,从而导致Linux无法正常启动。但这并不意味着我们需要重新安装系…

ASEMI代理长电可控硅MAC97A8图片,MAC97A8大小

编辑-Z 长电可控硅MAC97A8参数: 型号:MAC97A8 VDRM/VRRM:600V IT(RMS):1A ITSM:8A 栅极电流(峰值):1A 栅极电压(峰值):5V 栅极功率&#…

翼辉+飞腾全国产实时操作系统与全国产主板工控方案在电力产品的应用

SylixOS(MS-RTOS)电力产品应用简介 一、电网传统装置: 继电保护、测控、稳控、PMU、时间同步、故障录波等装置(输变电) 一般使用AMP方案,少数客户使用SMP方案。2019年11月使用SylixOS的国内首台100%全国…

centos8 安装mysql8

1、下载mysql8软件库 wget https://repo.mysql.com//mysql80-community-release-el8-3.noarch.rpm 2、安装软件库 rpm -ivh mysql80-community-release-el8-3.noarch.rpm 3、安装mysql yum install mysql-server 4、启动mysql systemctl start mysqld systemctl enable…

【非集中申请期】国家自然科学基金最新申请指南情况汇总

2023年国自然集中申请期函评季临近尾声。当下,申请人除了在日常的科研工作中也要合理、及时的关注一些非集中申请期的项目动态,恰如2023年各类非集中期申请项目指南正在陆续发布中,这些仍然是非常好的申请机会。近期的项目指南名称与申请截止…

快速上手MATLAB:科研、工程、数据分析,MATLAB入门(下)教你基础知识!分享《MATLAB初学者教程 MATLAB编程-菜鸟入门(清晰版)》

快速上手MATLAB:科研、工程、数据分析,MATLAB入门(上)教你基础知识! 福利:文末有资料分享!!前言一、文件读取1. 工作空间数据读取2. 文本文件读取3. 常用的数据导入和导出函数4. 图像…

不吹不黑,安利5个网工必备工具包

大家好,我是老杨。 要说网工的好用工具,你心里肯定有不少选项。工具常用常新,与时俱进,但你的思维却不一定。 研究一个新工具,除了能提升你的工作效率,也能对你的认知有所开拓和提升。 所以,…

《程序员面试金典(第6版)》面试题 02.01. 移除重复节点(哈希映射,多指针暴力破解,链表)

题目描述 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。 题目传输门:面试题 02.01. 移除重复节点 示例1: 输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2: 输入:[1, 1, 1, 1, 2]输出:[1, 2]…

Hive---拉链表设计与实现

1 数据同步问题 Hive在实际工作中主要用于构建离线数据仓库,定期的从各种数据源中同步采集数据到Hive中,经过分层转换提供数据应用。比如每天需要从MySQL中同步最新的订单信息、用户信息、店铺信息等到数据仓库中,进行订单分析、用户分析。 …

【C++修炼之路】定位new(项目记录)

————————————每一个不曾起舞的日子都是对生命的辜负。 C之定位new 1. 什么是定位new2. 定位new的语法3. 具体实例 1. 什么是定位new 一般的new运算符负责在heap堆中找到一个足以能够满足要求的内存块。 而定位new(Placement new)是C中的一…

运行100万个并发任务,不同语言各需要多少内存

作者:DataStax 公司(美国的一家数据库系统开发商)Piotr Kołaczkowski 原文见: https://pkolaczk.github.io/memory-consumption-of-async/ 在这篇博客文章中,探讨了处理大量网络连接时候的Rust、Go、Java、C#、Pyth…

企企通“码上顺”清洗工具 | 让数据更有价值,让业务更出色

数据清理工作是企业数据管理、数据治理中的最基础的工作之一,不仅是一项苦活、累活,也是一个既考验业务又检验技术的活。 物料主数据作为企业核心的数据资产,在智慧供应链、业财一体化等数字化建设中发挥着重要作用。在当今高速发展的商业环…

《汇编语言》- 读书笔记 - 实验2 用机器指令和汇编指令编程

《汇编语言》- 读书笔记 - 实验2 用机器指令和汇编指令编程 1. 预备知识: Debug 的使用2 .实验任务 1. 预备知识: Debug 的使用 统一完善到:实验 1 查看 CPU 和内存,用机器指令和汇编指令编程。不在这拆开写了。 2 .实验任务 使用 Debug,将…

功率放大器在压电驱动器中的作用及应用

功率放大器在压电驱动器中的作用是将低功率信号放大为足够大的电力信号,以驱动压电陶瓷材料产生相应的机械振动。 压电陶瓷材料是一种特殊的陶瓷材料,能够将机械能转换为电能,因此被广泛应用于各种类型的振动器件和传感器中。这些器件通常需要…

Combiner

概述 Conbiner在MapReduce的Shuffle阶段起作用,它负责局部数据的聚合,我们可以看到,对于大数据量,如果没有Combiner,将会在磁盘上写入多个文件等待ReduceTask来拉取,但是如果有Combiner组件,我们…

5 个章节、25 条规范,全方位 Get 数据集选择与创建的「百科全书」

By 超神经 内容一览:如果你正在学习如何创建或选择一个合适的数据集,那么这篇文章会给你一些实用的建议,帮助你在选择和创建数据集时做出明智的决策。 关键词:机器学习 数据集 本文首发自 HyperAI 超神经微信公众平台~ 作者 |…

星标3.5k,一款国产的轻量级开源在线项目任务管理工具

今天给大家推荐一个轻量级的开源在线项目任务管理工具:DooTask 图片 DooTask 提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,文件管理等工具。 高效便捷的团队沟通工具 针对项目和任务建立群组,工作问题可…

SRP Batcher在真机上失效

1)SRP Batcher在真机上失效 ​2)Shader里面对同一张纹理多次采样会影响效率吗 3)为什么纹理开启了mipmap后,纹理内存反而下降了 4)TMP为什么有多次Delegate.Combine()的GC 这是第336篇UWA技术知识分享的推送&#xff0…

如何减少电脑内存占用?

内存(Memory)是计算机一个重要的组成部件,也称为内存储器或主存储器。它可以暂时存放CPU中运算的数据,以及与硬盘等外部存储器交换的数据,是CPU和硬盘之间的桥梁。若电脑内存占用过高,这会影响到电脑运行的速度,那该如…

网络安全行业推荐考取的证书有哪些?

下面就让知白小编来给解读一下这个问题~作为网络安全行业从业者或者相关专业的大学生,如果相应的职业证书在手,肯定是会身价倍增。 咳咳,但是如果你还是网络安全小白,知白小编不建议你直接去考认证,应该是先打好基础学…