gpt4 book ai didi

mysql - 更新非规范化数据库表

转载 作者:行者123 更新时间:2023-11-29 09:07:50 24 4
gpt4 key购买 nike

我正在使用 Ruby on Rails 3.0.7 和 MySQL 5。在我的应用程序中,我有两个数据库表,即 TABLE1 和 TABLE2,出于性能原因,我对 TABLE2 中的一些数据进行了非规范化,以便在 TABLE2 中重复 TABLE1 的值。那个。现在,在表 1 中,我需要更新其中一些涉及的值,当然,我还必须正确更新表 2 中的非规范化值。

我可以采取哪些措施以高效的方式更新这些值?也就是说,如果 TABLE2 包含很多值(1.000.000 或更多),那么保持更新两个表(技术、实践等)的最佳方法是什么?

更新数据库表期间会发生什么?例如,用户在访问某些涉及这些非规范化值的网站页面时可能会遇到一些问题?如果是这样,那是什么以及我该如何处理这种情况?

最佳答案

有几种方法可以处理这种情况:

  1. 您可以使用数据库触发器。这不是一个与数据库无关的选项,据我所知,它的 RoR 支持是不存在的。如果您的情况要求绝对没有数据不一致,这可能是实现您的目标的最有效的方法,但我不是数据库专家。
  2. 您可以使用批处理操作定期同步两个表。此方法允许两个表分开,然后每隔一段时间重新同步数据。如果您的情况允许发生这种漂移,那么这可能是一个不错的选择,因为它允许在非工作时间更新数据库。如果您需要每 5 分钟进行一次同步,您可能需要考虑其他选项。这可以通过您的 ruby​​ 代码来处理,但需要某种后台作业运行程序(cron、delayed_job、redis 等)
  3. 您可以在 Rails 模型内部使用回调。您可以使用“after_update:sync_denormalized_data”。此回调将包装在数据库级事务中(假设您的数据库支持事务)。您将拥有 Rails 级别的代码、一致的数据,并且无需以每次写入两次为代价的后台进程。
  4. 一些我没有想到的机制......

这些类型的问题非常特定于应用程序。即使在同一应用程序中,您也可以使用多种方法,具体取决于所涉及的灵 active 和性能要求。

关于mysql - 更新非规范化数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6517609/

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