Bonjour,
Très intéressé par la technologie NodeJS, je réalise quelques tests de performance pour le comparer avec d'autres frameworks, Java notamment.
Pour cela, je fais des tests sur des quantité de données assez importantes. Ces données, je les crée avec Faker.js et je les insère directement dans une base MongoDB.
Mon problème est le suivant. Un fichier me permet de créer une base de données MongoDB, MySQL, et deux fichiers csv contenant tous les mêmes données.
Pour les fichiers csv et MySQL pas de soucis, mais pour Mongo environ une fois sur deux il me manque une valeur.
A la fin de mes inserts, je vérifie la quantité de documents dans Mongo et il m'affiche 999 au lieu de 1000. Je précise que c'est le premier champ qui saute à chaque fois. Voici mon code :
La vérification en base de données donne le même résultat que l'affichage dans la console.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 var i=0; var max = 1000; var data; var dataMysql; async.whilst(function(){ if(i<max) return true; else return false; }, function(callback){ i++; bool=false; var user = Faker.Helpers.userCard(); new Person(user).save(function(err, result){ if(err)throw "Insert Error"; //Ajout des données dans le fichier else { //Ici je crée un décalage dans le fichier pour effectuer des updates //pour le premier champ data prend des valeurs aléatoires if(i==1){ data=Faker.Helpers.userCard(); } //ici j'insère dans mon fichier le nouvel id et les données de data fs.appendFile('UserCardDB.csv', result._id+";"+data.name+";"+data.username+";", function (err) { if(err)throw "Writting in UserCardDB Error"; else {if(bool==false){bool=true;} else callback();} }); data=result; } }); //Ici insertion pour MySQL sur le même principe }, function(err){ if(err)console.log(err); else Person.count({},function(err, count){ console.log("All insert done " + count); //res.send(0); }); });
Le module qui contient la fonction async.whilst est ici [URL="https://github.com/caolan/async#whilst"]. En gros elle permet de lancer la deuxième fonction tant que la première retourne true, en cas d'erreur ou de false, elle lance la troisième méthode.
Je ne comprend pas pourquoi si l'insert ne fonctionne pas, mon fichier est bien rempli, alors que l'insertion dans le fichier est dans le callbak de la fonction save.
Merci de votre aide
Partager