Как ускорить мой тест mongodb? - PullRequest
0 голосов
/ 08 марта 2012

Из моего теста я получаю около 500 вставок, 200 запросов, 400 обновлений в секунду. Интересно, что я могу настроить, чтобы увеличить эти цифры.

Я читал, что другие могут получить тысячи или даже десятки тысяч вставок в своих тестах, что намного лучше, чем мой тест. Интересно, мне не хватает чего-то простого?

Итак, вот факты:

  • Я использую win 32-bit mongodb v2.0.3 с конфигурацией по умолчанию
  • Драйвер Java (2.7.3) с пружинным монго, (я не форсирую fsync)
  • Выполнение комбинации вставки и атомарных обновлений, таких как push, pull, inc, dec, set,
  • И повторите все это 500k раз.
  • Цель состоит в том, чтобы смоделировать действия пользователя, такие как вставка и обновление
  • Конкретные индексы не определены, но я думаю, что по умолчанию всегда будет уникальный индекс для идентификатора?
  • Java-приложение, которое работает в Eclipse IDE, работает на той же машине, что и сервер mongod
  • Спецификация H / W: core i5, mem 4GB, край ThinkPad
  • Я заметил, что 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 ТБ fileSize? Что я могу сделать, чтобы помочь уменьшить размер моего файла?

Пожалуйста, поделитесь своими мыслями.

1 Ответ

2 голосов
/ 09 марта 2012

У вас, похоже, много ошибок на mongostat.Любая идея, почему?

Выполнение комбинации вставки и атомарных обновлений, таких как push, pull, inc, dec, set

Как вы выпускаете эти обновления?К _id?

я прочитал, что другие могут получить тысячи или даже десятки тысяч вставок в своих тестах, что намного лучше, чем мой тест.Интересно, если я что-то упустил?

Согласно mongostat у вас есть только 3 активных соединения, и ваш% блокировки составляет всего около 10%.

  • Вымногопоточность ваших входов?
  • Вы все это разрушаете на одном компьютере?
  • Как работает системный ввод-вывод?
  • Вы делаете WriteConcern.Safe?

Этиявляются ли все соображения, которые могут повлиять на вашу пропускную способность.

разумно ли иметь в этом случае около 1 ТБ fileSize?

Основываясь на db.stats(), вы толькоиспользуется около 600 МБ диска.

"storageSize" : 610770944 // = 610,770,944

Ваш средний размер объекта составляет 622 байта, но у вас есть 815 197 объектов, а не 90 000 документов, которые, как вы заявляете, имеют.

Что я могу сделать, чтобы помочь уменьшить размер моего файла?

Да, уменьшите размер ключей в ваших документах JSON.Например:

"something1" : "my class is cool !"  => ~28 bytes
"s1": "my class is cool !"           => ~20 bytes

Убедитесь, что вы правильно храните укороченные имена, и разрешите инфраструктуре доступа к данным сделать сопоставление их с более разумными именами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...