← All posts tagged gt.m

kamenev
MUMPS gt.m mupip GDE Смена типа доступа (буферами управляет GT.M)
mupip set -A=BG -REGION DEFAULT

MM — операционная система

Посмотреть Global Directory:

mumps -direct
потом
do ^GDE
потом
show
выход
exit
kamenev
Kernel NoSQL gt.m perfomance Суть всех настроек, чтобы на время теста максимально задействовать буфера и избегать записи.
В нормальной жизни такие настройки лучше не использовать

# Когда область грязных страниц заполнится на этот процент начать сброс буферов
vm.dirty_background_ratio = 50
# Такой процент системной памяти может быть использован под грязные страницы
vm.dirty_ratio = 80
# После данного времени, в сотых секунды осуществляется сброс на диск. По умолчанию 3000.
vm.dirty_expire_centisecs = 360000

Источники:
docs.neo4j.org
kernel.org
kamenev
m MUMPS gt.m А теперь мне захотелось понять скорость вставки на чистом MUMPS. Будем запускать скомпилированную процедуру.

На вставке миллиона значений MUMPS рвёт всех.
Вставка 778 361 вставок/секунду.

Вставим 300 миллионов значений.
422 141 вставок/секунду. Тоже супер.
kamenev
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.
kamenev
gt.m Устанавливаем буфера на 2.8Гб
mupip SET -FILE mumps.dat -GLOBAL_BUFFERS=700000 -FLUSH_TIME=3000

А вот так устанавливаем для файла способ доступа с кешированием от операционной системы
mupip SET -FILE mumps.dat -ACCESS_METHOD=MM
kamenev
PHP MUMPS gt.m Сравнивал быстродействие в консоли.
GT.M быстрее на 10%, чем PHP. Что, в принципе, не существенно.

Тест, конечно, сильно примитивный:

MUMPS
test
for i=1:1:100000000 Set n=i
quit

PHP
for ($i=1; $i <= 100000000; $i++) $n = $i;
die();