分库分表实践:单 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
相关推荐
秋意钟21 分钟前
MySQL日期类型选择建议
数据库·mysql
Dxy12393102161 小时前
python下载pdf
数据库·python·pdf
ac-er88881 小时前
MySQL如何实现PHP输入安全
mysql·安全·php
deephub2 小时前
Tokenformer:基于参数标记化的高效可扩展Transformer架构
人工智能·python·深度学习·架构·transformer
桀桀桀桀桀桀2 小时前
数据库中的用户管理和权限管理
数据库·mysql
架构师那点事儿3 小时前
golang 用unsafe 无所畏惧,但使用不得到会panic
架构·go·掘金技术征文
superman超哥3 小时前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
用户8007165452003 小时前
HTAP数据库国产化改造技术可行性方案分析
数据库
engchina4 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
engchina4 小时前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j