后端学习笔记 day111

1.分库分表的扩容

关于扩容具体扩充的大小,一般是扩充 2 的倍数,比如 8 库 8 表扩成 16 库 8 表,或者 8 库 16 表,也可以去 4 倍扩充 16 库 16 表。

具体考虑需要扩容的场景,普通的问题一般比如读操作多写少可以使用主从读写分离解决,如果是写入区分度大可以使用分区表的形式,不过如果是因为写操作频繁,那这两种都不能解决问题,最终还是得对分库分表的系统进行扩容。

分库分表在扩容的时候最少要考虑到,预估未来数据量的增长比如 3 年不需要二次扩容,如果是持续使用的可以提前考虑 5 到 10 年的增长情况去扩容。

2.关于分库分表的跨库分页查询

这种查询是形如 limit numsoffset start 这种格式的查询,解决方法有

直接在每个库取 num+start 条记录,再进行排序取 num 后 start 个

使用局部分页查询 把 offset 和 start 均分到每个库上

禁止跨库的分页查询,通过索引,记录之前访问的最大的值或者最小值去查找 在单库这个也可以用

使用二次查询,这个是要二次确认到底哪些是前面的 num

3.分库分表非分库分表键的查询怎么解决

所谓的非分库分表键查询,是指,我们在进行分库分表时,是通过分库分表键决定数据行落在哪个数据库,比如用户 id 哈希计算取余,同一个用户 id 的就会落在一个库,这时候如果通过卖家 id 去查找没有直接确定的方式,数据也不会在一个库里。

解决方法有

使用中间表记录映射关系

使用二次分库分表去解决,针对另一种高频查询比如卖家 id 也去复制一份数据做分库分表 不过这样会造成数据上的冗余,这种方法可以看成是中间表的一个提升,在二次分库分表如果有用不到的列可以减少二次的数据完整性 也可以通过去查原始表类似回表操作解决。

4.分库分表场景下主键的唯一性

一种是通过一个中心的数据库解决 专门存储最新的 id 去申请

另外就是使用雪花算法 雪花算法会把 id 分成时间戳,机器号,以及具体的 id 字段,雪花算法的一个问题是对于同一个机器同一个时间戳能申请的 id 数量受限于 id 字段的长度,针对这个问题可以去调整不同字段长度。

总结 分库分表主要就是解决主键唯一性,扩容以及数据迁移,分库分表下的跨库查询这些问题,分布式系统下要解决的问题比在单机系统下往往都复杂的多,比如分布式系统要解决一致性,这里主键 id 唯一也是一种数据的一致性。

相关推荐
叼烟扛炮37 分钟前
[LangChain] 学习笔记(08):工具调用底层闭环与第三方搜索(Tavily)实战
人工智能·笔记·学习·langchain
Century_Dragon1 小时前
让新能源故障诊断实训“触手可及“——仿真教学软件(VR)介绍
学习
江屿风2 小时前
【Git-组件】【Git入门:从文档灾难到版本掌控】流食般投喂
运维·笔记·git·组件·版本控制
楚山之石2 小时前
【Radiology】影像组学的标准化与可重复性:IBSI 卷积滤波器共识及其未能覆盖的环节
人工智能·学习·机器学习·mri
小李不想当小白3 小时前
HAL库之UART(STM32 HAL库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
旖旎夜光4 小时前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习
旖旎夜光5 小时前
【C++ 基础入门】C++多态(下):单/多继承虚表、多态补充与 21 道高频题
开发语言·c++·笔记·学习
叼烟扛炮10 小时前
[LangChain] 学习笔记(07):大模型长出手脚——工具(Tools)定义与调用闭环
笔记·学习·langchain
叼烟扛炮15 小时前
[LangChain] 学习笔记(06):突破大模型限制——结构化输出(Structured Output)
windows·笔记·学习·langchain