背景
随着公司业务增长,关系型数据库表慢慢会增长到很大的量,如果不能清理数据的话就需要面对大表CRUD,这是公司成长过程的共同考验
解决方案
根据我的个人经验,目前主要有3种比较主流的方法
- 分表。分库不常见,比较多的是分表。分表又分为2种:
- 垂直分表:将表的字段拆分到新表,常用字段留下,少用字段做关联查询。属于冷热分离
- 水平分表:将表复制多份,结构一致,表名用某种规则分开。这种比较复杂,需要中间件或server端来处理
- 冷热分表:将比较新的常用的数据留下,将历史数据归档到历史表。如果查不到数据,再去历史表retrieve
- 使用NoSQL替代,特别是支持集群和sharding的如mongodb,cassandra等。它们原生地支持分布式查询
- 比较新潮,使用阿里oceanbase,相当于MySQL on NoSQL,支持分布式存储和查询的MySQL
可以购买相关技术书籍,或者关注这方面专家如阿里巴巴沈询等人的微博等,更深入了解分布式存储思想
分表中间件
网上五花八门的介绍文章很多,可以自行搜索。个人认为,评价一个分布式中间件的标准应该是:
- 对server端无侵入,不需要改写sql,无需判断routing。将所有表都当成单表来操作
- 对数据分析无侵入,无论是产品方还是分析师,都可以用某种工具,将所有表当成单表来操作
- 充分支持sql标准,如分布式的group by,sort by等,没有或很少限制
当然,对程序无影响的代价就是对运维有压力,但这也是标准的一部分:
- 配置简单,能够集中配置
- 容忍部分节点宕机,部分查询失效不至于全不可用
个人推荐
需要我推荐吗?我的答案是,无法推荐。因为我没有这方面的实际经验。
不负责任地瞎yy的话,大概是楼方鑫的oneProxy,或者美团的MTDDL吧
时间: 2024-10-12 05:17:42