分库分表的垂直分割与水平分割

article/2024/12/26 21:41:21

1、垂直分库

根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务分类进行独立划分。与“微服务治理”的做法相似,每个微服务使用单独的一个系统。如图:

                                                 

 2、垂直分表

基于数据表中的“列”进行划分。某个表字段较多,可以新建一张扩展表,将不经常用或者字段长度较大的字段拆分出去。

                                                        

3、水平分割

水平分割分为“库内分表”和“分库分表”,是根据表内数据内在的逻辑关系,将同一个表按照不同条件分散到多个数据库或多个表中,每个表中只包含一部分数据,从而使得单个表的数据量变小,达到分布式的效果。如图:

                                                

库内分表只是解决了单一表数据量过大的问题,但没有将表分表到不同机器的库上,因此对减轻MySQL数据库的压力来说,帮助不是很大,大家还是竞争同一个物理机的CPU、内存、网络IO,最好通过分库分表来解决。

4、水平分割方法

a、根据数值范围:按照时间区间或ID区间来切分。      

b、根据数值取模:一般采用hash取模mod的切分方式。

5、分库分表解决问题

解决了单库单表数据过大,高并发的性能瓶颈,提升系统的稳定性和负载能力。

6、注意事项

a、事务一致性问题

1)分布式事务:

一般可使用“XA协议”和“两阶段提价”处理。分布式事务能最大限度保证了数据库操作的原子性。但在提交事务时需要协调多个节点,推后了提交事务的时间点,延长了事务的执行时间。导致事务在访问共享资源时发生冲突或死锁的概率增高。随着数据库的节点增大,这种趋势会越来越严重,从而成为系统在数据库层面上水平扩展的枷锁。          

2)最终一致性:

对性能要求很高,但对一致性要求不要的系统,可采用事务补偿的方式。与事务在执行中发生错误后立即回滚的方式不同,事务补偿是一种事后检查补救的措施,一些常见的实现方法有:对数据进行对账检查,基于日志进行对比,定期同标准数据来源进行同步等等。

b、跨节点关联查询join问题

1)全局表:

系统中所有模块都可能依赖的一些表,每个数据库中都保存一份。这些数据通常很少进行修改,所以也不担心一致性问题。          

2)字段冗余:

一种典型的反范式设计,利用空间换时间。如订单表保存userID时,也将userName冗余保存一份。但应用场景也有限,比较适用于依赖字段较少的情况。冗余字段的数据一致性也较难保证,比如用户修改了userName后,是否需要在历史订单上同步更新。

3)数据组装:

在系统层面,分两次查询,最后将数据进行字段拼装。        

4)ER分片:

将存在关联关系的表记录存放在同一个分片上,就能较好的避免跨分片join问题。如图:

                                  

c、跨节点分页、排序、函数问题

1)先在不同的分片节点中将数据进行排序并返回,然后将不同分片返回的结果集进行汇总和再次排序,最终返回给用户。如图:

                                   

上图中只是取第一页的数据,对性能影响还不是很大。但是如果取得页数很大,情况则变得复杂很多,因为各分片节点中的数据可能是随机的,为了排序的准确性,需要将所有节点的前N页数据都排序好做合并,最后再进行整体的排序,这样的操作时很耗费CPU和内存资源的,所以页数越大,系统的性能也会越差。          

2)在使用Max、Min、Sum、Count之类的函数进行计算的时候,也需要先在每个分片上执行相应的函数,然后将各个分片的结果集进行汇总和再次计算,最终将结果返回。如图:

                                

 


http://chatgpt.dhexx.cn/article/uL64AIZ5.shtml

相关文章

一起聊聊 dB、dB、dBm、dBi 吧!

点击上方“小麦大叔”,选择“置顶/星标公众号” 福利干货,第一时间送达 dB应该是无线通信中最基本、最习以为常的一个概念了。我们常说“传播损耗是xx dB”、“发射功率是xx dBm”、“天线增益是xx dBi”……有时候,这些长得很像的dBx们可能被…

单位意义:dB、dBm与dBw、dBμ与dBV、dBi与dBd、dBFS

dB单位概念一直是以前比较模糊的地方,机缘下,就整体的把一些相关的dB单位的文献统一看了一些,下面就简单的解释一下这些基本单位的意义和基本换算。 dB 简单解释下dB产生的由来,dB是decibel的缩写,意即十分之一贝尔(bel)&#xf…

分贝dB、dBm、dBw

