mysql表每天需要全量更新, 但不间断查询, 怎么搞?

场景

1) 千万甚至亿级别的表, 每天要更新全量的数据. 之所以全量更新, 是因为, 每天新的数据相对于旧数据有增, 有减, 有更新. 所以只能全量更新.
2) 同时, 需要保证能够提供不间断的查询.

这两条很是冲突.
若是对于只增不减的数据, 我可以每天一个partition放增量的数据, 然后用sqoop导出到mysql, 根据update-key对已有数据更新替换, 没有的新增. 虽然可能慢了点, 但是能保证不间断查询.
但是, 现在对于有增, 有减, 有更新的数据. 表示有点棘手.
目前想到是, mysql里准备A,B两张一样的表. web服务里面, 在新的一天, 比如8点开始, 定时检查, 若当前用的A表, 那么就去检查B表状态, 若成功更新了数据, web服务则切换到B表, 今天的所有查询就会走B表. 到第二天同样如此.

不知道, 还有没有更好的方案?

阅读 6.3k
4 个回答

主从或者双机热备。。。一个写,一个读刚刚好。。。

每天全量更新是怎样的操作呢?
是每天固定时间把数据清掉再导进去?
还是一天之内不断的DML操作呢?
如果是第二种,MySQL主从的读写分离你可以了解一下;
如果是第一种,需要把全量更新的详细操作说清楚才好做判断

如果是 MyISAM 表,很难做到更新数据的同时还能读数据,读写数据都会加表锁,即使做了主从也一样

然而,如果是 InnoDB 的表,完全不用担心,InnoDB 读取数据如果不显式加锁,采用的是一致性非锁定读,更新数据不影响读取操作

推荐问题
宣传栏