我正在使用 Ruby on Rails 和 PostgreSQL 编写程序。系统会生成大量报告,这些报告经常被用户更新和访问。我在是否应该使用 Postgres 触发器来创建报告表(如 Oracle 物化视图)或 Rails 内置的 ActiveRecord 回调之间犹豫不决。有没有人对此有任何想法或经验?
问问题
4860 次
2 回答
17
回调在以下情况下很有用:
- 在 Rails 模型中结合所有业务逻辑,从而简化可维护性。
- 利用现有的 Rails 模型代码
- 易于调试
- Ruby 代码比 sql“可维护性”更容易编写/阅读
触发器在以下情况下很有用:
- 性能是一个大问题。它比回调更快。
如果您关心的是轻松和干净,那么请使用回调。如果您关心的是性能,请使用触发器。
于 2011-09-08T09:55:26.020 回答
9
我们遇到了同样的问题,由于这是一个有趣的话题,我将根据我们的选择/经验进行详细说明。
我认为这个概念比当前答案中强调的更复杂。
由于我们谈论的是报告,我假设用例是更新数据仓库表 - 而不是“通用”应用程序(这个假设/区别是至关重要的)。
首先,“易于调试”的想法不是[必然]正确的。在我们的例子中,这样想实际上适得其反。
在足够复杂的应用程序中,某些类型的回调(数据仓库更新/数百万行代码/中等(或更多)规模的团队)根本无法维护,因为数据库将更新的地方/方式太多,以至于它调试错过的回调实际上是不可能的。
触发器不必设计为“复杂而快速”的逻辑。具体来说,触发器也可以用作低级回调逻辑,因此简单而精简:它们只需将更新事件转发回 Rails 代码。
最后,在提到的用例中,应该像瘟疫一样避免使用 rails 回调。
一种高效且有效的设计是让 RDBMS 触发器将记录添加到队列表中,并使用 Rails 端的排队系统对其进行操作。
(由于这个帖子很旧,我很好奇OP的经历是什么)
于 2016-01-15T10:31:58.537 回答