有几种方法可以处理这种情况:
- 您可以使用数据库触发器。据我所知,这不是数据库不可知的选项,并且对RoR的支持不存在。如果您的情况绝对不需要数据不一致,这可能是实现目标的最高效的方法,但是我 不是 数据库专家。
- 您可以使用批处理操作定期同步两个表。此方法使您的两个表分开,然后每隔很长时间重新同步一次数据。如果您的情况允许这种漂移发生,那么这是一个不错的选择,因为它允许在非工作时间更新数据库。如果您需要每5分钟进行一次同步,则可能需要查看其他选项。这可以通过您的ruby代码来处理,但是需要某种后台作业执行程序(cron,delayed_job,redis等)。
- 您可以在Rails模型中使用回调。您可以使用
"after_update :sync_denormalized_data"
。该回调将包装在数据库级别的事务中(假设您的数据库支持事务)。您将拥有Rails级别的代码,一致的数据,并且不需要后台进程,而每次都需要进行两次写入。 - 一些我没想到的机制…
这些类型的问题是 非常 特定于应用程序的。即使在同一个应用程序中,根据所涉及的灵活性和性能要求,您可能会使用多种方法。



