我正在使用Ruby on Rails 3.0.7和MySQL 5.在我的应用程序中,我有两个数据库表,比如TABLE1和TABLE2,出于性能原因,我在TABLE2中对一些数据进行了非规范化处理,以便我重复使用TABLE1的值那个。现在,在TABLE1中,我需要更新其中一些涉及的值,当然,我还必须正确更新TABLE2中的非规范化值。
如何以高效的方式更新这些值?也就是说,如果TABLE2包含很多值(1.000.000或更多),那么保持更新两个表(技术,实践,......)的最佳方法是什么?
更新数据库表所需的时间会发生什么?例如,用户在加入一些涉及非规范化值的网站页面时会遇到一些问题?如果是这样,那些是什么以及如何处理这种情况呢?
答案 0 :(得分:1)
或者您可以维护规范化的数据集并拥有两个非变形表。 并定期同步它们。 其他方式有一个规范化的表结构来维护数据(插入/更新/删除)并写一个物化视图来进行报告,这是你通过非标准化视图实现的。您可以根据需要为物化视图设置数据更新参数。
答案 1 :(得分:1)
有几种方法可以解决这种情况:
"after_update :sync_denormalized_data"
。此回调将包装在数据库级事务中(假设您的数据库支持事务)。您将拥有Rails级别代码,一致的数据,并且不需要进行后台处理,但每次都要进行两次写入。这些类型的问题是非常应用程序特定的。即使在同一个应用程序中,您也可以使用多种方法,具体取决于所涉及的灵活性和性能要求。