Можно ли выполнять асинхронные вызовы хранимых процедур в VoltDB с помощью клиента Python

Можно ли выполнять асинхронные вызовы хранимой процедуры в VoltDB (вставка в пользовательскую хранимую процедуру Java) с помощью клиента Python?

Похоже, что это не поддерживается, но есть ли способ не ждать ответа, или мне придется перейти на Java-клиент для поддержки асинхронности?


person StevieB    schedule 19.11.2018    source источник


Ответы (2)


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

Клиенты Java, C++ и Go поддерживают асинхронные вызовы.

Если вы в основном пытаетесь делать быстрые вставки, вы можете использовать csvloader, и вы, вероятно, можете выполнить csvloader из приложения Python, но это, вероятно, не то, что вы хотите сделать.

Раскрытие информации: я работаю в VoltDB.

person BenjaminBallard    schedule 19.11.2018
comment
Спасибо за ответ. Я пробовал многопоточное приложение Python с 50-100 потоками, и, похоже, оно работает, но я еще не закончил тестирование! Мы стремимся свести к минимуму задержку при вставке. Будет ли загрузчик csv увеличивать задержку при работе в пакетном режиме? Похоже, нужно будет перейти к одному из других клиентов. - person StevieB; 20.11.2018
comment
Для одного и того же запроса задержка должна быть одинаковой независимо от того, какой клиент используется. Но асинхронные запросы позволяют отправлять много запросов одновременно, поэтому пропускная способность не зависит от задержки. Многопоточный клиент, отправляющий синхронные запросы, также может достичь высокой пропускной способности, но может потребовать много потоков, чтобы достичь того же уровня, что и однопоточный клиент, отправляющий асинхронные запросы. - person BenjaminBallard; 20.11.2018
comment
CSVLoader, как правило, увеличивает задержку, потому что он будет отправлять в очереди запросы на вставку больших пакетов, а их обработка занимает больше времени, чем отдельные вставки. При желании вы можете вызвать процедуру из CSVLoader, используя параметр -p, который обычно немного снижает пропускную способность, но может иметь меньшее влияние на задержку. - person BenjaminBallard; 20.11.2018

Я столкнулся с той же проблемой при создании процесса Tornado, который также является клиентом VoltDB. Оказалось, что довольно просто разделить VoltProcedure.call() на две функции, причем вторая будет вызываться асинхронно с помощью ioloop Tornado при обнаружении ответа на сокете. Я также исправил ошибку в writeDate(). Посмотрите здесь: https://github.com/osullivj/voltdb-client-python

person osullivj    schedule 20.12.2018