分库分表实践:单 KEY 业务场景

前言

​ 随着业务的快速增长和数据量的爆炸性增加,传统的单体数据库架构已经难以满足性能和扩展性的需求。为了解决这一问题,分库分表技术应运而生,成为支撑大规模业务的重要手段。

分库分表方式
中间件
  • Cobar:阿里巴巴开发的分库分表中间件,支持自动分片和路由
  • TDDL(Tencent Database Linker):腾讯开发的分库分表中间件,支持多种分片策略
  • Atlas:由LinkedIn开发的分库分表中间件,支持自动分片和路由
  • Sharding-JDBC:阿里巴巴开发的Java库,用于实现数据库的分库分表功能
  • MyCat:一个基于MySQL的分库分表中间件,支持数据的横向扩展
  • ShardingSphere:阿里云开源的分布式数据库中间件解决方案,提供数据分片、分布式事务和数据库治理功能。
客户端

​ 业务层自己实现分库分表算法

两种方案优缺点

中间件

​ 优点:1.客户端无需关系复杂的分库分表、数据聚合等逻辑

​ 缺点:1.请求链路变长,多了代理这一层。2.问题排查更加复杂

客户端

​ 优点:1.效率更高,直接访问数据库无需经过中间层 2.排查问题更方便

​ 缺点:业务端需要关心复杂的分库分表、数据聚合等逻辑,导致业务层变的很复杂

表设计原则

主键选择:通常选择基于分布式ID生成算法实现的业务ID,不要使用自增主键ID,由于ID是自增的,分表的主键ID也是自增的,会导致分表难度加大。

分表策略:首先要明确数据库出现性能问题一般在数据量到达一定程度后!所以要求我们提前做好预估,不要等需要拆分时再拆,一般把表的数据量控制在千万级别;常用分表策略有两种:按key取模,读写均匀;按时间分,冷热数据明确

案例

​ 假如我们有一个用户信息表,字段包含 id user_id phone name age sex

场景

​ **用户侧:**根据 user_id 、phone 进行查询, ,user_id 和 phone 是一对一映射关系

​ **运营侧:**主要后台运营人员使用,查询需求对样,从各种维度查询,姓名、年龄、性别等

架构

​ **用户侧:**根据 user_id 分表,其它字段建立索引映射表

​ 运营侧:前后端分离或者异构数据(ES、Hbase 等)

流程

用户侧

  1. 根据 user_id 进行 hash 分表
  2. user_id =》 phone 建立索引映射表
  3. user_id 查询,根据 hash 算法查询分表
  4. Phone 查询,查询索引映射表获取 user_id
  5. 根据 user_id 进行 hash 算法查询分表

​ **优化:**如果觉得索引映射表多了一次查询对性能产生影响,也可以把映射关系存入 redis 或 pika 这种大容量、非易失性存储

运营侧

  1. 运营侧都是公司内部人员使用,可以创建一个新的读库只供内部人员使用

  2. 内部人员使用对性能要求不是特别高,可以考虑不进行分表,建立好相应索引

  3. 如果查询需求比较复杂可以使用异构数据库 ES

总结

​ 分库分表是应对大数据量和高并发场景的有效手段。选择合适的分库分表策略和中间件对于保证系统的可扩展性和高性能至关重要。在设计数据库时,应考虑主键的选择和分表策略,以实现数据的合理分布。同时,业务层和运营侧的需求也应得到充分的考虑,以确保系统的灵活性和可维护性。通过不断优化和实践,我们可以构建出既高效又稳定的数据库架构。

Reference
  1. https://juejin.cn/post/6844903491266166792
  2. https://juejin.cn/post/6897249714052268039?from=search-suggest
  3. https://tech.meituan.com/2016/11/18/dianping-order-db-sharding.html
相关推荐
云边有个稻草人1 分钟前
CANN异构架构:以ops-nn为翼,驱动AIGC底层计算新突破
架构·aigc
玄同7652 分钟前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
心疼你的一切2 分钟前
模态交响:CANN驱动的跨模态AIGC统一架构
数据仓库·深度学习·架构·aigc·cann
吾日三省吾码4 分钟前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean5 分钟前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer
那个村的李富贵25 分钟前
解锁CANN仓库核心能力:50行代码搭建国产化AIGC图片风格迁移神器
mysql·信息可视化·aigc·cann
小Tomkk25 分钟前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
晚霞的不甘27 分钟前
CANN × ROS 2:为智能机器人打造实时 AI 推理底座
人工智能·神经网络·架构·机器人·开源
jiet_h1 小时前
后端 Verticle 架构实战:用 NeonBeeDeployable 推送一条通知
架构
qq_12498707531 小时前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计