Rails事务回滚与生产数据库中的手动清理的性能

时间:2012-12-05 16:55:24

标签: mysql ruby-on-rails database transactions rollback

我知道回滚与手动清理不同,在大多数情况下是首选方法。也就是说,如果数据库中的其他表中存在并发保存和删除,那么大型数据库回滚与手动清理之间的性能差异是什么?


其他详情:

我目前正在开发一个Rails应用程序,允许用户导入大量嵌套学校数据。学校有很多老师,老师有很多教室,教室里有很多学生。因此,CSV可能类似于:

School 1
  Teacher 1
    Class 1
      Student 1
      Student 2
      Student 5
    Class 2
      Student 3
  Teacher 2
    Class 4
      Student 1
      Student 4

在后台工作中,我正在使用此CSV,并且在数据库事务块中,在内存中构建一个巨大的学校对象,然后尝试单个保存。如果保存失败,由于验证原因或超时,事务块将回滚我的数据库到以前的状态。

我注意到这次回滚的性能在生产中非常缓慢。我相信部分原因是因为在回滚期间存在对数据库的并发读写。我现在正在考虑是否通过以下方式手动清理数据库会更快:dependent => :delete_all方法。当我在开发中对这些进行基准测试时,手动清理比回滚稍慢,但同样,没有并发读/写。

0 个答案:

没有答案