gpt4 book ai didi

mysql - 在实时机器上更新(或替换)整个数据库表的最佳方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 06:35:54 27 4
gpt4 key购买 nike

我每周都会收到一个数据源,我将对其进行解析并将其放入数据库。数据每周不会有太大变化,但我应该定期更新数据库。除了这个每周更新之外,数据是静态的。

目前重建整个数据库不是问题,但最终这个数据库将会上线,人们可以在我重建它的同时查询数据库。数据量不小(几百兆字节),所以它不会瞬间加载,而且我个人更想要一个万无一失的系统,而不是“我希望数据库处于困惑状态时没有人查询。”

我想过几种不同的方法来解决这个问题,并且想知道最好的方法是什么。到目前为止,这是我的想法:

  1. 不是替换整个表,而是查询我当前的数据库与我想放入数据库中的内容之间的差异。不过,这似乎是一项不必要的工作。

  2. 创建虚拟数据表,然后重命名表(或让服务器代码指向新数据表)。

  3. 只是告诉用户网站正在进行维护,并让系统离线几分钟。 (由于明显的原因,这不是可取的,但如果这是最好的答案,我愿意接受。)

想法?

最佳答案

我不能代表 MySQL,但 PostgreSQL 有事务性 DDL。这是一个很棒的功能,意味着您的第二个选项,将新数据加载到虚拟表中,然后执行表重命名,应该会很好。如果要将表 foo 替换为 foo_new,只需将新数据加载到 foo_new 并运行脚本来重命名.此脚本应在其自己的事务中执行,因此如果重命名出现问题,foofoo_new 将在回滚时保持不变。

该方法的主要问题是处理来自以 foo 为键的其他表的外键时可能会变得有点困惑。但至少您可以保证您的数据将保持一致。

我认为,从长远来看,更好的方法是直接对数据执行更新(您的第一个选项)。再一次,您可以将所有更新都放在一个事务中,因此可以保证全有或全无语义。更好的方法是在线更新,当有新信息可用时直接更新数据。如果您需要其他人的批处理作业的结果,这可能不适合您,但如果您能做到,这是最佳选择。

关于mysql - 在实时机器上更新(或替换)整个数据库表的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/902458/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com