Tôi sử dụng MongoDB để lưu trữ các giá trị đo định kỳ. Mỗi ~ 100 ms một loạt các giá trị được chèn dưới dạng tài liệu. Nó hoạt động tốt, nhưng tôi lo lắng về các vấn đề hiệu suất. (Tôi sử dụng các chèn an toàn, có vẻ như trong PyMongo, đây là mặc định.)
Điều gì xảy ra nếu có nhiều chèn mỗi giây hơn mongod có thể lưu vào đĩa cứng? Sẽ có bất kỳ cảnh báo hay đơn giản là nó sẽ thất bại trong âm thầm?
Có phương pháp nào để theo dõi tải ghi không? Tôi chỉ tìm thấy db.serverStatus().writeBacksQueued
cái luôn được đặt thành false khi tôi gọi nó. Làm thế nào tôi có thể kiểm tra bao nhiêu dữ liệu tôi phải chèn để điền vào hàng đợi ghi?
mongostat
hiển thị ổ khóa. Đây có phải là điều tôi nên lo lắng?
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
Tôi có phải lo lắng về khóa viết không? Điều gì xảy ra với một chèn trong khoảng thời gian ghi bị khóa? Có phải nó được xếp hàng và lưu trữ sau này không?
Tôi đang suy nghĩ về một thiết lập sao chép đơn giản bằng cách sử dụng một chủ và một nô lệ. Đồng bộ hóa ban đầu hoặc quá trình đồng bộ hóa có khóa cơ sở dữ liệu không?
(Tôi đang sử dụng phiên bản 2.4.3.)
Cập nhật: Tôi nghĩ rằng đã phần nào trả lời câu hỏi của riêng tôi. Tôi đã quản lý để có được tới 12.000 lần chèn mỗi giây bằng cách sử dụng một vòng lặp đơn giản trong khi chèn một tài liệu thử nghiệm nhỏ. Nhưng qr | qw vẫn cho thấy rằng có hàng đợi đọc và ghi vẫn trống:
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
Tôi cho rằng điều này có nghĩa là việc chèn một mình sẽ không gây ra nhiều rắc rối: "Hàng đợi sẽ có xu hướng tăng đột biến nếu bạn thực hiện nhiều thao tác ghi cùng với các thao tác ghi nặng khác, chẳng hạn như xóa khoảng cách lớn." (tìm thấy ở đây ]
Câu hỏi mở của tôi: Điều gì xảy ra với dữ liệu của tôi nếu hàng đợi ghi tăng lên trong dài hạn?