Как ускорить мой тест mongodb?
-
09-12-2019 - |
Вопрос
Из моего теста я получаю около 500 вставок, 200 запросов, 400 обновлений в секунду.Интересно, что я могу изменить, чтобы увеличить эти цифры.
Я читал, что другие могут добиться тысяч или даже десятков тысяч вставок в своих тестах, что намного лучше, чем в моем тесте.Интересно, не упускаю ли я чего-то основного?
Итак, вот факты :
- Я использую 32-разрядную версию mongodb версии win v2.0.3 с конфигурацией по умолчанию
- Драйвер Java (2.7.3) с spring mongo, (я не заставляю fsync)
- Выполнение комбинации вставки и атомарных обновлений, таких как push, pull, inc, dec, set,
- И повторите все это 500 тысяч раз.
- Цель состоит в том, чтобы имитировать действия пользователя, такие как вставка и обновления
- Никакие конкретные индексы не определены, но я думаю, что по умолчанию в идентификаторе всегда будет уникальный индекс?
- Java-приложение, которое работает в eclipse IDE, запущено на том же компьютере, что и сервер mongod
- Спецификация H/W :core i5, память 4 ГБ, thinkpad edge
- Я замечаю, что процесс java занимает около 280 МБ и стабилен в этом количестве в ходе цикла
Время начала составляет :2012-03-08 21:50:16
И я отслеживаю с помощью mongostat, и после достижения времени 22:05:10
, я прекращаю действие моей незаконченной заявки ..и вот последний вывод mongostat
insert query update delete getmore command flushes mapped vsize res faults locked % idx miss % qr|qw ar|aw netIn netOut conn time
499 200 400 0 0 100 0 1023m 1.06g 581m 145 8.5 0 0|0 0|0 645k 97k 3 22:05:01
503 201 403 0 0 102 0 1023m 1.06g 582m 154 10.7 0 0|0 0|1 651k 98k 3 22:05:02
520 208 415 0 0 105 0 1023m 1.06g 582m 176 11.1 0 0|0 0|0 671k 101k 3 22:05:03
504 202 403 0 0 102 0 1023m 1.06g 582m 167 7.2 0 0|0 0|0 651k 98k 3 22:05:04
524 209 419 0 0 106 0 1023m 1.06g 582m 147 8.3 0 0|0 0|0 675k 102k 3 22:05:05
534 213 428 0 0 107 0 1023m 1.06g 583m 176 7.4 0 0|0 0|0 690k 103k 3 22:05:06
531 213 424 0 0 108 0 1023m 1.06g 584m 160 4.9 0 0|0 0|0 685k 104k 3 22:05:07
533 213 427 0 0 107 0 1023m 1.06g 584m 164 6.9 0 0|0 0|0 689k 103k 3 22:05:08
518 208 414 0 0 105 0 1023m 1.06g 585m 158 7.3 0 0|0 0|0 669k 101k 3 22:05:09
521 208 417 0 0 105 0 1023m 1.06g 585m 154 4.7 0 0|0 0|0 673k 101k 3 22:05:10
А потом я проверил свой номер для вставки :
> db.myCollection.find().size();
90575
И это пример моего вставленного документа, который также обновляется и т.д. В процессе
> db.myCollection.findOne().pretty();
{
"_id" : "b146189a-56a4-4035-8245-c4bd6dc2bd22",
"something1" : "my class is cool !",
"something2" : {
"value" : "this is a statement blah blah",
"name" : "myStatement"
},
"something3" : {
"size" : {
"value" : 0,
"name" : "size"
},
"value" : [
"6810cb0c-fa3e-4ca9-8a27-8432f2d1e828",
"a8276d05-a796-4c43-bc74-edc06d074099"
],
"name" : "myids"
},
"something4" : {
"myattr" : {
"value" : "something",
"name" : "name"
},
"attr" : {
"content" : {
"value" : "another another body body content content",
"name" : "content"
},
"contentId" : "b146189a-56a4-4035-8245-c4bd6dc2bd22",
"name" : "something"
},
"subsubchildchild" : {
"size" : {
"value" : 0,
"name" : "size"
},
"value" : [ ],
"name" : "subBodies"
},
"myId" : "b146189a-56a4-4035-8245-c4bd6dc2bd22",
"name" : "hiccups"
},
"something5" : {
"value" : false,
"name" : "hahaha"
},
"something6" : {
"name" : "okay this is just a test"
},
"something7" : {
"value" : false,
"name" : "remove me !"
},
"something8" : {
"size" : {
"value" : 0,
"name" : "size"
},
"value" : [ ],
"name" : "guess what"
},
"something9" : {
"size" : {
"value" : 0,
"name" : "anotherSize"
},
"value" : [ ],
"name" : "tarantula"
},
"something10" : {
"value" : 8,
"name" : "my exam score"
},
"something11" : {
"size" : {
"value" : 0,
"name" : "justAnotherSize"
},
"value" : [ ],
"name" : "myReference"
},
"something12" : {
"size" : {
"value" : 0,
"name" : "size"
},
"value" : [ ],
"name" : "myOtherReference"
},
"something13" : {
"value" : "8b78fff0-50f5-4992-9972-89f9d944fee7",
"name" : "user"
},
"something14" : {
"dateTime" : "2012-03-08 21:50:17.480000000"
},
"something15" : {
"value" : false,
"name" : "lovely"
}
}
И вот моя статистика по базе данных :
> db.stats();
{
"db" : "qa",
"collections" : 7,
"objects" : 815197,
"avgObjSize" : 622.2093211824872,
"dataSize" : 507223172,
"storageSize" : 610770944,
"numExtents" : 57,
"indexes" : 5,
"indexSize" : 64197952,
"fileSize" : 1056702464,
"nsSizeMB" : 16,
"ok" : 1
}
Также еще один вопрос из любопытства ..судя по размеру моей основной коллекции, в которой около 90 тыс. записей, и другим несущественным коллекциям, которые не должны быть большими по размеру, разумно ли в этом случае иметь размер файла около 1 ТБ ?Могу ли я что-нибудь сделать, чтобы уменьшить размер моего файла?
Пожалуйста, поделитесь своими мыслями.
Решение
Похоже, у вас много ошибок в работе mongostat
.Есть идеи, почему?
Выполнение комбинации вставки и атомарных обновлений, таких как push, pull, inc, dec, set
Как вы выпускаете эти обновления?Автор: _id
?
Я читал, что другие могут добиться тысяч или даже десятков тысяч вставок в своих тестах, что намного лучше, чем в моем тесте.Интересно, не упускаю ли я чего-то основного?
Согласно mongostat
у вас активны только 3 соединения, а процент вашей блокировки составляет всего около 10%.
- Используете ли вы многопоточность своих входных данных?
- Вы разрушаете все это на одном компьютере?
- Как происходит системный ввод-вывод?
- Что ты делаешь
WriteConcern.Safe
?
Все это соображения, которые могут повлиять на вашу пропускную способность.
разумно ли в этом случае иметь размер файла около 1 ТБ?
Основывайтесь на своем db.stats()
, Таким образом, у вас используется всего около 600 МБАЙТ диска.
"storageSize" : 610770944 // = 610,770,944
Ваш средний размер объекта составляет 622 байта, но у вас есть 815 197 объектов, а не 90 тысяч документов, о наличии которых вы заявляете.
Могу ли я что-нибудь сделать, чтобы уменьшить размер моего файла?
Да, уменьшите размер ключей в ваших документах JSON.Например:
"something1" : "my class is cool !" => ~28 bytes
"s1": "my class is cool !" => ~20 bytes
Убедитесь, что вы правильно храните сокращенные имена, и позвольте вашей платформе доступа к данным отменить их сопоставление с более разумными именами.