数据库分库分表策略

Mysql学习总结(59)——数据库分库分表策略总结 一、为什么分库分表 我们知道每台机器无论配置多么好它都有自身的物理上限,所以当我们应用已经能触及或远远超出单台机器的某个上限的时候,我们惟有寻找别的机器的帮助或者继续升级的我们的硬件,但常见的方案还是通过添加更多的机器来共同承担压力。我们还得考虑当我们的业务逻辑不断增长,我们的机器能不能通过线性增长就能满足需求?因此,使用数据库的分库分表,能够立竿见影的提升系统的性能,关于为什么要使用数据库的分... 阅读详情

前言

随着数据规模的增大,单库的性能和成本不满意满足日常需求,需要进行分库分表。

确定分库分表基本信息

确定需要分库分表的表格有哪些

确定需要分库分表的表的分片键,一般可以是userId,city,之类的标识性的字段。

分库策略

全量基本信息+分库

会有一个全量的基本信息表,比如重要的字段:orderId,userId等,方便做列表维度的全量查询。

然后配合分库分表。

优点是可以查询全量数据,缺点是全量数据也会很大。

热库+分库

热库只存热数据,比如最近的订单。主要业务在热数据上,分库存的全量数据。

优点是冷热分离,缺点是需要双写或者数据同步,需要归档删除冷数据,不能查询全量数据。

只有分库

只有分库,切换到分库后删除主库。

优点是逻辑简单,存储成本也低。缺点是不能查询全量数据。

以只有分库为例,如何做分库分表

建立分库分表

确定分库分表的数量,确定分片键,比如订单16*16,16个库,每个库16个表。

同步数据

做一个数据同步的服务,将主库的历史数据同步到分库分表。

历史数据的同步

同步程序,将历史数据同步到分库分表。

写一个同步接口,每次查询2000条(可配置),定时任务调用,同步到分库分表,接口需要加分布式锁防止并发调用出问题。

根据updateTime和主键排序,同步完将updateTime和主键存到缓存中作为游标,下次查询要以updateTime和主键作为游标查询。

数据量不大可以单台机器同步即可,数据量大的情况下可以多台机器同步。

多台机器同步逻辑:单次查询2000条,发送mq,多机器消费同步数据,提高效率

实时增量数据同步

适用于热库+分库方式,一般情况下不推荐,因为成本和复杂度会提高很多。

如果代码单写需要实时同步,代码双写不需要实时同步。
canal+mq+服务同步实时增量数据,不过滤delete操作,当mq收到delete操作的时候,删除数据。注意顺序消费。

代码改造

我们项目选择用shardingsphere做的分库分表,可以参考基于shardingsphere实现分库分表_shardingsphere 逻辑分库-优快云博客

主键改成雪花id

双写,双读,灰度

双写:数据既写到主库,也写到分库,后续单读分库后灰度切换到单写分库

双读:数据在双写时写读主库,历史数据同步完后灰度读分库,最后单读分库。

最后单写分库,单读分库后就可以删除主库的访问。

注意的事项

分库分表策略选择

分片键确定

灰度计划设计,代码改造,灰度过程要快,避免其他业务开发后还要合并代码可能产生的问题

历史数据校验,避免数据同步遗漏或者不一致(写一个类似同步程序的检验程序,定时任务检验),一个是看数据存不存在,一个是看数据一不一致,数据一致性不好判断可以抽取几个关键字段判断,比如updateTime。

DB 分库分表(1):基本思想和切分策略 一、基本思想 Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。如果表并不多,但每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规则(比如按ID散列)切分到多个数据库(... 阅读详情

相关推荐

STM8库函数开发手册(3) //UART1、内部EEPROM、FLASH操作库、IIC(硬、软)

STM8S 微控制器家族的通用同步异步收发器(UART1,UART2 或者UART3)提供了一种灵活的方法与使用工业标准NRZ 异步串行数据格式的外部设备之间进行全双工数据交换。STM8 的UART 提供范围的波特率选择,并且支持多处理器通讯。UART 也支持LIN(局部互联网)协议版本1.3,2.0,和2.1 以及在主模式下的J2602。 UART1 和UAR...

finedayforu的博客 2522

数据库应该怎样分库分表?

数据库分库分表的具体做法

lp15929801907的博客 4645

【Agora 本地录制最全总结- 基于Java SDK】

Agora 本地服务端录制

lizhengze1117的博客 1790

海量数据下的分库分表方案

移动互联网时代,海量的用户每天产生海量的数据,比如: 用户表 订单表 交易流水表 我们以支付宝为例,支付宝用户是8亿;微信用户更是10亿。而订单表更夸张,比如美团外卖,每天都是几千万的订单。淘宝的历史订单总量应该百亿,甚至千亿级别,这些海量数据远不是一张表能Hold住的。 事实上,MySQL单表可以存储10亿级数据,只是这时候性能比较差。业界公认MySQL单表容量在1千万以下是最佳状态,因...

wqsbenren的博客 1800

PostgreSQL数据库全攻略:从入门到精通

本文是一份PostgreSQL数据库综合指南,涵盖安装配置、基础操作和高级管理。主要内容包括:1) PostgreSQL简介与各平台安装方法;2) 数据库基本操作,如创建数据库/表、CRUD操作、用户权限管理;3) 高级功能包括索引优化、事务控制、视图、存储过程、触发器和扩展模块;4) 数据库管理维护,涉及配置调优、备份恢复、性能监控和日常维护;5) 安全设置与高可用方案。指南提供了从入门到进阶的实用知识,强调结合官方文档进行深入学习,帮助用户高效使用这一功能强大的开源关系型数据库系统。

