I need to insert 10K documents as fast as possible but it's taking a long time.
I am currently using Model.create([]) to do this.
Would it help to use multiple connections to the database? For example have 10 connections saving 1K each?
CodePudding user response:
Use db.collection.insertMany([])
insertMany will accept array of objects and this is use to perform bulk insertions.
CodePudding user response:
You can use model.insertMany(doc, options)
.
Some stuff to note below.
Connection Pool
10 connections is usually sufficient, but it greatly depends on your hardware. Opening up more connections may slow down your server.
In some cases, the number of connections between the applications and the database can overwhelm the ability of the server to handle requests.
Options
There are a couple of options for insertMany that can speed up insertion.
[options.lean «Boolean» = false] if true, skips hydrating and validating the documents. This option is useful if you need the extra performance, but Mongoose won't validate the documents before inserting.
[options.limit «Number» = null] this limits the number of documents being processed (validation/casting) by mongoose in parallel, this does NOT send the documents in batches to MongoDB. Use this option if you're processing a large number of documents and your app is running out of memory.
Write concern
Setting options on writeConcern
in options can also affect performance.
If applications specify write concerns that include the j option, mongod will decrease the duration between journal writes, which can increase the overall write load.