首页 > 解决方案 > 如何在几分钟内将 700+ 百万行导入 MongoDB

问题描述

我们有 32 核 Windows 服务器、96 GB RAM 和 5TB 硬盘

方法 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 日志:启用:假有线老虎:engineConfig:cacheSizeGB:40

近似计算时间由使用 Oracle 的进程执行和使用 MongoDB 的进程执行的进程日志详细信息计算得出。

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

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

如果我们使用 MongoDB 得到了想要的结果,那么我们就得出了关于迁移的结论。

提前谢谢你。

标签: mongodbc#-3.0sql-loaderwindows-servermongoimport

解决方案


推荐阅读