Używam MongoDB do przechowywania okresowo zmierzonych wartości. Co ~ 100 ms wiązka wartości jest wstawiana jako dokument. Działa dobrze, ale martwię się o problemy z wydajnością. (Używam bezpiecznych wstawek, wygląda na to, że w PyMongo jest to ustawienie domyślne).
Co się stanie, jeśli będzie więcej wkładek na sekundę niż mongod jest w stanie zapisać na dysku twardym? Czy będzie jakieś ostrzeżenie, czy po prostu po cichu zawiedzie?
Czy istnieje metoda monitorowania obciążenia zapisu? Znalazłem tylko db.serverStatus().writeBacksQueued
to, co zawsze ma wartość false, gdy go nazywam. Jak mogę sprawdzić, ile danych muszę wstawić, aby wypełnić kolejkę zapisu?
mongostat
wyświetla zamki. Czy powinienem się tym martwić?
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
Czy muszę się martwić blokadami zapisu? Co dzieje się z wkładką w okresie blokowania zapisu? Czy jest w kolejce i jest przechowywany później?
Mam na myśli prostą konfigurację replikacji przy użyciu jednego urządzenia nadrzędnego i jednego urządzenia podrzędnego. Czy początkowa synchronizacja lub proces ponownej synchronizacji blokuje bazy danych?
(Używam wersji 2.4.3.)
Aktualizacja: Myślę, że częściowo odpowiedziałem na własne pytanie. Udało mi się uzyskać do 12.000 wstawek na sekundę przy użyciu prostej pętli while podczas wstawiania małego dokumentu testowego. Ale qr | qw nadal pokazuje, że kolejka odczytu i zapisu jest nadal pusta:
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
Podejrzewam, że oznacza to, że same wstawki nie spowodują wielu problemów: „Kolejki będą miały tendencję do gwałtownego wzrostu, jeśli wykonujesz wiele operacji zapisu wraz z innymi ciężkimi operacjami zapisu, takimi jak usuwanie dużych odległości”. (znaleziono tutaj ]
Moje otwarte pytanie: co stanie się z moimi danymi, jeśli kolejka zapisu wzrośnie w dłuższej perspektywie?