从before_create移动到PostgreSql触发器?

时间:2015-02-27 10:34:18

标签: sql ruby-on-rails postgresql

我们有带有before_create触发器的模型,如下所示:

def set_location_id
  self.location_id = Location.find_by(code: location_code).id
end

def set_product_id
  self.product_id = Product.find_by(code: product_code).id
end

你认为将那些rails触发器移动到PostgreSql是个好主意吗?

性能怎么样?

2 个答案:

答案 0 :(得分:1)

在插入触发器之后或之前使用PostgreSQL肯定会比Ruby(activerecord)before_create更快更高效。但是你的代码将变得非常难以维护。现在,您的软件业务逻辑将位于两个不同的位置 1)在rails应用程序中存储过程 2)在你的铁轨模型

具有两个不同的位置将使得将来难以调试和编程。

答案 1 :(得分:0)

我将告诉您目前我采用的有关性能优化的一些规则:

  1. 必须
  2. 时始终进行性能优化
  3. 仅在必须
  4. 时才进行性能优化
  5. 始终确保您在实际数据上衡量所需的性能
  6. 现在各自考虑:

    1. 据我所知,您不需要进行性能优化
    2. 据我所知,您不需要进行性能优化
    3. its answer中的@Coderhs理所当然地认为你会有性能提升。我的经验告诉我,假设基准测试结果经常偏离实际结果,有时甚至会导致性能下降。所以我建议你1)建立所需的性能改进2)测量它。因为据我所知,您不需要进行性能优化,可能您应该花时间实现功能或修复错误或重构;)