文章目录 【1. 物理意义】1.1 功率增益1.2 幅值增益 【2. 3dB】【3. dBm、dBw】 【1. 物理意义】 分贝(decibel,/dɛsɪ.bɛl/)是量度两个相同单位之数量比例的计量单位,常用dB表示。 1.1 功率增益 A ( P ) ( d B ) 10 l g ( P…

一分钟读懂dB、dBm、dBw的区别

dB应该是无线通信中最基本、最习以为常的一个概念了。我们常说“传播损耗是xx dB”、“发射功率是xx dBm”、“天线增益是xx dBi”…… 有时,这些长得很像的dBx们可能被弄混,甚至造成计算失误。它们究竟有什么区别呢? 这事不得不先从dB说起。…

EMC常见术语-dB、dBm、dBw以及如何计算

1. 手把手教:如何计算dB、dBm、dBw…… dB应该是无线通信中最基本、最习以为常的一个概念了。我们常说“传播损耗是xx dB”、“发射功率是xx dBm”、“天线增益是xx dBi”…… 有时,这些长得很像的dBx们可能被弄混,甚至造成计算失误。它们究…

dB dBm dBW 的关系与换算

前言 这些都叫“分贝数”,表示“相对”的思想。 “dB” 字段可看作 “相对于”: dBdBm (dBmW):相对于 1 mW 是多少dBW:相对于 1 W 是多少 文中采用方括号 [ ] 表示采用基本功率定义的分贝数 一、定义 1. dB 定义&#xff1a…

dBm和dB(纯计数单位)

分贝毫瓦(dBm) 分贝毫瓦(dBm,全写为“decibel relative to one milliwatt”)为一个指代功率的绝对值,而不同于dB只是一个相对值。 任意功率P(mW)与xdBm换算的公式如下: 以及 例如,1毫瓦(1 mW)换算成分贝毫…

DDL语言(添加、修改、删除)

数据库意义:数据存储,数据管理 DML语言:数据操作语言(insert、update、delete) 添加(insert) 语法: insert into 表名(字段1,字段2,字段3,...) values(值1),(值2),(值3),(...) 例&a…

使用数据库DDL语言创建数据库和基本表?(SQL Server 2014)

摘要:微信搜索【三桥君】 检索:《数据库系统原理》课程实验报告——实验一 建立数据库和基本表结构 说明:本实验是在SQL Server 2014版本数据库下操作完成的。 本实验通过举例创建一个数据库、一张有定义的表、以及添加数据到该表的实验过程&…

实验1 SQL的DDL语言和单表查询

第1关:创建供应商表S(SNO,SNAME,STATUS,CITY) 任务描述 创建供应商表S(SNO,SNAME,STATUS,CITY) 相关知识 供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市…

DML语言和DDL语言(数据库)

数据库DML,DDL语言:使用平台, DDL语言 1.create table 2.Create index 3.Alter table 4.Alter index 5.Drop index 1.展示数据库 2.使用某个数据库 3.展示表 4.查询表(首先你要确定,你这个数据库有表) 5.创建数…

mysql数据库-DDL语言

目录 1.DDL是什么? 2.有哪些常用的操作 1.查看数据库 2.创建数据库 2.删除数据库 3.添加查看表 4.删除表 5.修改表 (1)修改表类型 (2)增加表字段 (3)删除表字段 (4)修改字段名 &#x…

SQL语句之DDL语言

说明:DDL(Data Definition Language,数据定义语言),用来定义数据库对象(数据库、表),包括了数据库和表的创建、查询、使用和删除操作。 一、数据库操作 新安装的数据库,默认有以下四个数据库&…

DDL语言

其语句包括动词CREATE,ALTER和DROP。在数据库中创建新表或修改、删除表(CREATE TABLE 或 DROP TABLE);为表加入索引等。 mysql是一个关系型数据库,库里面包含若干个表,而每一张表都是由行和列组成。 打开Navicat 1.0…

数据库:DML语言和DDL语言

文章目录 一、DML语言(数据操作语言)1.插入语句(1)方式一(2)方式二(3)两种方式比较 2.修改语句(1)修改单表的记录(2)修改多表的记录(补充) 3.删除语句(1)方式一(2)方式二(3)方式一与方式二区别(⭐) 二、DDL语言1.库的管理2.表的管理(1)表的创建A.语法B.常…

ddl是什么意思网络语_DDL(数据定义语言)

DDL,是对数据库内部的对象进行创建,删除,修改等的操作语言。它和DML语言最大的区别是DML只是对表内部数据的操作,而不涉及到表的定义,结构的修改,更不会涉及到其它对象。 1.连接数据库: 注:1.mysql代表客户端命令,-u后面跟连接的数据库用户,-p表示需要输入密码。 2.命令…

数据库定义语言(DDL)详解

数据库定义预压(DDL 语言)是重要的语言之一。包含三个关键字:CREATE,DROP,ALTER。 数据库语言都遵循巴科斯范式,其语言规范如下所示:L利用CREATE关键字可以实现定义:定义数据库,定义表,定义索引,定义视图等…

枚举到底是个什么鬼类型?

前言 枚举是很多面向对象语言都会有的一种类型,它可以将表达同一类型的变量组合成一个集合,组成一个常量集 在Java中也有枚举类型,是用enum关键字来表示的 枚举常用来表示一个常量集,用来限定变量的取值,只能在枚举…

面试官:为啥需要枚举?枚举有什么作用?怎么用枚举实现单例?

点赞再看,养成习惯,微信搜索【三太子敖丙】关注这个互联网苟且偷生的工具人。 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点、资料以及我的系列文章。 Java基础:枚举的用法与原理 在学习过程中&…

了解什么是枚举(enumeration)

1、枚举是一组常量的集合。还可以看成包含有限特定的对象。 2、自定义枚举的步骤: 将构造器私有化private将get方法拿掉在类的内部直接创建固定的对象,比如:public static Season SPRING new Season("春天","温暖");使…