1

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


额外细节:

我目前正在开发一个允许用户导入嵌套学校数据的大型 CSV 的 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 方法手动清理数据库是否会更快。当我在开发中对这些进行基准测试时,手动清理比回滚稍慢,但同样,没有并发读/写。

4

0 回答 0