Ruby on Rails - 针对大型数据集的测试算法



我正在实现一种统计算法,该算法需要访问大型样本数据集以进行适当的测试。 大是单个表中的 50,000 行,MySQL。

我想使用传统的 RSpec 方法来进行测试,但创建样本集并将其加载到数据库中会导致两个问题。

  • 使用活动记录创建的速度极慢/密集。 我还没有探索各种选项来创建跳过验证,因为这些模型非常基本,我认为它不会产生巨大的速度差异
  • 使用黑客mysqlimport进行不正确的清理(意味着测试后留在数据库中的数据,尽管在 :after 块中显式调用了 DatabaseCleaner)

在内存中创建对象图是可能的,但不是嘲笑者,我有点害怕覆盖AR功能。

有什么想法,最佳实践吗?

谢谢!贾斯汀

这只是部分答案,但是:

  • 使用活动记录创建的速度极慢/密集。(...)我认为它不会产生巨大的速度差异

这实际上是一个很大的速度差异。PostgreSQL对此有一个很好的指导:

http://www.postgresql.org/docs/9.0/interactive/populate.html

大多数它直接适用于MySQL:

  • 使用单个事务,而不是多个事务。
  • 加载文件中的数据:http://dev.mysql.com/doc/refman/5.5/en/load-data.html
  • 删除索引并在插入后重新创建它们。
  • 加载数据时禁用 fkey 约束(当然,前提是数据是干净的)。
  • 为 MySQL 提供大量资源。
  • 禁用复制(如果适用)。
  • 使用黑客mysqlimport进行不正确的清理(意味着测试后留在数据库中的数据,尽管在:after块中显式调用了DatabaseCleaner)

如果要刷新表的所有数据,请尝试截断:

http://dev.mysql.com/doc/refman/5.5/en/truncate-table.html

最新更新