这是一个创建于 1400 天前的主题,其中的信息可能已经有所发展或是发生改变。
比如说订单表, 拆分出 64 张表之后,用 id hash 后做分表键。order 表有 orderNo 索引,userId 索引,日期索引,商品 id 索引等,业务上显然是必须的。
这些二级索引怎么维护?
我能想到的最简单的就是 order 表插入之后,事务完成了就异步 /同步 Redis 里面维护对应的全量的二级索引。 本地缓存也可以维护一份部分的二级索引的缓存,来加速。不过这样做的话还是会有比较大的问题,比如说 Redis 挂了或者插入失败了。Redis 挂了丢了一秒的二级索引数据只有后期扫 order 表来补上, 本地缓存应该临时可以撑到 Redis 恢复。要再不行了就只有扫全部的库表了,数据库可能会挂了或者客户端连接池连接数耗尽。
理论上来说,最适合的还是 XA 分布式事务? 比如说阿里云的 X-PolarDB (以前的 DRDS)就是背后给你 XA 维护了各种二级索引。