• PHP gt.m При подключении GT.M через pipe к PHP удалось получить 51 398 вставок в секунду.
    Глобалы при этом предварительно обнулялись.
    Всего вставок делалось 1 000 000.

    Типа:
    Set ^a(5)=5

    При оформлении того же как процедуры — 41 182 вставок в секунду.
    Do test^speed(5,5)

    Что неудивительно, учитывая затраты на вызов.

    Потом я протестировал скорость полученного интерфейса с GT.M. При подачи перевода строки (минимальная команда) смог получить 118 722 операций/сек. Результат можно было улучшить, если делать обвязку из СИ-функций к GT.M.
    $sM = '';

    Если использовать примитивную операцию, которая требует небольшого парсинга со стороны GT.M и операции конкатенации + преобразования типов от PHP, то число операций уменьшается до 58 554/сек.
    $sM = 'Set a='.$i;

    Доля снижения из-за PHP вычисляем так 118 722 — 112 764 = 5958. Округлённо 6 000.

    Итого: небольшой парсинг со стороны GT.M уменьшает доступную скорость со 118 722 операций/сек до 66 126 операций/секунду, т.е. в 1.8 раза.

    Однако GT.M позволяет использовать несколько команд в одной строке.
    При 2-х командах скорость: 78 259 вставок/секунду.
    При 3-х: 106 643 вставок/секунду.
    ....
    При 10-ти: 183 992 вставок/секунду.
    ...
    При 20-ти: 201 288 вставок/секунду.

    Усложняется парсинг каждой строки в GT.M и cоздание новых строк в PHP. Для упрощения парсинга уже имеет смысл использовать MUMPS-процедуры.

    При использовании процедуры с 20 параметрами скорость составила 299 222 вставок/секунду.

    Для сравнения я решил сравнить скорость одиночных вставок с MySql.
    Create table ta (i BIGINT NOT NULL PRIMARY KEY, v BIGINT NOT NULL);

    Для чистоты эксперимента вставлял по одной записи, сделал 1 индекс как в GT.M, подобрал похожие типы данных. MySql 5.5.
    Скорость: 2602 инсертов в секунду.

    При вставке сложным инсертом, когда в одном запросе вставлялось 20 строк, была получена цифра 4638 строк/секунду.

    А теперь скорость чтения по ключу для 1000000 значений:

    Для GT.M получил 57 320 выборок в секунду.
    Использовалась команда:
    Write ^i(i)

    Для MySql 18 468 выборок в секунду.
    Запрос:
    Select v FROM ta WHERE i=число

    ВЫВОДЫ: Несмотря на неоптимальный интерфейс для доступа к GT.M на вставке одиночных индексированных значений он быстрее в 19.7 раза. А при чтении быстрее 3.1 раза.

    При использовании 20 команд в одной строке для GT.M скорость вставки увеличилась в 5.8 раз. При похожей технике для MySql скорость вставок возросла в 1.78 раза. При массовом посыле команд на вставку GT.M быстрее в 64.5 раза.

    Теоретическая скорость интерфейса с GT.M составляет 118 722 операций/сек, однако уже при небольшом парсинге со стороны GT.M цифра составит 58 554 операций/сек.

    КПД использования интерфейса у GT.M при вставке одиночными командами = 51 398/58 554 ~= 88%

    P.S. Для доступа к MySQL из PHP использовалась библиотека ADOdb, что, наверное, на несколько процентов снижало результаты по MySql.

Replies (0)