Yo uso MongoDB para almacenar valores medidos periódicamente. Cada ~ 100 ms se inserta un conjunto de valores como documento. Funciona bien, pero me preocupan los problemas de rendimiento. (Uso insertos seguros, parece que en PyMongo este es el valor predeterminado).
¿Qué sucede si hay más inserciones por segundo de las que mongod puede guardar en el disco duro? ¿Habrá alguna advertencia o simplemente fallará en silencio?
¿Hay algún método para monitorear la carga de escritura? Solo he encontrado lo db.serverStatus().writeBacksQueued
que siempre se establece en falso cuando lo llamo. ¿Cómo podría probar cuántos datos tengo que insertar para completar la cola de escritura?
mongostat
muestra cerraduras. ¿Es algo por lo que debería preocuparme?
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
¿Tengo que preocuparme por los bloqueos de escritura? ¿Qué le sucede a una inserción durante un período de tiempo de escritura bloqueado? ¿Está en cola y almacenado más adelante?
Estoy pensando en una configuración de replicación simple usando un maestro y un esclavo. ¿La sincronización inicial o un proceso de resincronización bloquean las bases de datos?
(Estoy usando la versión 2.4.3.)
Actualización: creo que he respondido en parte a mi propia pregunta. Logré obtener hasta 12,000 inserciones por segundo usando un ciclo simple mientras insertaba un pequeño documento de prueba. Pero qr | qw todavía muestra que existen las colas de lectura y escritura que todavía están vacías:
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
Supongo que esto significa que las inserciones por sí solas no causarán muchos problemas: "Las colas tenderán a aumentar si está realizando muchas operaciones de escritura junto con otras operaciones pesadas de escritura, como las eliminaciones de gran alcance". (encontrado aquí )
Mi pregunta abierta: ¿Qué sucede con mis datos si la cola de escritura aumenta a largo plazo?