如何在几分钟内将700+百万行导入MongoDB

时间:2019-04-02 04:21:26

标签: mongodb c#-3.0 sql-loader windows-server mongoimport

我们有32台核心Windows Server,96 GB RAM和5TB HDD

方法1(使用Oracle SQLLDR)

  1. 我们从oracle数据库中获取了输入数据。
  2. 我们处理并生成了多个TSV文件。
  3. 使用线程,我们正在使用SQL Loader将数据导入Oracle数据库。

大约需要66小时。

方法2(使用MongoImport)

  1. 我们从oracle数据库中获取了输入数据。
  2. 我们处理并生成了多个TSV文件。
  3. 使用线程,我们正在使用mongoimport命令行实用程序将数据导入MongoDB数据库。

大约需要65小时。

在性能上没有显着差异。

我们需要处理700亿条记录,请提出更好的方法来优化性能。

我们正在从oracle数据库中获取,在我们的应用程序中进行处理并将输出存储在另一个数据库中。这是我们在Oracle数据库上执行的现有过程,但是很耗时,因此我们决定尝试MongoDB来提高性能。

我们做了一个POC,在这里我们并没有什么大的不同。由于硬件原因,我们认为它可以在服务器上运行,因此我们在服务器上进行了POC,得到了上述结果。

我们认为MongoDB比Oracle数据库更健壮,但在比较统计数据后未能获得理想的结果。

请找到生产服务器与MongoDB相关的详细信息:

  1. MongoImport命令

    mongoimport --db abcDB --collection abcCollection --type tsv --file abc.tsv --headerline --numInsertionWorkers 8 --bypassDocumentValidation

  2. 有线老虎配置

    存储:   dbPath:C:\ data \ db   日志:    启用:false wireTiger:   engineConfig:     cacheSizeGB:40

通过进程日志详细信息来计算大约计算时间,以便使用Oracle进行进程执行,并使用MongoDB进行进程执行。

在生产服务器上执行的带有下划线的POC用于比较Oracle(SQL Loader)与MongoDB(MongoImport)的性能

由于我们将独立的MongoDB实例用于POC,因此我们尚未在生产服务器中创建任何分片。

如果使用MongoDB获得理想的结果,那么就得出有关迁移的结论。

提前谢谢您。

0 个答案:

没有答案