当前位置: 首页 > news >正文

亿级流量系统架构设计与实战(五)

高并发写场景方案 1 : 数据分片之数据库分库分表

数据分片思想:可以将资源拆开分为多份,拆分的多份小的资源一起构成完整资源。

分库和分表

分库: 分库指的是将数据库拆分为多个小数据库,原来存储在单个数据库中的数据被分开存储到各个小数据库中。

分表:分表指的是将单个数据表拆分为多个结构完全一致的表,原来存储在单个数据表中的数据被分开存储到各个表中。

大部分互联网应用都绕不开数据库分库分表 , 因为随着业务的不断发展和用户活跃度的提高 , 数据库会面临诸多挑战。

  • 数据量大(分表解决)
    • 影响性能:当业务发展到一定阶段时 , 数据库中已存储了海量的存量数据 , 每个数据表中都存储了千万行甚至上亿行数据 , 业务方对数据表执行 SQL 语句时扫描的数据行增多 , 性能开销被严重放大 。
    • 磁盘 I/O 增加:以 MySQL 数据库为例 , 如果单个数据表中的数据量超过 2000 万行 , 则会导致表结构 B+ 树的层级增多 , 数据读 / 写的磁盘 I/O操作次数增加 。
    • DDL 语句执行缓慢: 在涉及数据表结构修改的场景下 , DDL 语句执行完成消耗的时间令人难以接受 。
  • 并发量大(分库解决)
    • 耗尽服务器资源: 海量用户访问单个数据库 , 很快会达到数据库处理能力的上限 , 无论是数据库的最大请求连接数 、 CPU 资源 、 内存资源还是网络带宽均有可能成为性能瓶颈。

分表的目的是提高一台服务器的单数据库处理能力 , 而分库的目的是充分利用多台服务器资源。

在拆分维度上 , 分库分表可以分为垂直拆分和水平拆分 , 其中垂直拆分侧重基于业务拆分 , 而水平拆分侧重基于数据拆分。

垂直拆分

垂直拆分有垂直分库,垂直分表。

垂直分库

按照业务分库,每一个业务对应一个数据库。其核心是 “ 专库专用

  • **解耦:**垂直分库可以实现不同业务归属的数据解耦 , 将不同业务数据交给各业务研发团队独立维护 , 有效保证了各团队的职责单一 。
  • 提高并发量:在高并发场景下,由于垂直分库使用不同的服务器维护不同业务的数据库 , 数据库并发量得到一定程度的提升

垂直分表

垂直分表指的是将一个数据表按照字段分成多个表 , 每个表存储其中一部分字段 。

分表的依据可以是字段被频繁访问的频率 、 字段值大小等。

  • 垂直分表可以很好地**隔离核心数据和非核心数据 **。

  • 数据库是以行为单位将数据加载到内存中的 , 通过垂直分表拆分以后核心数据表的字段大多访问频率较高 , 且字段值也都较小 。 因此可以将更多的数据加载到内存中 , 来提高查询的命中率 , 减少磁盘 I/O, 以此来提升数据库性能.

  • 垂直分表仅适合数据量不大字段较多的数据存储场景 。

  • 由于拆分后各表的数据行没有变化 , 因此垂直分表并没有消除单表数据量过大的问题.

水平拆分

水平拆分同样包括水平分库水平分表。

水平分库

水平分库是指将同一个数据库中的数据按照某种规则拆分到多个数据库中

这些数据库可以被部署在不同的服务器上 。 并且每个数据库拥有哪些表以及每个表的结构都与拆分

http://www.xdnf.cn/news/314893.html

相关文章:

  • mysql集成Qwen大模型MCP计算【附实战代码】
  • 【iOS】源码阅读(三)——内存对齐原理
  • AGV导航控制器技术方案——基于EFISH-SBC-RK3576/SAIL-RK3576的国产化革新‌(新一代工业级自主可控解决方案)‌
  • 战术级微波干扰系统:成都鼎轻量化装备如何实现全频段智能压制?
  • 从字节到链接:用类型化数组生成神奇的对象 URL
  • 如何进行室内VR全景拍摄?
  • Android 有线网开发调试总结
  • 【计算机视觉】OpenCV实战项目:Long-Exposure:基于深度学习的长时间曝光合成技术
  • C26-冒泡排序法
  • Flutter——数据库Drift开发详细教程(五)
  • 二叉平衡树
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.3.29)
  • Linux 驱动开发步骤及 SPI 设备驱动移植示例
  • 基于SpringBoot和PostGIS的应急运输事件影响分析-以1.31侧翻事故为例
  • Docker 容器镜像环境的依赖导出
  • Android 10.0 SharedPreferences in credential encrypted storage are not avai
  • 声波解码器:当40kHz遇见AIoT时代——超声波传感器的“隐形智慧”革命
  • 从明文裸奔到密钥长城:HTTPS加密全链路攻防与CA信任锚点构建
  • 【疑难杂症2025-003】Java-mvn项目在gitlab-ci构建镜像时遇到的问题和解决方案
  • 内网渗透技术全面指南——安全业务视角(基于《内网渗透技术 (吴丽进、苗春雨 主编;郑州、雷珊珊、王伦 副主编)》)
  • stm32常见错误
  • 矩阵扩展-算卷积算法介绍及C语言代码实现
  • Node.js vs 浏览器中的JavaScript:区别全解析
  • QT —— QWidget(2)
  • 【Science Advances】普林斯顿大学利用非相干光打造可重构纳米光子神经网络
  • 全文索引数据库Elasticsearch底层Lucene
  • SafeDrive:大语言模型实现自动驾驶汽车知识驱动和数据驱动的风险-敏感决策——论文阅读
  • 【Pandas】pandas DataFrame expanding
  • 常用设计模式在 Spring Boot 项目中的实战案例
  • 【LLM+Code】Devin PromptTools详细解读