ฉันใช้ MongoDB เพื่อเก็บค่าที่วัดได้เป็นระยะ ทุก ๆ ค่าประมาณ 100 ms จะถูกแทรกเป็นเอกสาร มันใช้งานได้ดี แต่ฉันกังวลเกี่ยวกับปัญหาด้านประสิทธิภาพ (ฉันใช้ส่วนแทรกที่ปลอดภัยดูเหมือนว่าใน PyMongo นี่เป็นค่าเริ่มต้น)
จะเกิดอะไรขึ้นถ้ามีการแทรกต่อวินาทีมากกว่า mongod จะสามารถบันทึกลงฮาร์ดดิสก์ได้? จะมีการเตือนภัยหรือไม่หรือจะล้มเหลวอย่างเงียบ ๆ ?
มีวิธีใดบ้างในการตรวจสอบโหลดการเขียน? ฉันพบเฉพาะdb.serverStatus().writeBacksQueued
ซึ่งถูกตั้งค่าเป็นเท็จเสมอเมื่อฉันเรียกมันว่า ฉันจะทดสอบจำนวนข้อมูลที่ฉันต้องแทรกเพื่อเติมคิวการเขียนได้อย่างไร
mongostat
แสดงล็อค นี่เป็นสิ่งที่ฉันควรกังวลหรือไม่?
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
ฉันต้องกังวลเรื่องล็อคการเขียนหรือไม่? เกิดอะไรขึ้นกับการแทรกระหว่างช่วงเวลาล็อคการเขียน? มันอยู่ในคิวและจัดเก็บในภายหลังหรือไม่
ฉันกำลังคิดเกี่ยวกับการตั้งค่าการจำลองแบบง่าย ๆ โดยใช้เจ้านายคนหนึ่งและทาสคนหนึ่ง การซิงค์เริ่มต้นหรือกระบวนการซิงค์ล็อคฐานข้อมูลหรือไม่
(ฉันใช้เวอร์ชั่น 2.4.3)
อัปเดต: ฉันคิดว่าได้ตอบคำถามของฉันเองบางส่วนแล้ว ฉันจัดการได้มากถึง 12.000 เม็ดต่อวินาทีโดยใช้แบบง่ายขณะที่วนซ้ำใส่เอกสารทดสอบขนาดเล็ก แต่ qr | qw ยังคงแสดงให้เห็นว่ามีคิวการอ่านและเขียนยังคงว่างเปล่า:
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
ฉันคิดว่านี่หมายความว่าการแทรกเพียงอย่างเดียวจะไม่ก่อให้เกิดปัญหามากมาย: "คิวจะมีแนวโน้มที่จะขัดขวางหากคุณกำลังดำเนินการเขียนจำนวนมากควบคู่ไปกับการเขียนอย่างหนักอื่น ๆ เช่นการเอาออกจำนวนมาก" (พบที่นี่ ]
คำถามเปิดของฉัน:จะเกิดอะไรขึ้นกับข้อมูลของฉันหากคิวการเขียนเพิ่มขึ้นในระยะยาว