ruby-on-rails – ActiveRecord的find_or_create *方法是否存在
有几个方法:first_or_create_by,find_or_create_by等,其工作原理如下:
>与数据库交谈,试图找到我们想要的东西 显然,这些方法的并发调用可能使两个线程都找不到他们想要的东西,并且在步骤3中,一个人意外地失败. 似乎是一个更好的解决方案, 那是: >提前在数据库中创建合理的唯一性约束. 那么在什么情况下我想使用Rails内置的东西而不是我自己的(看似更可靠)create_or_find? 解决方法
挖掘之后,我将回答我自己的问题.
用于查找或创建的文档说:
通常,这将比create_or_find具有更好的性能. 考虑到create_or_find在成功的情况下将需要1个DB旅行,每个唯一记录只会发生一次.每隔一次需要2次DB跳转(创建和搜索失败). 如果失败(搜索,失败创建,再次搜索),重试的find_or_create将需要3次旅行,但这只能在非常小的窗口中发生这么多次.除此之外,每隔一次调用find_or_创建一条记录,将需要1分贝的行程. 因此,重试find_or_create的摊销成本更好,并且很快就达到了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |