Uso MongoDB per memorizzare valori misurati periodicamente. Ogni ~ 100 ms viene inserito un gruppo di valori come documento. Funziona bene, ma sono preoccupato per i problemi di prestazioni. (Uso inserti sicuri, sembra che in PyMongo sia l'impostazione predefinita.)
Cosa succede se ci sono più inserti al secondo di quanti mongod sia in grado di salvare sul disco rigido? Ci sarà qualche avvertimento o semplicemente fallirà silenziosamente?
Esiste un metodo per monitorare il carico in scrittura? Ho trovato solo db.serverStatus().writeBacksQueued
che è sempre impostato su false quando lo chiamo. Come posso verificare quanti dati devo inserire per riempire la coda di scrittura?
mongostat
mostra i blocchi. È qualcosa di cui dovrei preoccuparmi?
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
Devo preoccuparmi dei blocchi di scrittura? Cosa succede a un inserto durante un periodo di tempo bloccato in scrittura? Viene messo in coda e archiviato in seguito?
Sto pensando a una semplice configurazione della replica usando un master e uno slave. La sincronizzazione iniziale o un processo di risincronizzazione bloccano i database?
(Sto usando la versione 2.4.3.)
Aggiornamento: penso di aver parzialmente risposto alla mia domanda. Sono riuscito a ottenere fino a 12.000 inserti al secondo usando un semplice ciclo while inserendo un piccolo documento di prova. Ma qr | qw mostra ancora che la coda di lettura e scrittura è ancora vuota:
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
Suppongo che ciò significhi che gli inserti da soli non causeranno molti problemi: "Le code tenderanno ad aumentare se si eseguono molte operazioni di scrittura insieme ad altre operazioni di scrittura pesanti, come le operazioni di rimozione a grande distanza". (trovato qui )
La mia domanda aperta: cosa succede ai miei dati se la coda di scrittura aumenta a lungo termine?