【发布时间】:2017-06-19 06:36:43
【问题描述】:
我必须将 500 万条记录从 PostgreSQL 迁移到 MongoDb。
我尝试使用 mongify 进行相同的操作,但由于它在 ruby 上运行,而且我对 ruby 完全不熟悉,我无法解决它带来的错误。
所以,我尝试自己在node.js 中编写代码,首先将PostgreSQL data 转换为JSON,然后将该JSON 插入mongoDb。
但是,这失败了,因为它占用了大量 RAM,并且不能迁移超过 13000 条记录。
然后我想在Java 中编写代码,因为它有垃圾收集器。它在 RAM 利用率方面工作正常,但速度非常慢(大约 10000 条记录/小时)。按照这个速度,我需要几天的时间来迁移我的数据。
那么,有没有更高效、更快捷的方法呢? python程序会比Java程序快吗?或者有没有其他现成的工具可以做同样的事情?
我的系统配置是: 操作系统 - Windows 7(64 位), 内存 - 4GB, i3处理器
【问题讨论】:
-
你在使用bulkInsert吗?thejavageek.com/2015/07/08/mongodb-bulk-insert
-
@RahulKumar 不,我正在从 Postgresql 中获取行并一一插入到 Mongodb 中。因为 RAM 不支持将所有 500 万条记录一起转换为 JSON。所以,我在做 db.collection.insert(jsondata)
-
所以你一次从postgresql中获取所有500万行,然后一一进入mongodb?在任何情况下,您都可以寻找批处理。
-
您可以从 pg 读取记录,假设每个 200 条(取决于记录的大小)。转换这些,做 bulkInsert 。然后同时对多个线程执行此操作?
-
我认为您可以通过在 postgresql 中使用 skip 和 limit 创建一批 1000 条记录并处理这 1000 条,然后在这 1000 条上使用 bulkinsert 并循环执行此批处理,直到所有记录都完成。大部分时间都用于连接到 postgresql 和 mongodb。 java天生就更快。
标签: java node.js mongodb postgresql database-migration