Dan*_*Lew 8 mysql database postgresql
我每周都会收到一份数据源,我将解析并放入数据库.数据每周都不会有太大变化,但我应该定期更新数据库.除了每周更新,数据是静态的.
目前重建整个数据库不是问题,但最终这个数据库将是实时的,人们可能在重建数据库时查询数据库.数据量不小(几百兆字节),因此它不会立即加载,而且我个人想要一个比"我希望没有人在数据库处于混乱状态时查询"的简单系统.
我想到了解决这个问题的几种不同方法,并想知道最好的方法是什么.到目前为止,这是我的想法:
而不是替换整个表,查询我当前数据库与我想要放在数据库中的区别.但这似乎可能是一项不必要的工作量.
创建虚拟数据表,然后执行表重命名(或使服务器代码指向新数据表).
只是告诉用户该网站正在进行维护并将系统脱机几分钟.(由于显而易见的原因,这不是优选的,但如果它是最好的答案,我愿意接受它.)
思考?
我不能说MySQL,但PostgreSQL有事务DDL.这是一个很棒的功能,这意味着您的第二个选项,即将新数据加载到虚拟表中,然后执行表重命名,应该很有效.如果您想更换表foo用foo_new,你只需要新的数据加载到foo_new并运行一个脚本来执行重命名.该脚本应该在自己的事务执行,因此,如果一些关于命名变坏,都foo和foo_new当它回滚将保持不变.
这种方法的主要问题是,从其他关键表中处理外键可能会有点麻烦foo.但至少可以保证您的数据保持一致.
我认为,从长远来看,更好的方法就是直接对数据进行更新(您的第一个选择).再次,您可以将所有更新保留在单个事务中,因此您可以保证全有或全无语义.更好的是在线更新,只是在新信息可用时直接更新数据.如果您需要其他人的批处理作业的结果,这可能不是您的选择,但如果您可以这样做,那么这是最佳选择.
| 归档时间: |
|
| 查看次数: |
3350 次 |
| 最近记录: |