更快/批量的主动记录创建

时间:2009-04-25 21:53:58

标签: ruby-on-rails performance activerecord

我的应用程序是存储来自GPS输入的位置数据。导入GPX文件时,用户可以拥有500 - 10,000个GPS数据点。现在,我有一个每个跟踪点的模型。它工作得很好,但在插入时它很慢。 10,000个数据点的30秒以上。有没有更好的批量插入方式?

所有的时间都花在了SQL端 - 每次插入都很快,但10,000加起来很快。每个用户可能有100个文件,100个用户==很长的插入时间。当然不是一次性的。

我很乐意改变应用程序架构,如果这会有所帮助,只是不确定我有什么替代方案。我只使用GPS数据作为一个单元。我从不在集合中搜索一条记录,因此整个ActiveRecord都是矫枉过正的。

我不想做一个完整的队列系统只是为了处理这个愚蠢的插入。

2 个答案:

答案 0 :(得分:2)

使用ar-extensions的导入方法一次导入所有内容:http://github.com/zdennis/ar-extensions/blob/master/ar-extensions/lib/ar-extensions/import.rb#L49-215

问题在于,如果通过执行#save导入每条记录,实际上每行创建一个插入语句,并调用所有模型的验证。您可以构造一个更大的sql insert语句,一次性推送所有数据。

答案 1 :(得分:0)

一直在考虑这个问题,似乎我的两个选项是将哈希序列化为数据库中的blob,或者将其存储在其他位置。我没有FS访问权限,但可以使用S3。

所以我想我已经改变了我的问题。对于存储创建后几乎只读的100kb对象,有关S3与blob存储的一般原则的任何反馈吗?

我认为this thread可能涵盖了我现在正在寻找的东西!