我正在实现一种统计算法,该算法需要访问大型样本数据集以进行适当的测试。 大是单个表中的 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