索大神的博客 1970

comsol-声学

COMSOL多物理场仿真软件以高效的计算性能和杰出的多场耦合分析能力实现了精确的数值仿真,已被广泛应用于各个领域的科学研究以及工程计算,为工程界和科学界解决了复杂的多物理场建模问题。COMSOL内嵌的声学模块可以方便地进行多孔声学和粘热声学的模拟仿真。软件数值计算得到的云图,可以将声压、速度、声强以及声能耗散等结果可视化,十分有利于学生对声学的学习和理解。将COMSOL仿真引入实验当中,通过软件的可视化处理有效直观的展示复杂物理场和集合模型仿真的流程,与实验数据结合,使得文章内容具有说服力、预见性和新颖性。

y2715163545的博客 2376

什么是分库分表?如何分库分表?(附大厂分库分表实例)

数据库调优之分库分表

m0_74315688的博客 7498

用废旧汽车电池DIY家用UPS:手把手教你低成本搭建Wi-Fi不断电系统

本文详细介绍了如何利用废旧汽车电池DIY低成本家用UPS系统,确保Wi-Fi设备在断电时持续供电。通过精选材料、电路搭建和安全防护,实现高效稳定的电源转换与智能切换,成本仅为市售UPS的三分之一。特别适合家庭办公和远程工作者提升网络供电可靠性。

weixin_29200485的博客 465

如何做到数据库分库分表?

一、中大型项目中,一旦遇到数据量比较大,小伙伴应该都知道就应该对数据进行拆分了。有垂直和水平两种。垂直拆分比较简单,也就是本来一个数据库,数据量大之后,从业务角度进行拆分多个库。如下图,独立的拆分出订单库和用户库。水平拆分的概念,是同一个业务数据量大之后,进行水平拆分。上图中订单数据达到了4000万,我们也知道mysql单表存储量推荐是百万级,如果不进行处理,mysql单表数据太大,会导致性能变慢。使用方案可以参考数据进行水平拆分。把4000万数据拆分4张表或者更多。当然也可以分库,再分表;把压力从数据库层

人生如梦,浮华一瞬间的专栏 8573

【DeepSeek应用实践】手把手教程:用 AnythingLLM + Ollama + DeepSeek-R1 搭建本地企业知识库

在众多的技术方案中,我们选择了 AnythingLLM、Ollama 和 DeepSeek-R1 这一组合来搭建本地知识库。Ollama 作为一个轻量级的本地化大语言模型部署工具,支持多种模型,易于安装和使用,能够快速在本地运行强大的语言模型。DeepSeek-R1 是一个专为知识库问答设计的检索增强生成(RAG)模型,它结合了检索和生成的优势,能够快速从知识库中检索相关信息并生成精准答案。而 AnythingLLM 则是一个用户友好的界面工具,可以方便地连接 Ollama 和 DeepSeek-R1

寻道AI,探索AI无限可能! 2569

使用 Python 爬虫抓取 IMDb 电影信息 - 评分、评论与基本信息抓取教程

本文介绍了如何使用 Python 爬虫技术抓取 IMDb 电影评分、评论和基本信息。我们分别展示了通过IMDb API和两种方法抓取数据,并进行了数据存储、分析与可视化。在未来,我们还可以基于这些数据开发电影推荐系统、情感分析工具等,进一步丰富电影数据的应用场景。通过这些实践,您不仅学会了如何抓取和存储数据,还可以通过这些基础来构建自己的数据分析应用,获取更丰富的电影数据。

2201_76125261的博客 601

开发设计实践:分库分表实现方案

概要 首先,我们来思考下面几个问题: 1、分库分表的常见方案有哪些? 2、基于什么维度来做分库分表? 3、分库分表之后带来了什么新的问题? 下面将基于上面的问题来进行分析: 分库分表方案 分库分表的目的是达到垂直或水平切分的目的,切分数据使其分布到不同的库或表上。最关键的点就是路由算法,把分片键(路由的key)按照指定的路由算法进行路由存放。 1、范围法 - range范围 范围法对分片键按照范围进行切分,将数据切分到不同的数据库或表上去。 优点: 1)切分策略简单,根据分片键,按照范围,能够快速定位到

白云 4642

PreScan快速入门到精通第十一讲之PreScan道路标记,建筑物、抽象物体及交通标识

