Текущее и управление

Есть у меня друг. С ним мы много раз говорили об управлении предприятиями и каждый раз наш разговор наталкивался на рифы противоположных аксиом, на которые каждый из нас опирается в ходе своих размышлений. Он считает, что управление — суть гуманитарная задача, которую может решить только человек. Человеку нужен человек. Человек всегда будет хотеть говорить с человеком.

Я же считаю, что управление (по большей части) задача технологическая и ее можно и нужно формализовать в наборы алгоритмов. Конечно в компании есть, будут и должны быть поэты, романтики и мастера своего дела, которые применяют нестандартные таланты управленцев, экономистов, инженеров и переговорщиков, но их творческое начало должно приводить в движение и создавать наборы алгоритмов. Таких людей не бывает много. Именно такие алмазы и определяют индивидуальное лицо предприятия. Значит надо максимизировать творческое начало художников бизнеса дав им необходимый набор инструментов. Очень часто в компании весьма много сотру…

Сравнение 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 иногда поглядывая на новомодные штуки.

Популярные сообщения из этого блога

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

Если лампы зажигают, значит это кому-то нужно.

Слово о сложности

Опять про QTcpSocket и disconnected