数据库如何处理大数据量的水平分库分表
首先根据这个问题,我们需要先解决分库分表的规则
规则如下
- 按频繁查询的字段取模分表
- 按某个连续范围的字段范围分表
对于按某个频繁查询字段取模分表的原因是我们需要尽可能的避免跨表查询
举例如下: 存在订单表,以订单ID为主键,用户ID等
若采用用户ID进行分表,当需要通过订单ID查询订单详细数据时,则无法判断该数据存在哪个表里,故应当优先选择频繁查询字段
对于按某个范围分表,我们可以采用连续的ID作为分表依据,像
表名 | 范围 |
---|---|
table_1 | 1-100000 |
table_2 | 100000-200000 |
完成对表的规则拆分后,我们就可以进行表迁移
表迁移存在两种方法:
- 停服迁移
- 双写
停服迁移可以完整的保证数据的一致性,但同时无法让用户使用服务,且需要完善的异常处理方式,如回滚之类的
双写:该模式下,写入数据是同时写入新旧表,并记录下最开始双写入的数据时间,读取数据还是读取老表,同时开启定时任务,检测新旧表双写后的数据是否一致,一段时间后,将老表双写开始之前的数据写入新表,需要注意新表的压力
数据库如何处理大数据量的水平分库分表
http://bdbaq.cn/index.php/archives/3/