Ich verwende MongoDB, um periodisch gemessene Werte zu speichern. Alle ~ 100 ms wird eine Reihe von Werten als Dokument eingefügt. Es funktioniert gut, aber ich mache mir Sorgen um Leistungsprobleme. (Ich verwende sichere Einfügungen, es scheint, als wäre dies in PyMongo die Standardeinstellung.)
Was passiert, wenn mehr Einfügungen pro Sekunde vorhanden sind, als mongod auf der Festplatte speichern kann? Wird es eine Warnung geben oder scheitert sie einfach stillschweigend?
Gibt es eine Methode zur Überwachung der Schreiblast? Ich habe nur gefunden, db.serverStatus().writeBacksQueued
was immer auf false gesetzt ist, wenn ich es aufrufe. Wie kann ich testen, wie viele Daten ich einfügen muss, um die Schreibwarteschlange zu füllen?
mongostat
zeigt Schlösser an. Sollte ich mir darüber Sorgen machen?
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
Muss ich mir Sorgen um Schreibsperren machen? Was passiert mit einer Einfügung während eines schreibgeschützten Zeitraums? Steht es in der Warteschlange und wird es später gespeichert?
Ich denke über ein einfaches Replikationssetup mit einem Master und einem Slave nach. Sperrt die anfängliche Synchronisierung oder ein Resynchronisierungsprozess die Datenbanken?
(Ich verwende Version 2.4.3.)
Update: Ich glaube, ich habe meine eigene Frage teilweise beantwortet. Ich habe es geschafft, mit einer einfachen while-Schleife, die ein kleines Testdokument einfügt, bis zu 12.000 Einfügungen pro Sekunde zu erzielen. Aber qr | qw zeigt immer noch, dass dort die Lese- und Schreibwarteschlange noch leer ist:
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
Ich nehme an, dass dies bedeutet, dass Einfügungen alleine nicht viele Probleme verursachen: "Warteschlangen tendieren zu Spitzenwerten, wenn Sie viele Schreibvorgänge neben anderen schreibintensiven Operationen ausführen, wie z. B. großen Entfernungen." ( hier gefunden )
Meine offene Frage: Was passiert mit meinen Daten, wenn sich die Schreibwarteschlange langfristig erhöht?