KDB: параллельная вставка в таблицу - PullRequest
0 голосов
/ 26 ноября 2018

Я создал многопоточные соединения из Java в KDB, а затем вставил записи в одну таблицу одновременно.

Но кажется, что сумма отдельной продолжительности и общей продолжительности почти такая же, как если быодновременная вставка не произошла.

Вы знаете, поддерживает ли KDB параллельную вставку?Если да, есть ли настройка, которую я должен сделать?Имеет ли он блокировку на уровне записи или на уровне таблицы?

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018

Процесс KDB в целом является однопоточным процессом (кроме случаев, когда он работает в режиме нескольких подчиненных потоков / процессов) https://code.kx.com/q/ref/cmdline/#-s-slaves

Хотя у вас есть несколько потоков Java, записывающих данные в процесс q, данныезаписываться в KDB последовательно, следовательно, это не дает никакого выигрыша в производительности.из-за этого

не требуется блокировка на уровне таблицы / строки, хотя я бы порекомендовал потоковую передачу данных в асинхронном режиме (отрицательный дескриптор), это позволит вашим потокам Java быстрее приходить, а не ждать, пока KDBзавершите операцию, это определенно улучшит производительность на стороне записи.

При использовании режима параллельной обработки (подчиненные потоки - положительное число) подчиненным потокам не разрешается запись в глобальные таблицы / переменные;вам нужно будет использовать многопроцессный режим для достижения этого (отрицательное число при запуске процесса q)

0 голосов
/ 26 ноября 2018

kdb не поддерживает параллельные вставки в таблицы в памяти.Фактически обновления данных в памяти могут быть сделаны только из основного потока q.Это означает, что таблицы «заблокированы» (не могут быть изменены) по существу для всех клиентов, если сервер aq запущен с отрицательным портом, и проблема не имеет значения, если сеанс q находится в однопоточном режиме (так как большинство сеансов, как правило,).Ситуация немного отличается для таблиц, хранящихся на диске (я могу расширить это позже, если потребуется).

Чтобы ускорить вставку, я бы посоветовал взглянуть на следующее:

a)Являются ли вставки пакетными, а не серией одиночных вставок?Одна вставка из 1 тыс. Строк займет гораздо меньше времени, чем 1 тыс. Вставок из одной строки.

б) Передаются ли вставки асинхронно или синхронно?Переключение между этими двумя может ускорить скорость вставки, но за счет знания, правильно ли вставлены вставки.

Можете ли вы рассказать больше о вашем сценарии использования?Ваш Java-клиент отправляет рыночные данные?если это так, будет ли установка стиля TP более подходящей?См. Kdb + tick и его производные, такие как TorQ (обратите внимание, что TorQ разработан моим работодателем).

...