针对大数据集的测试算法

时间:2011-05-12 15:43:50

标签: ruby-on-rails database unit-testing rspec statistics

我正在实施一种统计算法,需要访问大型样本数据集才能进行正确的测试。一个表中有50,000行,MySQL。

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

  • 使用Active Record创建极其缓慢/密集。我没有探索创建跳过验证的各种选项,因为模型非常基本,我认为它不会产生巨大的速度差异
  • 使用hacky mysqlimport进行不正确的清理(意味着测试后数据库中保留的数据,尽管在块之后显式调用DatabaseCleaner)

在内存中创建对象图是一种可能,但不是一个模仿者,我有点害怕覆盖AR功能。

任何想法,最佳做法?

谢谢! 贾斯汀

1 个答案:

答案 0 :(得分:3)

这只是部分答案,但是:

  
      
  • 使用Active Record创建极其缓慢/密集。 (...)我认为它不会产生巨大的速度差异
  •   

它实际上是一个很大的速度差异。 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提供充足的资源。
  • 如果适用,禁用复制。
  
      
  • 使用hacky mysqlimport进行不正确的清理(意味着测试后数据库中保留的数据,尽管在块之后显式调用DatabaseCleaner)
  •   

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

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