事务中的 HTTP 请求?

Dav*_*ite 9 postgresql activerecord transactions ruby-on-rails ruby-on-rails-3

我有一个模型,它在创建时向外部 Web 服务发送 HTTP 请求,以便在保存之前找到一些要添加的信息。

目前我正在before_create回调中执行此操作。我最近了解到,回调发生在数据库事务中

我是否会面临任何问题,例如通过这样做限制数据库吞吐量?在发送http请求之前提交记录,然后在返回时更新记录是不是更好?

Erw*_*ter 7

只要您保持事务打开,它获得的所有锁都是活动的。如果您对外部源的调用可能会导致您长时间停滞,请确保不要在同一事务中拥有任何不相关的锁。

换句话说:不要将任何其他东西放入同一笔交易中。

如果您不介意在查找附加信息之前新行可见,您可以只提交并稍后更新该行。

或者,您甚至可以在开始交易之前从外部 Web 服务获取信息。这将是最干净/最快的数据库解决方案。

PostgreSQL 锁类型
如何查看锁