高效数据架构:分表流程实践

前言

​ 随着业务的不断扩展,数据量激增成为不可避免的现象。当数据量达到某一临界点时,单一的数据表可能无法承载如此庞大的数据量,此时就需要考虑进行分库分表的策略。尽管业界普遍认为数据量达到1000万时就应考虑分表,但实际上,根据笔者所在公司的经验,即便是10亿规模的数据表,在C端业务中依然能够稳定运行。因此,分表的决策应基于对数据规模(数据行、B+树的高度)、数据结构以及业务需求的综合评估。

分表流程

在这里插入图片描述

如图所示,假如我们原因只有一个数据表,现在分到两个数据表,流程如下:

  1. 根据一致性 Hash 或其它算法对数据进行分表
  2. 修改 BIZ 层代码对新表和老表同步进行写、删、更新操作
  3. 写一个脚本把老表的旧数据迁移到新表
  4. 等数据完全一致,切读业务到新表,写、删、更业务还是在两个表上操作
    1. 继续观察一段时间,读业务无误,停止双写
    2. 读业务有误,切回老表
注意点
数据迁移过程可能存在数据不一致
  1. 例如数据迁移脚本读取一条数据到内存中
  2. 此时业务正好修改了这条数据
  3. 数据迁移脚本把修改前的数据同步到新表
  4. 出现数据不一致

解决方案

​ 写一个数据校验脚本对比新老数据表的数据是否一致,不一致则以老表为准,把数据同步到新表

数据表的扩展性

​ 随着业务的发展,数据表可能需要进一步的扩展,设计时考虑数据表的扩展性,预留足够的空间和接口以支持未来的扩展

结尾语

​ 随着数据量的不断增长,分库分表已成为现代数据库架构中不可或缺的一部分。通过本文的深入探讨,我们不仅理解了分表的必要性,也掌握了分表流程的关键步骤和注意事项。在实施分表策略时,我们必须综合考虑业务需求、数据结构和系统性能,以确保分表操作的顺利进行和数据的一致性。

​ 数据迁移和分表是一个持续的过程,需要我们不断地监控、评估和优化。通过精心设计的数据分片策略和业务逻辑层代码,我们可以有效地提高系统的扩展性和稳定性。同时,通过实施数据校验和监控机制,我们可以及时发现并解决数据一致性问题,保障业务的连续性和数据的准确性。

​ 在未来,随着技术的不断进步和业务需求的不断变化,我们可能需要面对更加复杂的数据管理和优化挑战。但只要我们保持学习和创新的态度,不断探索和实践,就能够应对这些挑战,构建更加高效、稳定和可扩展的数据库系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/704048.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HALCON-从入门到入门-阈值分割定位算子综合运用

1.废话 之前我的一个师兄告诉我,针对图像上想要定位的内容,机器视觉中定位的方式有很多种,但是如果用阈值分割定位可以做的,就不要用模板匹配了。因为基于形状的模板匹配始终会存在匹配不到的风险,那如果打光效果可以…

【DevOps】Ubuntu基本使用教程

目录 引言 Ubuntu简介 安装Ubuntu 准备工作 创建启动盘 安装过程 桌面环境 基本操作 定制桌面 文件管理 文件操作 文件权限 软件管理 安装软件 更新软件 系统设置 用户账户 网络设置 电源管理 命令行操作 常用命令 管理权限 安全与维护 系统更新 备份…

C++ 12 之 指针引用

c12指针引用.cpp #include <iostream>using namespace std;struct students12 {int age; };int main() {students12 stu;students12* p &stu; // 结构体指针students12* &pp p; // 结构体指针起别名pp->age 20;// (*pp).age 22;cout << "…

编译原理期末复习

语义分析和中间代码生成 语义检查: 主要进行一致性检查和越界检查。 一致性检查: (1)表达式中操作数是否保持类型一致; (2)赋值语句的左右两边是否类型一致; (3)形、实参数类型是否一致; (4)数组元素与数组说明是否一致。…

基于PID的定速巡航控制系统设计【MATLAB/SIMULINK】

摘要&#xff1a; 本文详细介绍了定速巡航控制是一种车辆驾驶辅助系统&#xff0c;它能让驾驶者在高速或长途驾驶时&#xff0c;设定一个固定的车速&#xff0c;然后车辆会自动维持这个速度行驶&#xff0c;无需驾驶者持续踩油门。这大大减轻了驾驶者的疲劳&#xff0c;同时也…

【Ubuntu双系统】两块硬盘分别安装系统,一块硬盘安装Ubuntu 一块安装Windows

【Ubuntu双系统】两块硬盘分别安装双系统&#xff0c;一块硬盘安装Ubuntu 一块安装Windows 前言安装Ubuntu前置操作安装过程参考文献 前言 机器情况&#xff1a;两块1T的硬盘&#xff0c;其中一块已安装Windows 11现需在另一块硬盘上安装Ubuntu&#xff0c;该硬盘还未初始化Ub…

使用 PyInstaller 将 Python 代码打包成独立可执行文件

