Created
March 3, 2022 15:48
-
-
Save leandromoh/3bbe9c7e6ccf1bf2a09ce2fde06c11d9 to your computer and use it in GitHub Desktop.
compares the time of doing a single mongo bulk write vs divide all operations in N bulks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function createRandomObj(fieldCount, allowNested) { | |
var generatedObj = {}; | |
for(var i = 0; i < fieldCount; i++) { | |
var generatedObjField; | |
switch(randomInt(allowNested ? 6 : 5)) { | |
case 0: | |
generatedObjField = randomInt(1000); | |
break; | |
case 1: | |
generatedObjField = Math.random(); | |
break; | |
case 2: | |
generatedObjField = Math.random() < 0.5 ? true : false; | |
break; | |
case 3: | |
generatedObjField = randomString(randomInt(4) + 4); | |
break; | |
case 4: | |
generatedObjField = null; | |
break; | |
case 5: | |
generatedObjField = createRandomObj(fieldCount, allowNested); | |
break; | |
} | |
generatedObj[randomString(8)] = generatedObjField; | |
} | |
return generatedObj; | |
function randomInt(rightBound){ | |
return Math.floor(Math.random() * rightBound); | |
} | |
function randomString(size){ | |
var alphaChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; | |
var generatedString = ''; | |
for(var i = 0; i < size; i++) { | |
generatedString += alphaChars[randomInt(alphaChars.length)]; | |
} | |
return generatedString; | |
} | |
} | |
function chunkArrayInGroups(arr, size) { | |
var myArray = []; | |
for(var i = 0; i < arr.length; i += size) { | |
myArray.push(arr.slice(i, i+size)); | |
} | |
return myArray; | |
} | |
function getInserts(count) { | |
var objs = [...Array(count).keys()].map(_ => { | |
var item = createRandomObj(4, false); | |
return { | |
"insertOne": { | |
"document": item, | |
} | |
}; | |
}); | |
print(`[${Date()}] - gerado commands para ${count} itens`); | |
return objs; | |
} | |
function executeBulk(bulkOperations) { | |
var result = db.orders.bulkWrite(bulkOperations, { "ordered": false }); | |
print(`${bulkOperations.length] operations done`); | |
} | |
function doBulk(itenCount, bulkCount) { | |
var start = new Date(); | |
var operations = getInserts(itenCount); | |
var part = itenCount / bulkCount; | |
var bulkOperations = chunkArrayInGroups(operations, part); | |
for(var i = 0; i < bulkCount; i++) | |
{ | |
executeBulk(bulkOperations[i]); | |
} | |
var end = new Date(); | |
const diffTime = Math.abs(end - start); | |
print(`total time = ${diffTime} ms`); | |
} | |
doBulk(10000, 1); | |
doBulk(10000, 2); | |
doBulk(10000, 3); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment