【问题标题】:Faster/bulk activerecord creation更快/批量创建活动记录
【发布时间】:2009-04-25 21:53:57
【问题描述】:

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

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

如果有帮助,我很乐意更改应用程序架构,只是不确定我在这里有什么替代方案。我只使用 GPS 数据作为一个单位。我从不在集合中搜索一条记录,所以整个 ActiveRecord 都是多余的。

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

【问题讨论】:

    标签: ruby-on-rails performance activerecord


    【解决方案1】:

    使用 ar-extensions 的导入方式一次性导入:http://github.com/zdennis/ar-extensions/blob/master/ar-extensions/lib/ar-extensions/import.rb#L49-215

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-16
        • 1970-01-01
        • 2016-05-19
        • 1970-01-01
        • 2015-09-26
        • 2018-06-10
        • 2021-12-13
        • 2017-06-23
        相关资源
        最近更新 更多