我在Rails 3.2应用程序中使用PostgreSQL,该应用程序整天接收来自第三方的更新。有时这个第三方会在我的应用程序中每分钟抛出超过2,000个请求,每个更新都包含一个大型XML文件。
现在我将每个XML文件的基本信息存储到表中。然后,后台进程会在该表中获取大块数据,并使用PostgreSQL的COPY
功能将数据复制到表中。
我在这里做对了还是做错了什么?此表是加载目标,也是UI的主要CRUD目标。 COPY
功能是否在加载发生时锁定整个表,我应该做一堆插入吗?我原本以为插入过于昂贵,但如果直接加载会锁定整个表格,那么这将是一个问题。
答案 0 :(得分:1)
COPY
是将记录大量插入PostgreSQL的最低级别方法。我喜欢你在后台工作中后处理记录的解决方案。
或者,如果您需要具有性能并维护一些Rails / Ruby功能,请考虑使用 activerecord-import宝石。 gem将执行大量插入,并允许根据需要使用ActiveRecord回调和验证。即使您使用它来处理批量COPYed记录的后期处理,它也可能会使您的性能显着提高。
以下是使用activerecord-import的好文章: http://ruby-journal.com/how-to-import-millions-records-via-activerecord-within-minutes-not-hours/
这是Postgres团队推荐的最佳导入性能:http://www.postgresql.org/docs/current/interactive/populate.html