【发布时间】:2012-02-13 17:37:38
【问题描述】:
我有一个带有大约 3000 万行表格的 rails 应用程序,我根据数据提供者每季度提供给我的文本文档构建该表格。从那里我对其他一些表进行一些操作和比较,并创建一个包含更多自定义数据的附加表。
我第一次这样做时,我通过 Rails 控制台运行了一个 ruby 脚本。这很慢,显然不是最好的方法。
在我的生产服务器上简化此过程并在没有任何停机时间或至少非常有限的停机时间的情况下对其进行更新的最佳方法是什么?
这是我认为目前最好的过程:
创建 rake 任务以读取数据。使用 activerecord-import 插件进行批量写入并关闭 activerecord 验证。将此数据加载到全新的重复表中。
在新创建的表上构建索引。
将新创建的表重命名为 rails 应用程序正在寻找的名称。
删除旧的。
所有这些我都计划在生产服务器上做。
有没有更好的方法来做到这一点?
来自 cmets 的其他说明:
- 表已经存在
- 旧表和数据是一次性的
- 只能锁定表格以供选择
- 必须尽量减少停机时间
- 我们当前的服务器情况是 2 个高 CPU Amazon EC2 实例。我相信他们有 1.7GB 的 RAM,因此暂时存储整个导入可能不是一种选择。
- 新数据是原始文本文件,以行分隔。我已经用 Ruby 编写了用于解析它的脚本。
【问题讨论】:
-
使用 resque 或延迟作业的后台任务运行导入可能会起作用,您是急于让它们进入,还是只是不希望您的服务器在运行时变慢。
-
有点着急。我更关心的是想出最轻松、最自动化的流程来完成这项工作,因为从现在到永远,我必须每 3 个月做一次。
-
可能的路线取决于您的具体要求。您需要的表是否已经存在?结构会改变吗?您需要表中的旧数据吗?新数据是否完全替换了表的旧内容?你可以独占锁定桌子吗?您需要尽量减少停机时间吗?您是否有足够的 RAM 来临时保存全部导入的数据?
-
最后但同样重要的是:您以什么格式获取新数据? CSV?
-
查看编辑以获取问题的答案,欧文。
标签: ruby-on-rails database ruby-on-rails-3 postgresql