比如说订单表, 拆分出 64 张表之后,用 id hash 后做分表键。order 表有 orderNo 索引,userId 索引,日期索引,商品 id 索引等,业务上显然是必须的。
这些二级索引怎么维护?
我能想到的最简单的就是 order 表插入之后,事务完成了就异步 /同步 Redis 里面维护对应的全量的二级索引。 本地缓存也可以维护一份部分的二级索引的缓存,来加速。不过这样做的话还是会有比较大的问题,比如说 Redis 挂了或者插入失败了。Redis 挂了丢了一秒的二级索引数据只有后期扫 order 表来补上, 本地缓存应该临时可以撑到 Redis 恢复。要再不行了就只有扫全部的库表了,数据库可能会挂了或者客户端连接池连接数耗尽。
理论上来说,最适合的还是 XA 分布式事务? 比如说阿里云的 X-PolarDB (以前的 DRDS)就是背后给你 XA 维护了各种二级索引。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/747038
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.