Получить уже подготовленное заявление от Кассандры

Я не совсем уверен, что правильно понимаю концепции подготовленных операторов, но в соответствии с документация драйвера python подготовленный оператор — "A statement that has been prepared against at least one Cassandra node". Для меня это означает, что где-то в кластере есть информация о том, какие запросы уже подготовлены. query.PreparedStatement" rel="nofollow">документация также утверждает, что "A PreparedStatement should be prepared only once. Re-preparing a statement may affect performance (as the operation requires a network roundtrip).".

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

(1) Я говорю не об объеме одного экземпляра программы, а о нескольких экземплярах без общей памяти, выполняющих одни и те же запросы.


person causa prima    schedule 09.10.2014    source источник


Ответы (1)


Вы правы: каждый узел в кластере кэширует подготовленные операторы. Однако в клиенте нет механизма получения уже подготовленных операторов. Этому есть ряд причин, которые я не буду здесь описывать.

Ваше приложение подготавливает заявление один раз и сохраняет его в течение всего времени существования кластера/сеанса. Драйверы обрабатывают такие вещи, как подготовка оператора на всех узлах и повторная подготовка на узлах, которые теряют их из-за вытеснения кэша или перезапуска.

person Adam Holmberg    schedule 09.10.2014
comment
Я так и думал, но спасибо за подтверждение. Знаете ли вы, действительно ли cassandra подготавливает оператор снова или просто игнорирует попытку, но возвращает допустимый объект подготовленного оператора? Это было бы поведение, которое я ожидал бы, если бы кеш для подготовленных операторов оставался минимальным. - person causa prima; 10.10.2014