【发布时间】:2011-09-24 22:43:34
【问题描述】:
我使用的是 Ruby on Rails 3.0.7 和 MySQL 5。在我的应用程序中,我有两个数据库表,比如 TABLE1 和 TABLE2,出于性能原因,我对 TABLE2 中的一些数据进行了非规范化处理,以便在那个。现在,在 TABLE1 中,我需要更新其中一些涉及的值,当然,我还必须正确更新 TABLE2 中的非规范化值。
如何以高效的方式更新这些值?也就是说,如果 TABLE2 包含很多值(1.000.000 或更多),那么保持更新两个表(技术、实践等)的最佳方法是什么?
在更新数据库表期间会发生什么?例如,用户在访问一些涉及这些非规范化值的网站页面时可能会遇到一些问题?如果是这样,这些是什么,我该如何处理这种情况?
【问题讨论】:
-
你应该使用一个触发器(或者可能是两个触发器——一个在每个表上,如果你允许更新两个表)来保持它们同步——这样当一个表被改变时,改变传播到另一个表。
-
@Flimzy - 正如你所说,为了更新大表,需要做很多工作......性能如何?
-
嗯,这意味着您每次更新一个表时都会更新两个表——因此性能可能大约是一半(取决于许多因素)——但这就是您想要的,对吧?如果没有因保持数据一致而带来的性能损失,您就无法获得数据一致性。现在,如果您的数据不必实时一致,您可以每小时/每天/每周/任何时间从一个表到另一个表进行批量传播,这可能更有效,具体取决于您的情况。但根据您问题中的信息,我不能说这是否适合您。
-
@Flimzy - 你需要什么信息才能得到更“多产”的答案?
-
好吧,就像我说的,我不知道实时更新在您的应用程序中是否重要。
标签: mysql sql ruby-on-rails database denormalization