news 2026/10/7 16:54:16

面试题:如何实现丝滑般的数据库扩容

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面试题:如何实现丝滑般的数据库扩容

引言

初版

如果我们的线上服务不重要,一般来个单体的数据库DB来存储数据即可来。

单体应用


优点:简单,省事,方便。
缺点:数据并发性,稳定性都有问题。

进阶

随着数据量的不断增大,一般我们要对数据进行水平切分,水平切分的规则你可以简单根据用户id或者用户IP对数据进行取模,实现路由功能。当然也可以增加Slave跟KeepAlived来实现高可用。

主从+路由


但问题是,如果随着业务发展,目前我们2个库的性能扛不住了,还要继续水平拆分,造出更多库咋办?你一般是如何实现丝滑扩容的呢?

扩容

第一版:停机扩容

停机扩容


简单直接暴力的方法。

  1. APP通知用户在某个时间段停机维护升级。

  2. 新建若干个具有高可用的库。

  3. 停止当前服务,然后写个数据迁移程序,实现把老库数据全部迁移到新库中。

  4. 修改代码路由规则后重新对外提供服务。

优点:简单
缺点:中间停服务了,无法保证高可用。数据切换前跟切换过程中需确保无任何出错。

第二版:在线双写

在线双写

  1. 建立好新到数据库,然后接下来用户在写原有数据库到同时也写一份数据到我们的新库中。

  2. 写个数据迁移程序,实现旧库中的历史数据迁移到新库中。

  3. 迁移过程中,每次插入数据时,需检测数据的更新情况。比如,如果新的表中没有当前的数据,则直接新增;如果新表有数据并没有我们要迁移的数据新的话,我们就更新为当前数据,只能允许新的数据覆盖旧的数据,推荐使用Canal这样到中间件。

  4. 经过一段时间后需要校验新库跟旧库两边数据是否一样。如果检查到一样了,则直接切换即可。

优点:高可用了。
缺点:不够丝滑,来回挪动数据较大。

第三版:丝滑般扩容

目标:打算将原来到两个数据库扩容到4个。

第一步:修改配置

修改配置

  1. 修改配置信息,注意旧库跟新库之间到映射关系。确保扩容后数据可以正确路由到服务器。

  • Id % 2 = 0 的库变为了 id % 4 = 0 或 id % 4 = 2

  • Id % 2 = 1 的库变为了 id % 4 = 1 或 id % 4 = 3

第二步:reload配置

服务层reload配置,可以重启服务,也可以CLoud那样配置中心发送信号来实现重读配置文件。

至此,数据库的2 --> 4 扩容完成,原来是2个数据库实例提供服务,现在变为4个数据库实例提供服务。

第三步:收缩数据

丝滑扩容


此时 id % 4 = 0 跟 id % 4 = 2 的两个DB 还在同步数据。id % 4 = 1 跟 id % 4 = 3的两个DB还在同步数据。需做一些收尾操作。

  1. 接触上面的两个同步操作。

  2. 对新库新建高可用。

  3. 删除冗余数据,比如id % 4 = 0的机器中删除id % 4 = 2的冗余数据,只为id % 4 = 0的数据提供服务,其余三个类似操作。

  4. 至此实现成倍扩容,还避免来数据迁移。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 13:32:48

我用kafka两年踩过的一些非比寻常的坑

前言我的上家公司是做餐饮系统的,每天中午和晚上用餐高峰期,系统的并发量不容小觑。为了保险起见,公司规定各部门都要在吃饭的时间轮流值班,防止出现线上问题时能够及时处理。我当时在后厨显示系统团队,该系统属于订单…

作者头像 李华
网站建设 2026/10/7 5:39:03

PHP+UniApp组合开发的智能场馆预订系统源码,支持小程序等多平台部署

温馨提示:文末有资源获取方式 在全民健身和体育产业快速发展的时代,场馆运营者面临管理效率低下、用户体验不佳等挑战。传统人工预订模式已无法满足现代需求,数字化预订系统成为转型关键。为此,我们推出一款基于ThinkPHPUniApp开发…

作者头像 李华
网站建设 2026/10/7 10:31:29

基于STM32单片机的WIFI烟雾 PM2.5粉尘检测系统 物联火灾报警套件

目录系统概述核心功能硬件组成软件设计应用场景技术参数源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!系统概述 STM32单片机的WIFI烟雾PM2.5粉尘检测系统是一款集成环境监测与火灾预警功能的物联网套件。通过传感器实时采集烟雾浓度、…

作者头像 李华
网站建设 2026/10/5 18:26:30

最全的光模块介绍

光模块(Optical Modules)作为光纤通信中的重要组成部分,是实现光信号传输过程中光电转换和电光转换功能的光电子器件。 光模块工作在OSI模型的物理层,是光纤通信系统中的核心器件之一。它主要由光电子器件(光发射器、光…

作者头像 李华
网站建设 2026/10/5 3:26:23

双模态无人机太阳能光伏红外可见光一一对应缺陷检测数据集,共650张 无人机可见光红外缺陷检测数据集 红外 + 可见光配对无人机红外可见光光伏缺陷检测数据集

11111类别: dmjrb ns dyrb ejgdl zw yyzd ygfs ycdw dmjrb_ycdw dyrb_ycdw✅ 一、数据集基本信息表项目内容数据集名称无人机光伏太阳能板缺陷检测数据集(红外 可见光配对)总图像数量650 张(红外与可见光图像严格一一对应&#x…

作者头像 李华
网站建设 2026/10/5 3:26:36

无人机消防通道占用检测数据集 无人机商业摊位占用、机动车占用、杂物堆放占用、消防通道、非机动车占用 消防通道占用行为及消防通道本身

无人机消防通道占用数据集总结表总结维度具体内容类别共5个,分别为:商业摊位占用、机动车占用、杂物堆放占用、消防通道、非机动车占用数量包含579张图像格式围绕“目标检测”任务构建,用于训练模型识别消防通道占用行为及消防通道本身应用领…

作者头像 李华