J'utilise MongoDB pour stocker des valeurs mesurées périodiquement. Toutes les ~ 100 ms, un groupe de valeurs est inséré en tant que document. Cela fonctionne bien, mais je m'inquiète des problèmes de performances. (J'utilise des insertions sûres, il semble que dans PyMongo c'est la valeur par défaut.)
Que se passe-t-il s'il y a plus d'insertions par seconde que mongod ne peut enregistrer sur le disque dur? Y aura-t-il un avertissement ou échouera-t-il simplement en silence?
Existe-t-il une méthode pour surveiller la charge d'écriture? Je n'ai trouvé que db.serverStatus().writeBacksQueued
ce qui est toujours défini sur false lorsque je l'appelle. Comment puis-je tester la quantité de données que je dois insérer pour remplir la file d'attente d'écriture?
mongostat
affiche les verrous. Est-ce quelque chose qui devrait m'inquiéter?
insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn repl time
*117 *0 *0 *0 0 2|0 0 17.4g 35.3g 3.76g 0 .:6.5% 0 0|0 0|0 124b 6k 2 SLV 09:58:10
*111 *0 *0 *0 0 2|0 0 17.4g 35.3g 3.76g 0 .:0.8% 0 0|0 0|0 124b 6k 2 SLV 09:58:11
*111 *0 *0 *0 0 2|0 0 17.4g 35.3g 3.76g 0 .:4.2% 0 0|0 0|0 124b 6k 2 SLV 09:58:1
Dois-je m'inquiéter des verrous d'écriture? Qu'arrive-t-il à un insert pendant une période de verrouillage en écriture? Est-il mis en file d'attente et stocké plus tard?
Je pense à une configuration de réplication simple utilisant un maître et un esclave. La synchronisation initiale ou un processus de resynchronisation verrouille-t-il les bases de données?
(J'utilise la version 2.4.3.)
Mise à jour: Je pense avoir répondu en partie à ma propre question. J'ai réussi à obtenir jusqu'à 12 000 insertions par seconde en utilisant une simple boucle while en insérant un petit document de test. Mais qr | qw montre toujours que la file d'attente de lecture et d'écriture est toujours vide:
insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn repl time
11234 *0 2 *0 1563 1|0 1 21.9g 44.3g 1.22g 0 testdb:58.9% 0 1|0 1|1 797k 980k 6 PRI 10:26:32
12768 *0 2 *0 1284 1|0 0 21.9g 44.3g 1.22g 0 testdb:58.0% 0 0|0 0|1 881k 1m 6 PRI 10:26:33
12839 *0 2 *0 1231 1|0 0 21.9g 44.3g 1.22g 0 testdb:60.3% 0 0|0 0|1 883k 1m 6 PRI 10:26:34
12701 *0 2 *0 910 1|0 0 21.9g 44.3g 1.22g 0 testdb:61.8% 0 0|0 0|1 858k 1m 6 PRI 10:26:35
12241 *0 2 *0 1206 1|0 0 21.9g 44.3g 1.22g 0 testdb:56.7% 0 0|0 0|0 843k 1m 6 PRI 10:26:36
11581 *0 2 *0 1406 1|0 0 21.9g 44.3g 1.22g 0 testdb:61.8% 0 0|0 0|1 811k 1m 6 PRI 10:26:37
8719 *0 2 *0 1210 1|0 0 21.9g 44.3g 1.22g 0 testdb:43.8% 0 0|0 0|1 618k 762k 6 PRI 10:26:38
11429 *0 2 *0 1469 1|0 0 21.9g 44.3g 1.22g 0 testdb:60.6% 0 0|0 0|1 804k 993k 6 PRI 10:26:39
12779 *0 2 *0 1092 1|0 0 21.9g 44.3g 1.22g 0 testdb:60.2% 0 1|0 0|1 872k 1m 6 PRI 10:26:40
12757 *0 2 *0 436 1|0 0 21.9g 44.3g 1.22g 0 testdb:59.7% 0 0|0 0|1 838k 432k 6 PRI 10:26:41
Je suppose que cela signifie que les insertions seules ne causeront pas beaucoup de problèmes: "Les files d'attente auront tendance à augmenter si vous effectuez beaucoup d'opérations d'écriture aux côtés d'autres opérations d'écriture lourdes, telles que les suppressions à grande distance." (trouvé ici ]
Ma question ouverte: qu'advient-il de mes données si la file d'attente d'écriture augmente à long terme?