【问题标题】:MongoDB seed script for 10million entries takes 30 minutes1000 万个条目的 MongoDB 种子脚本需要 30 分钟
【发布时间】:2019-07-21 21:09:37
【问题描述】:

我有一个正在进行的项目,我必须为一个包含 1000 万行随机行的数据库播种,我已经成功完成了。然而,它需要大约 30 分钟才能完成,这是意料之中的,但我知道它可能会更快。我想让它运行得更快,并想办法让它在 10 分钟内播种 1000 万个随机条目,同时最好仍然使用 mongodb/mongoose。这是我当前的种子文件,有什么让它运行得更快的技巧吗?第一次在这里发帖,仅供参考。谢谢!

我使用 'node database/seed.js' 在终端中运行这个文件。

const db = require("./index.js");
const mongoose = require("mongoose");
const faker = require("faker");

const productSchema = mongoose.Schema({
  product_name: String,
  image: String,
  price: String
});

let Product = mongoose.model("Product", productSchema);

async function seed() {
  for (let i = 0; i < 10000000; i++) {
    let name = faker.commerce.productName();
    let image = faker.image.imageUrl();
    let price = faker.commerce.price();

    let item = new Product({
      product_name: `${name}`,
      image: `${image}`,
      price: `$${price}`
    });

    await item
      .save()
      .then(success => {})
      .catch(err => {});
  }
}
seed();

【问题讨论】:

    标签: javascript mongodb mongoose mongoose-schema seeding


    【解决方案1】:

    您可以创建批量可能是 100 万条记录,并且可以使用 insertMany 函数将批量插入数据库。

    【讨论】:

    • 如果我没记错的话,bulk API 的记录数是有限制的,但总的来说是的,这是 Bulk API 的一个用例……不确定 mongoose 在不过,引擎盖。
    • @RidgeA 当然是MongoDB NodeJS Driver。检查package.json。过去每个“批处理到服务器”有 1000 个文档的上限(对方法本身的内容没有实际限制),但只要服务器为 3.6 或更高版本,现在就没有了。现在唯一真正的上限是每个“批处理”请求的实际容量为 16MB。你不会做“100万”的真正原因更多是关于创建这样的大型内存数组。当然,一些较小的网络请求比一个胖的要好,或者当然是数百万个“微小”的请求
    【解决方案2】:

    使用InsertMany

    在所有类型的数据库中插入/更新总是需要时间。尽量减少插入次数。

    每 1000 次插入一些东西或循环一次

    Model.insertMany(arr, function(error, docs) {});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 2021-07-25
      • 2016-12-01
      • 2014-09-04
      • 1970-01-01
      • 2018-07-07
      • 2014-07-09
      相关资源
      最近更新 更多