一次难得的分库分表实践(下)

简介: 一次难得的分库分表实践

业务兼容


同时分表之后还需要兼容其他业务;比如原有的报表业务、分页查询等,现在来看看我们是如何处理的。


报表


首先是报表,没分表之前之间查询一张表就搞定了,现在不同,由一张表变为 N 张表。

所以原有的查询要改为遍历所有的分表,考虑到性能可以利用多线程并发查询分表数据然后汇总。


不过只依靠 Java 来对这么大量的数据做统计分析还是不现实,刚开始可以应付过去,后续还得用上大数据平台来处理。


查询


再一个是查询,原有的分页查询肯定是不能用了,毕竟对上亿的数据分页其实没什么意义。


只能提供通过分表字段的查询,比如是按照订单 ID 分表,那查询条件就得带上这个字段,不然就会涉及到遍历所有表。


这也是所有分表之后都会遇到的一个问题,除非不用 MySQL 这类关系型数据库。


分库


分表完成后可以解决单表的压力,但数据库本身的压力却没有下降。


我们在完成分表之后的一个月内又由于数据库里“其他表”的写入导致整个数据库 IO 增加,而且这些“其他表”还和业务关系不大。


也就是说一些可有可无的数据导致了整体业务受影响,这是非常不划算的事情。


于是我们便把这几张表单独移到一个新的数据库中,完全和现有的业务隔离开来。


这样就会涉及到几个改造:


  1. 应用自身对这些数据的查询、写入都要改为调用一个独立的 Dubbo 服务,由这个服务对迁移的表进行操作。


  1. 暂时不做数据迁移,所以查询时也得按照分表那样做一个兼容,如果查询老数据就要在当前库查询,新数据就要调用 Dubbo 接口进行查询。


  1. 对这些表的一些关联查询也得改造为查询 Dubbo 接口,在内存中进行拼接即可。


  1. 如果数据量确实很大,也可将同步的 Dubbo 接口换为写入消息队列来提高吞吐量。


目前我们将这类数据量巨大但对业务不太影响的表单独迁到一个库后,数据库的整体 IO 下降明显,业务也恢复正常。


总结


最后我们还需要做一步历史数据归档的操作,将 N 个月之前的数据要定期迁移到 HBASE 之类存储,保证 MySQL 中的数据一直保持在一个可接受的范围。


而归档数据的查询便依赖于大数据提供服务。


本次分库分表是一次非常难得的实践操作,网上大部分的资料都是在汽车出厂前就换好了轮胎。


而我们大部分碰到的场景都是要对高速路上跑着的车子换胎,一不小心就“车毁人亡”!



相关文章
|
Linux Perl
Centos8 yum源配置方法
本文介绍了Centos8 版本中yum的配置
10954 30
Centos8 yum源配置方法
|
6月前
|
人工智能 监控 安全
使用 Ollama + FastAPI 打造轻量级 AI 应用部署方案
本文介绍了一套基于 Ollama 和 FastAPI 的轻量级 AI 模型部署方案,解决云端部署成本高、本地部署复杂的问题。通过 200 行核心代码实现模型加载到 API 服务的全流程,适用于中小型应用。方案结合 Ollama 的本地化运行能力和 FastAPI 的高性能特性,支持模型量化、并发控制和资源监控,提供 Docker 容器化及 K8s 扩展配置,优化性能与安全性。开发者可在 2 小时内完成环境搭建与部署,满足日均百万级请求需求,为 AI 应用快速落地提供有效支持。
582 0
|
3月前
|
存储 Ubuntu 文件存储
Ubuntu 22.04 系统扩充存储空间指南
通过以上的方法,可以有效地在Ubuntu 22.04系统上扩充存储空间来满足用户的需求。常规的做法是添加新的硬盘驱动器,扩展现有分区或清理不必要的文件。考虑到数据安全,扩展分区时务必进行数据备份。对于一般用户而言,可能更倾向于使用图形化工具如GParted来处理分区相关问题,因为它提供直观的操作界面和较低的错误风险。若要使用LVM或命令行工具,需要有一定的专业知识以确保操作正确。在选择适合的方法时,应权衡成本、便利性和自己的技术能力。
322 12
|
12月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
2156 1
|
编解码 应用服务中间件 nginx
DemuxException: type = CodecUnsupported, info = Flv: Unsupported codec in video frame: 2
DemuxException: type = CodecUnsupported, info = Flv: Unsupported codec in video frame: 2
910 0
|
Linux
【Deepin 系统】Linux系统安装Halcon机器视觉工具
在Deepin Linux系统上安装Halcon机器视觉工具的详细步骤,包括下载安装包、安装、配置环境、复制license文件以及启动Halcon软件。
664 0
|
安全 网络安全
SSH——云服务器SSH经常断开如何处理
SSH——云服务器SSH经常断开如何处理
591 0
|
JavaScript
vue中关于element的el-image 图片预览功能增加一个下载按钮
vue中关于element的el-image 图片预览功能增加一个下载按钮
1469 0