在Rails中,我总是使用dependent: :destroy
删除依赖对象。
然而,在以下情况下,它无法正常工作,因为订阅和通知非常庞大,必须销毁数百万个对象。
Users --> Projects --> Subscriptions
\
--> Notifications
有些问题是:
dependent: :delete_all
,因为它会长时间阻塞数据库user.destroy
包含交易中的所有删除内容(我不认为这对于同时必须提供其他查询的数据库有好处)用数百万条记录处理大型破坏的Rails方法是什么?是否有任何宝石可以更好地帮助和处理dependent: :destroy
(例如在交易之外)?在这种情况下,您会建议采用什么方法?
答案 0 :(得分:2)
从 Rails 6.1 开始,可以执行 dependent: :destroy_async
在后台销毁关联
has_many :subscriptions, dependent: :destroy_async
刚刚发布以供将来参考