Я використовую MongoDB для зберігання періодично виміряних значень. Кожні ~ 100 мс в якості документа вставляється купа значень. Це добре працює, але я переживаю за проблеми з продуктивністю. (Я використовую безпечні вставки, здається, що в 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
Я вважаю, що це означає, що окремі вставки не спричинять багато клопотів: "Черги, як правило, шиплять, якщо ви робите багато операцій з записом поряд з іншими великими операційними записами, такими як видалення великих значень". (знайдено тут ]
Моє відкрите запитання: Що станеться з моїми даними, якщо черга запису збільшується на тривалий термін?