Saya menggunakan MongoDB untuk menyimpan nilai yang diukur secara berkala. Setiap ~ 100 ms banyak nilai dimasukkan sebagai dokumen. Ini berfungsi dengan baik, tapi saya khawatir tentang masalah kinerja. (Saya menggunakan sisipan yang aman, sepertinya di PyMongo ini adalah default.)
Apa yang terjadi jika ada lebih banyak sisipan per detik dari yang dapat disimpan mongod ke hard disk? Apakah akan ada peringatan atau akan gagal secara diam-diam?
Apakah ada metode untuk memonitor beban tulis? Saya hanya menemukan db.serverStatus().writeBacksQueued
yang selalu disetel ke false ketika saya menyebutnya. Bagaimana saya bisa menguji berapa banyak data yang harus saya masukkan untuk mengisi antrian tulis?
mongostat
menampilkan kunci. Apakah ini sesuatu yang harus saya khawatirkan?
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
Apakah saya harus khawatir tentang kunci tulis? Apa yang terjadi pada sisipan selama periode waktu penulisan yang terkunci? Apakah itu antri dan disimpan nanti?
Saya berpikir tentang pengaturan replikasi sederhana menggunakan satu master dan satu slave. Apakah sinkronisasi awal atau proses sinkronisasi ulang mengunci basis data?
(Saya menggunakan versi 2.4.3.)
Pembaruan: Saya pikir sebagian sudah menjawab pertanyaan saya sendiri. Saya berhasil mendapatkan hingga 12.000 sisipan per detik menggunakan loop sederhana sambil memasukkan dokumen uji kecil. Tapi qr | qw masih menunjukkan bahwa ada antrian baca-dan tulis masih kosong:
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
Saya kira ini berarti bahwa menyisipkan saja tidak akan menyebabkan banyak masalah: "Antrian akan cenderung lonjakan jika Anda melakukan banyak operasi penulisan bersama operasi tulis berat lainnya, seperti pemindahan jarak jauh yang besar." (ditemukan di sini ]
Pertanyaan terbuka saya: Apa yang terjadi pada data saya jika antrian tulis meningkat dalam jangka panjang?