带有 PG 的 Heroku 上的 Rails / ActiveRecord 真的这么慢吗?
Can Rails / ActiveRecord on Heroku with PG really be this slow?
在我的 Rails-application 中,我需要防止两个人被分配相同的案例。
我通过查看 "events" table 如果案例已经分配来做到这一点。如果没有,它被分配并创建一行说它已经分配。
这一切都有效 - 除了有时无效。如果两个人试图同时访问同一个案例(我们在同一几百毫秒内交谈),那么 events-table 似乎没有及时更新。
- 案例已分配给 User1。已保存到活动-table.
- 用户 2 要求分配相同的案例。检查事件-table 如果这个案例已经被分配。
- 相同的案例分配给了 User2,因为在我们检查 #2 时来自 #1 的写入尚未注册
我是 运行 Rails 5.0.2,在 Heroku 上使用 Postgres(Standard-2X dyno 和 Standard-2 Postgres)。
不幸的是,这样的事情并不少见。如果要避免多个threads/requests之间的资源争用,可以使用ActiveRecord Locking锁定有问题的Case
记录。
我个人更喜欢 pessimistic locking,因为它开箱即用,在我看来,这就是那些数据库锁的用途。
在我的 Rails-application 中,我需要防止两个人被分配相同的案例。
我通过查看 "events" table 如果案例已经分配来做到这一点。如果没有,它被分配并创建一行说它已经分配。
这一切都有效 - 除了有时无效。如果两个人试图同时访问同一个案例(我们在同一几百毫秒内交谈),那么 events-table 似乎没有及时更新。
- 案例已分配给 User1。已保存到活动-table.
- 用户 2 要求分配相同的案例。检查事件-table 如果这个案例已经被分配。
- 相同的案例分配给了 User2,因为在我们检查 #2 时来自 #1 的写入尚未注册
我是 运行 Rails 5.0.2,在 Heroku 上使用 Postgres(Standard-2X dyno 和 Standard-2 Postgres)。
不幸的是,这样的事情并不少见。如果要避免多个threads/requests之间的资源争用,可以使用ActiveRecord Locking锁定有问题的Case
记录。
我个人更喜欢 pessimistic locking,因为它开箱即用,在我看来,这就是那些数据库锁的用途。