【数据库】分库分表 & 数据库迁移

1. 分库分表

(1) 按范围拆分

比如将 ID1~1000W 的数据存放在第一个表或库中,或者将某个时间段的数据放在第一个表或库中。

问题:数据倾斜;未分担压力

(2) 哈希

将某个数据进行哈希后进行取模,然后映射到对应的库或表中,这个模就是库的个数或者表的个数,所以个数是固定的。

问题:需要扩容时会有数据迁移的问题,之前的数据全部都需要重新取模重新分配,不然就会查找不到了。

(3) 一致性哈希

将数据通过哈希映射到环上,将节点也通过哈希映射到换上。
插入或查找时,根据哈希值在这个环上顺时针找到第一个节点进行操作即可。
当节点数量改变时,只需要重新分配一小部分数据即可,从而降低数据迁移风险。

(4) 虚拟节点

当节点数量少时,会出现数据倾斜,导致计算出的哈希值总会落到一个节点上,节点负载不均衡。

解决方式:增加虚拟节点。

对每一个服务器节点计算多个哈希,每个计算结果位置都放置一个此服务节点。

增加左侧ABC三个虚拟节点:

2. 数据库迁移

(1) 原因

  • 性能和高可用性需求:随着业务的发展,原有的数据库可能在性能和高可用性方面无法满足新的需求
  • 产品服务需求:选择服务口碑更好的服务商
  • 价格因素
  • 其他技术需求:服务器或存储设备的更换、维护或升级,应用程序迁移,网站集成,灾难恢复和数据中心迁移等

(2) 迁移后的成本

  • 数据库规模
  • 对使用方的影响
  • 人力、物力成本
  • 数据损坏风险

(3) 迁移策略

- 双写机制
  • 先改造数据写入端,使数据同时写入旧数据库和新数据库
  • 对存量数据进行不停机的迁移
  • 等到双写服务运行一段时间,再次进行旧数据和新数据的完全同步
  • 完全切换读取的数据源为新数据库, 关闭旧数据库的写入和读取,下线旧数据库

适合业务要求高的事务型数据库。

- 渐进式双读
  • 所有新写入的数据都完全写到新数据库
  • 读取程序先读新数据库,新数据库中不存在的再读取老数据库, 如果老库存在就把老的库的数据迁移到新的数据库中
  • 等到老的数据库中数据量变为0, 或者到达一个非常低的阈值, 就进行老数据库的完全迁移和下线

适合读取内容相对简单的k-v数据库。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据库分库分表是一种常见的数据库架构设计,它将一个大型数据库拆分成多个小型数据库,每个小型数据库又可以进一步拆分成多个表。这种架构设计的优缺点如下: 优点: 1. 提高了系统的可扩展性:通过分库分表,可以让系统具有更好的水平扩展能力,可以根据需要增加更多的数据库或表,从而提高系统的性能和吞吐量。 2. 提高了系统的可靠性:通过分库分表,可以将数据分散存储在多个独立的数据库和表中,一旦其中一个数据库或表发生故障,可以快速切换到其他可用的数据库或表来保证系统的可靠性。 3. 降低了系统的负载:通过分库分表,可以将不同的数据存储在不同的数据库或表中,使得每个数据库或表的负载更加均衡,从而降低了系统的负载,提高了系统的性能和稳定性。 缺点: 1. 增加了系统的复杂性:通过分库分表,需要考虑许多因素,如数据迁移数据一致性、跨库查询等,这些都会增加系统的复杂性。 2. 需要更多的硬件资源:通过分库分表,需要更多的数据库服务器和存储设备来支持分布式存储,这会增加系统的成本和运维难度。 3. 不支持跨库事务:通过分库分表,每个数据库或表都是独立的,无法支持跨库事务,这会增加系统的开发难度和复杂性。 综上所述,数据库分库分表具有许多优点,但也存在一些缺点,需要根据具体的业务需求和技术条件来决定是否采用这种架构设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值