mysql表每天需要全量更新, 但不间断查询, 怎么搞?
场景
1) 千万甚至亿级别的表, 每天要更新全量的数据. 之所以全量更新, 是因为, 每天新的数据相对于旧数据有增, 有减, 有更新. 所以只能全量更新.
2) 同时, 需要保证能够提供不间断的查询.
这两条很是冲突.
若是对于只增不减的数据, 我可以每天一个partition放增量的数据, 然后用sqoop导出到mysql, 根据update-key
对已有数据更新替换, 没有的新增. 虽然可能慢了点, 但是能保证不间断查询.
但是, 现在对于有增, 有减, 有更新的数据. 表示有点棘手.
目前想到是, mysql里准备A,B两张一样的表. web服务里面, 在新的一天, 比如8点开始, 定时检查, 若当前用的A表, 那么就去检查B表状态, 若成功更新了数据, web服务则切换到B表, 今天的所有查询就会走B表. 到第二天同样如此.
不知道, 还有没有更好的方案?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果是 MyISAM 表,很难做到更新数据的同时还能读数据,读写数据都会加表锁,即使做了主从也一样
然而,如果是 InnoDB 的表,完全不用担心,InnoDB 读取数据如果不显式加锁,采用的是一致性非锁定读,更新数据不影响读取操作
每天全量更新是怎样的操作呢?
是每天固定时间把数据清掉再导进去?
还是一天之内不断的DML操作呢?
如果是第二种,MySQL主从的读写分离你可以了解一下;
如果是第一种,需要把全量更新的详细操作说清楚才好做判断
主从或者双机热备。。。一个写,一个读刚刚好。。。
主备结构应该可以更好的满足你的需求吧。可以参考官方文档:https://dev.mysql.com/doc/ref...