Ruby on Rails: 3 tips for deleting data at scale
Blog post from PlanetScale
Rails applications at scale often encounter issues when deleting many records simultaneously due to associations between models. To mitigate these risks, consider using `dependent: :destroy_async` instead of foreign key constraints, which can lead to timeouts and excessive locking. Additionally, be aware of the difference between `delete` and `destroy`, as well as the importance of running validations from the parent model when using `destroy_async`. Finally, safely mass deleting old data by continuously running deletes in small batches, such as with a scheduled Sidekiq job, can help prevent unintended consequences to the rest of the application. By implementing these strategies, you can ensure cleaner data deletion and improve overall performance.