Сравнение WiredTiger c Postgres (домашний тест)

Когда говорят интересно и показывают фигуры о прекрасном всегда хочется почесать затылок и понять что же есть на самом деле. Не скрою, я весьма воодушевился сообщением о выходе мотора баз данных WiredTiger. Он, как говорят, настолько хорош, что его взяли на вооружение в MongoDB.

Значит надо проверить.

Учинил простой тест. Создается таблица из двух полей. Ключ - строка, значение- строка. Ключ, понятное дело, primary key. Для поля "value" строится индекс. В варианте с Pg получается два индекса. (Как рулит первичным ключем  WT еще надо разбираться. Но фактически  WT создает только 2 файла а Pg 3(один с данными и 2 с индексами. Значит Pg будет оперировать собственно таблицей и двумя индексами, что всяко сложно)
Добавляемые строки - случайные UUID

В WT создание таблицы выглядит вот так.

ret = session->create(session, "table:access", key_format=S,value_format=S,columns=(key, value)");
ret = session->open_cursor(session, "table:access", NULL, NULL, &cursor);
session->create(session, "index:access:value", "columns=(value)");
Тест для Wt
QTime tm;
    tm.start();
    for(int i=0; i<1000000 font="" i="" nbsp="">{
        QByteArray keyarray=QUuid::createUuid().toString().remove('{').remove('}').toLocal8Bit();
        QByteArray valuearray=QUuid::createUuid().toString().remove('{').remove('}').toLocal8Bit();
        cursor->set_key(cursor, keyarray.data());
        cursor->set_value(cursor, valuearray.data());
        ret = cursor->insert(cursor);
   
    }
 

  qDebug()<<"Insert million of pairs"<

Тест для Pg
 for(int i=0; i<1000000 br="" i="" nbsp="">            Command.prepare("insert into test(id, value) values(:id, :value)");
            Command.bindValue(":id",    QUuid::createUuid().toString());
            Command.bindValue(":value", QUuid::createUuid().toString());
            Command.exec();
             }
WT использует отложенную модель записи, потому в PG отключим fsync.


Запускаем тест несколько раз и замерим время работы процедуры на пространстве возрастающих данны По итогу пяти прогонов для WiredTiger получил такие результаты в секундах
  1. 97    (Круто)
  2. 316  (Прилично)
  3. 743
  4. 1188
  5. 2193
Для Postgres получил
  1. 500
  2. 690
  3. 1000
  4. 1196
  5. 955
На пятом миллионе WT скис окончательно спустившись до 2193 секунд. При этом Postgres дает стабильные и прогнозируемые результаты.
Давайте не будем забывать, что WiredTiger это ядро, менеджер записей, а Postgres - полновесная база данных со всем набором вытекающих из этого сложностей.

Для очистки совести я добавил шестой миллион записей в Pg в одной транзакции. Получил результат 611.
Честно не очень понимаю что за фигуры показывают на презентации свидетели Wt и Mongo. 

Вывод. Конечно я не великий спец в тестировании и со своими драными лаптями зря полез в эту тему, но мне все же кажется, что лучшее - враг хорошего.потому, сижу спокойно на Postgresql иногда поглядывая на новомодные штуки.

Популярное

Надежды юношей питают.

К вопросу об организации оркестратора кластера в деле бесшовного ввода новых версий Kalpa-системы.