道路标记目的:路标是为了完善智能驾驶实验场景。用途:道路标记是附加在道路段上的。标记的大小{小、大}、颜色,以及相对于路段的位置和方向可以在属性编辑器中设置。也可以指定褪色和孔洞,类似于路段自动添加标记的配置。在GUI中的位置:作为一个预定义的库元素格式:NAMBOX: 汇编表中不知道。PreScan包含三个不同国家的标记:荷兰、日本和美国。可以通过在国家首选项中切换国家来隐藏或显示。附件道路标线附在路段上,并相对于路段原点定位。默认情况下,道路标记被固定在路段上,用小锚点表示。11.2 建筑物目...

小明师兄的博客 1804

数据库分库分表策略的具体实现方案

相关文章: 1、 使用Spring AOP实现MySQL数据库读写分离案例分析 2、MySQL5.6 数据库主从(Master/Slave)同步安装与配置详解 3、MySQL主从复制的常见拓扑、原理分析以及如何提高主从复制的效率总结 4、使用mysqlreplicate命令快速搭建 Mysql 主从复制 5、大型网站应用之海量数据和高并发解决方案总结一二 一、MySQL扩展具体的实...

徐刘根的博客 9万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数据库分库分表策略和分库分表后数据的查询

在日常的工作中,关系型数据库本身比较容易成为系统的瓶颈点,虽然读写分离能分散数据库的读写压力,但并没有分散存储压力,当数据量达到千万甚至上亿时,单台数据库服务器的存储能力会成为系统的瓶颈,主要体现在以下几个方面: 数据量太大,读写的性能会下降,即使有索引,索引也会变得很大,性能同样会降下。 数据库文件会得很大,数据库备份和恢复需要耗时很长。 数据库文件越大,极端情况下丢失数据的风险越高。 ...

majunzhu的博客 3万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

DB 分库分表的基本思想和切分策略

DB 分库分表的基本思想和切分策略 一、基本思想 Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。如果表并不多,但每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规...

weixin_30651273的博客 160

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【日记】高并发下的DB分库分表分区策略

设计数据库的时候,顺便想了一下,作为一个购物应用,高并发的访问和大量数据存储对DB是个很大的压力。 于是查了一下分库分表分区的解决方案。 0.为什么要分库分表? 数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展, 库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大; 另外,一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。 1.分库: 把原本存储于一个库的数据分块存储到多

ttyt1217的专栏 611

数据库优化与分库分表策略:提升高并发应用的性能

在高并发、大数据量的场景下,数据库的性能优化是后端开发中不可忽视的重要课题。分库分表作为一种有效的扩展策略,能够通过水平和垂直划分数据,减轻单库的压力,提升查询效率。然而,分库分表的设计与实现需要结合具体的业务场景,合理选择分库、分表的规则,并在应用层和数据库层做好相应的支持。通过分库分表以及其他数据库优化技术的结合使用,开发者能够有效应对大规模用户请求和数据存储的挑战,构建高效、可扩展的后端系统。

桂月二二博客 1406

数据库面试必备:分库分表概念与策略详解

分库分表是数据库架构设计中常见的一种水平扩展(Scale-out)解决方案,主要用于解决单库单表数据量过大导致的性能瓶颈问题。当数据库中的数据量增长到一定程度(通常单表超过千万级别),查询性能会明显下降,此时就需要考虑分库分表技术。

qq_58299462的博客 616

Golang的数据库分库分表策略

通过数据库分库分表的策略,可以有效提高系统的性能和扩展性,同时减轻单一数据库的压力,提高数据安全性。在Golang中,可以利用ORM框架来简化数据库分库分表的实现。数据库分库分表的主要原理是将原本存储在单一数据库中的数据进行分片存储,分散到多个数据库实例或表中,以提高数据库的并发处理能力和存储容量。通过数据库分库分表,可以将数据分布到不同的数据库实例或表中,减轻单一数据库的压力,从而提高系统的并发处理能力和吞吐量。数据库分库分表可以避免单一数据库的性能瓶颈,减轻数据库的读写压力,提高系统的稳定性和可靠性。

qq_24428851的博客 719

6【策略--数据库分库分表策略】

我们知道每台机器无论配置多么好它都有自身的物理上限,所以当我们应用已经能触及或远远超出单台机器的某个上限的时候,我们惟有寻找别的机器的帮助或者继续升级的我们的硬件,但常见的方案还是通过添加更多的机器来共同承担压力。我们还得考虑当我们的业务逻辑不断增长,我们的机器能不能通过线性增长就能满足需求?因此,使用数据库的分库分表,能...

小屁孩大帅-保密的博客 64

mysql 分库分表策略_数据库分库分表策略的具体实现方案

一、MySQL扩展具体的实现方式随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。关于数据库的扩展主要包括:业务拆分、主从复制,数据库分库与分表。这篇文章主要讲述数据库分库与分表(1)业务拆分业务起步初始,为了加快应用上线和快速迭代,很多应用都采用集中式的架构。随着业务系统的扩大,系统变得越来越复杂,越来越难以维护,开发效率变得越来越低,并且对资源的...

weixin_35712223的博客 528
上一篇: 定时任务删除MongoDB历史数据
下一篇: python查询es超长日志,然后针对性的做日志压缩
bxp1321
博客等级 码龄17年 146粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值