求教个 Mysql 数据库分库分表的问题

275 天前
 Laysan

有个表 biz_order 是单表的,目前已经 600W+数据,每日还在 30w 增长量

考虑把 biz_order 表分库分表,分成 10 库 100 表,根据 order_id hash 计算分表位

现在的问题是创建好表了,旧数据如何快速迁移到新的分表里面

用存储过程能快速迁移么?还是要写代码慢慢查询再插入?

2304 次点击
所在节点    数据库
26 条回复
lovelylain
274 天前
按 uid hash 分库分表,将这个 hash 值塞到 order_id 里,这样既能通过 uid 从一个表找到用户的所有订单,又能通过 order_id 找到对应的表。至于已经存在的历史 order ,因为改 order_id 使其符合新规则可能有隐患,建议不迁移,这样一个用户最多查一次新表一次旧表就能找出所有订单,旧表没有新记录写入也不用担心性能下降,而且订单是有时效的,过段时间还能直接干掉旧表。
dw2693734d
274 天前
@gam2046 用 brin 索引试试呢
phx13ye
274 天前
新数据双写,历史数据迁移或归档
mmdsun
274 天前
没多少数据直接 sql 插入。还是需要不停机维护?

分表分库注定要被淘汰,建议选择云数据库、分布式数据库。
kanepan19
274 天前
@phx13ye
不停机归档,有没有方案?
phx13ye
273 天前
@kanepan19 没做过太高大上的,
1select 源库数据,插入归档库,两边校验,delete 源数据库历史数据, 对源表做一下 alter table tb_123 engine=innodb ,释放空间

最后两步可选

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/967364

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX