Ruby on rails 带PG的Heroku上的Rails/ActiveRecord真的会这么慢吗?

Ruby on rails 带PG的Heroku上的Rails/ActiveRecord真的会这么慢吗?,ruby-on-rails,rails-activerecord,heroku-postgres,Ruby On Rails,Rails Activerecord,Heroku Postgres,在我的Rails应用程序中,我需要防止两个人被分配到同一个案例中 如果案例已经分配,我可以通过查看“事件”表来完成。如果未指定,则会指定它,并创建一行,表明它已指定 这一切都是可行的,只是有时候不行。如果两个人同时尝试访问同一个案例(我们在同一个几百毫秒内讨论),那么事件表似乎没有及时更新 案例被分配给User1。保存到事件表 User2要求分配相同的案例。如果已分配此案例,请检查事件表 同样的情况也分配给User2,因为在我们检查#2时,来自#1的写入尚未注册 我在Heroku上运行Rails

在我的Rails应用程序中,我需要防止两个人被分配到同一个案例中

如果案例已经分配,我可以通过查看“事件”表来完成。如果未指定,则会指定它,并创建一行,表明它已指定

这一切都是可行的,只是有时候不行。如果两个人同时尝试访问同一个案例(我们在同一个几百毫秒内讨论),那么事件表似乎没有及时更新

  • 案例被分配给User1。保存到事件表
  • User2要求分配相同的案例。如果已分配此案例,请检查事件表
  • 同样的情况也分配给User2,因为在我们检查#2时,来自#1的写入尚未注册

  • 我在Heroku上运行Rails 5.0.2和Postgres(Standard-2X dyno和Standard-2 Postgres)

    不幸的是,发生这样的事情并不罕见。如果要避免多个线程/请求之间的资源争用,可以使用锁定有问题的
    案例
    记录


    我个人更喜欢,因为它是开箱即用的,在我看来,这就是那些DB锁的用途。

    这是一种方法,可以确保您使用数据库唯一性和外来密钥约束来解决许多类似的问题<如果他的问题是插入“重复”行,则代码>选择更新无效。此“事件”表到底是什么?你能展示你的模式吗。如果一个
    案例
    只是有一个带有数据库外键的
    assigned\u user\u id
    列,我真的看不出会发生什么实际导致问题。最坏的情况是,第二个“保存表格”的人可能会通过改写关系而不必意识到“窃取”这个案例,但如果你认为这是个问题,那是一个更复杂的解决方案。