mongodb - 如何在几分钟内将 700+ 百万行导入 MongoDB
问题描述
我们有 32 核 Windows 服务器、96 GB RAM 和 5TB 硬盘
方法 1(使用 Oracle SQLLDR)
- 我们从 oracle 数据库中获取输入数据。
- 我们处理并生成了多个 TSV 文件。
- 使用线程,我们使用 SQL Loader 将数据导入 Oracle 数据库。
它需要大约 66 小时。
方法 2(使用 MongoImport)
- 我们从 oracle 数据库中获取输入数据。
- 我们处理并生成了多个 TSV 文件。
- 使用线程,我们正在使用 mongoimport 命令行实用程序将数据导入 MongoDB 数据库。
它需要大约 65 小时。
在性能上没有观察到明显的差异。
我们需要处理 700+ 百万条记录,请提出更好的方法来优化性能。
我们从 oracle 数据库中获取,在我们的应用程序中处理并将输出存储在另一个数据库中。这是我们在 Oracle 数据库上执行的现有流程,但它非常耗时,因此我们决定尝试使用 MongoDB 来提高性能。
我们做了一次 POC,没有得到任何明显的差异。由于硬件原因,我们认为它可能在服务器上工作,所以我们在服务器上进行了 POC,得到了上述结果。
我们认为 MongoDB 比 Oracle 数据库更健壮,但在比较统计数据后未能获得预期的结果。
请查找生产服务器的MongoDB相关详细信息:
MongoImport 命令
mongoimport --db abcDB --collection abcCollection --type tsv --file abc.tsv --headerline --numInsertionWorkers 8 --bypassDocumentValidation
有线老虎配置
存储:dbPath:C:\data\db 日志:启用:假有线老虎:engineConfig:cacheSizeGB:40
近似计算时间由使用 Oracle 的进程执行和使用 MongoDB 的进程执行的进程日志详细信息计算得出。
在生产服务器上执行的带下划线的 POC 用于比较 Oracle(SQL Loader) 与 MongoDB ( MongoImport ) 的性能
由于我们为 POC 使用独立的 MongoDB 实例,因此我们没有在生产服务器中创建任何分片。
如果我们使用 MongoDB 得到了想要的结果,那么我们就得出了关于迁移的结论。
提前谢谢你。
解决方案
推荐阅读
- postgresql - 如何使用 postgresql 从两个单独的时间测量间隔时间
- javascript - 编译为 JavaScript 时,有没有办法在 Haxe 中对类型进行别名?
- javascript - 反应窗口卸载事件不会触发
- python - 熊猫“部分融化”或“集体融化”
- azure - 如何使用 Arm 模板更新现有 Azure Vm 规模集
- vb.net - Keyboard.SendKeys 是 Forms.Sendkeys 的更新?
- angular - Cordova + Angular 4 + GTM(谷歌标签管理器)需要的项目?
- sublimetext3 - 从目录路径安装 Sublime 包
- javascript - Firefox、触摸事件和“平滑”滚动行为——导致不滚动
- r - 差异表达基因分析:如何对不同临床矩阵的表达矩阵进行t.test?