【问题标题】:Smartest way to import massive datasets into a Rails application?将海量数据集导入 Rails 应用程序的最明智方法?
【发布时间】:2010-03-12 17:23:58
【问题描述】:

我需要将多个海量(数 GB)数据集导入 Rails 应用程序。这些数据集目前在我的开发机器上各自的数据库中,我需要从它们中读取数据并根据它们包含的信息在我的 Rails 数据库中的表中创建行。我的 Rails 数据库中的表不会与源数据库中的表完全相同。

最聪明的方法是什么?

我在考虑迁移,但我不确定如何将迁移连接到数据库,即使可以,那会慢得离谱吗?

【问题讨论】:

  • 旧数据库和新数据库会有什么不同?如果更改是肤浅的(列名等),那么我只需手动将它们从旧数据库导出到新数据库中,然后运行迁移以更改列。
  • 我在 Postgres 上。在这一点上,我实际上还没有对数据集进行足够的研究,以确定需要进行多少更改,但至少会有重命名的列和删除的列。我不确定它是否有很大的不同,但在复制的表中也将是连接表,以及由 foreign_keys 链接的其他表。
  • @jordan:我认为您应该将其发布为答案,因为在我看来这是完成这项工作的最佳方式(如果可行的话)。

标签: ruby-on-rails database import dataset migration


【解决方案1】:

在不查看架构或不知道要应用于每一行的逻辑的情况下,我会说导入此数据的最快方法是创建要以所需列顺序导出的表的视图(并处理它使用sql)并在该视图上选择进入outfile。然后,您可以获取生成的文件并将其导入目标数据库。

不过,这将不允许您对导入的数据使用任何 Rails 模型验证。

否则,您必须走慢点,为每个源数据库/表创建一个模型以提取数据(http://programmerassist.com/article/302 告诉您如何连接到给定模型的不同数据库)并以这种方式导入。这会很慢,但您可以设置一个 EC2 怪物实例并尽可能快地运行它。

迁移可以解决这个问题,但我不建议这样做。

【讨论】:

  • 我在数据库方面很弱,在这样的方法中,我能够保留原始数据集中模型之间的关系吗?似乎如果我要导入foreign_keys,我还必须导入主键以保留关系,并且为了保留主键,我需要将数据导入空白表。可以想象,我可以将现有表转储到一个文件中,然后重新导入它们,手动匹配它们的外键关系,但这显然听起来很痛苦。还是我缺少什么重要的东西?
  • 如果您使用转储/重新导入方法,您可能需要将它们导入到空白表中。如果您为数据创建模型并通过 rails 模型导入,则不会(因为您可以使用关联来创建和管理相关项目)。
【解决方案2】:

既然georgian建议了,我会发表我的评论作为答案:

如果更改是肤浅的(更改列名、删除列等),那么我只需手动将它们从旧数据库导出到新数据库,然后运行迁移以更改列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多