数据库分表分库的原则

数据库分表概念

数据库分表分库是一种常见的数据库水平扩展技术,用于解决单一数据库无法满足大规模数据存储和处理需求的问题。在进行数据库分表分库时,可以考虑以下原则:

  1. 数据划分原则:根据业务需求和数据特性,将数据划分为不同的表和库。常见的划分方式包括按照功能模块、时间范围、地理位置等进行划分。例如,可以将用户信息、订单信息等按照用户ID或时间进行分表,将不同地区的数据分库存储。
  2. 数据访问模式:考虑数据的访问模式和查询需求,将经常一起访问的数据放在同一个表或库中,以提高查询性能。例如,将经常需要联合查询的相关数据放在同一个表中,减少跨表查询的开销。
  3. 数据量均衡:在进行分库时,应该尽量保持各个库中的数据量均衡,避免某个库的数据过多而导致负载不均衡。可以采用哈希算法、取模算法等方式来实现数据的均衡分布。
  4. 数据一致性:在分表分库的情况下,需要考虑数据的一致性维护。例如,对于涉及多个表或库的事务操作,需要确保数据的一致性。可以使用分布式事务或者异步消息等机制来解决数据一致性问题。
  5. 扩展性和可维护性:在进行分表分库时,要考虑系统的扩展性和可维护性。例如,预留足够的扩展空间,方便后续根据业务需求进行水平扩展;同时,要注意分表分库对系统的维护和管理带来的复杂性,合理规划管理策略。
  6. 性能和成本权衡:在进行分表分库时,需要综合考虑性能和成本之间的权衡。分表分库可以提高系统的并发处理能力和查询性能,但也会增加系统的复杂性和管理成本。

数据库分表操作

只分表:

单表数据量大,读写出现瓶颈,这个表所在的库还可以支撑未来几年的增长。

只分库:

整个数据库读写出现性能瓶颈,例如数据库连接数被打满了(MySQL最大连接数默认150),或者并发量太大导致单个数据库已经无法满足日常的读写需求,就需要将整个库拆开。

分库分表:

单表数据量大,所在库也出现性能瓶颈,就要既分库又分表。

垂直拆分:

把字段分开。例如spu表的pic字段特别长,建议把这个pic字段拆到另一个表(同库b不同库。

水平拆分:

把记录分开。例如表数据量到达百万,我们拆成四张20万的表。

分库分表的场景和核心思想

一般情况下,单表数据量到达千万级别,就可以考虑分库分表了。

具体是否需要分库分表还是要看具体的业务场景,例如流水表、记录表,数据量非常容易到达千万级、亿万级,需要在设计数据库表的阶段就进行分表,还有一些表虽然数据量只有几百万,但字段非常多,而且有很多text、blog格式的字段,查询性能也会很慢,可以考虑分库分表

分表注意

1.尽量不分,优先优化sql

2.分表尽量少

3.事务不要跨多表

4.分表字段选择,要注意主键唯一,时间字段分配合理,去除关联冗余

5.分表后保证数据分配均匀,可以选择热点字段作为主键,不可变字段也可做主键

6.修改分表后的代码,尤其是跨表

7.数据迁移,写旧读新,用binlog同步

8.停旧库使用新库

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值