大家好&#xff0c;当你完成了一段精彩的 Python 代码&#xff0c;你可能会想要与其他人分享它。但是&#xff0c;你可能担心其他人是否拥有足够的环境来运行你的代码。或者&#xff0c;你可能希望保护你的源代码&#xff0c;以防止他人查看或修改它。在这种情况下&#xff0c;…

Perl 语言入门学习

一、介绍 Perl 是一种高级的、动态的、解释型的通用编程语言&#xff0c;由Larry Wall于1987年开发。它是一种非常灵活和强大的语言&#xff0c;广泛用于文本处理、系统管理、网络编程、图形编程等领域。 Perl 语言的设计理念是“用一种简单的语法&#xff0c;去解决复杂的编…

Linux时间子系统2: clock_gettime的VDSO机制分析

在之前分析clock_gettime的文章中接触到了VDSO&#xff0c;本篇文章是对VDSO的学习总结&#xff0c;借鉴了很多前人的经验。 1. 什么是VDSO vDSO:virtual DSO(Dynamic Shared Object)&#xff0c;虚拟动态共享库&#xff0c;内核向用户态提供了一个虚拟的动态共享库。在 Linux …

Django之文件上传(二)

一、自定义上传文件重命名 重名名好处: 重命名文件也可以避免文件名冲突的问题可以根据自己情况,针对性增加描述信息1.1、生成文件名方法 import os from uuid import uuid4 # 生成文件的名称 def generate_filename(filename):# filename: 上传文件的名称ext = os.path.spl…

【perl】基本语法 /备忘录/

分享 perl 语言学习资源 Perl 教程|极客教程 (geek-docs.com) Perl [zh] (runebook.dev) Perl 运算符 | 菜鸟教程 (runoob.com) Perl Documentation - Perldoc Browser Search the CPAN - metacpan.org 当然还有一些经典书籍&#xff0c;不再列举。 1、数字 1.1、数字表…

TCPListen客户端和TCPListen服务器

创建项目 TCPListen服务器 public Form1() {InitializeComponent();//TcpListener 搭建tcp服务器的类&#xff0c;基于socket套接字通信的//1创建服务器对象TcpListener server new TcpListener(IPAddress.Parse("192.168.107.83"), 3000);//2 开启服务器 设置最大…

Docker配置 之 本地仓库web访问

介绍 Docker是一种开源的应用容器引擎。 Docker可以让开发者打包应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何安装了Docker引擎的服务器上&#xff08;包括Linux机器、Windows机器&#xff09;&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#…

[Alogithm][动态规划][背包问题][组合总和IV][不同的二叉搜索树]详细讲解

目录 1.组合总和 Ⅳ1.题目链接2.算法原理详解3.代码实现 2.不同的二叉搜索树1.题目链接2.算法原理详解3.代码实现 1.组合总和 Ⅳ 1.题目链接 组合总和 Ⅳ 2.算法原理详解 本题是个排列题&#xff0c;而并非组合题&#xff0c;所以并非背包问题 思路&#xff1a; 确定状态表示…

【小白向】MAC端VSCode C++环境配置(超干货、超详细)

提示&#xff1a;使用环境为 MAC&#xff08;M2&#xff09; 其实 VSCode 很早就下载好了&#xff0c;但是因为在配置过程中总是遇到很多坑&#xff0c;搁置了很久&#xff0c;回头捡起遇到报 Error 还是两眼抓瞎&#xff0c;到处翻 blog。为了减少以后的遇坑可能性&#xff0c…

高能氧化锌电阻片加速老化试验曲线和老化机理%生产测试过程

氧化锌压敏电阻片加速老化的试验方法和得到的试验结果不尽相同。在老化机理的研究中一般可以用加速老化试验时功率损耗随时间的变化来衡量老化性能。分析我们的以及大量国外研究者的试验结果,可以将阀片功率损耗随时间变化的特性大致分为三种不司的类型: 类型1:阀片本身的性能…

SQL 截取函数

目录 1、substring 2、left 3、right 4、substring_index 1、substring 用途&#xff1a;字段截取从指定开始的字符开始&#xff0c;截取要的数&#xff1b;指定开始的字符数字可以用负的&#xff0c;指定开始的字符从后往前(向左)数&#xff0c;截取要的数不能为负。 语…

【吊打面试官系列-Mysql面试题】锁的优化策略有哪些?

大家好&#xff0c;我是锋哥。今天分享关于 【锁的优化策略有哪些?】面试题&#xff0c;希望对大家有帮助&#xff1b; 锁的优化策略有哪些? 1、读写分离 2、分段加锁 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 3、减少锁持有的时间 4.多个线程尽量以相同的…

ultralytics框架讲解

ultralytics简介 Ultralytics是一个开源的计算机视觉和深度学习框架&#xff0c;旨在简化训练、评估和部署视觉模型的过程。该框架提供了一系列流行的视觉模型&#xff0c;包括YOLOv5、YOLOv4、YOLOv3、YOLOv3-tiny、YOLOv5-tiny、EfficientDet、PAN、PP-YOLO等&#xff0c;并提…