#select #cassandra #cql #cql3 #cassandra-2.0
#выберите #кассандра #cql #cql3 #кассандра-2.0
Вопрос:
SELECT
Оператор Cassandra CQL3 позволяет использовать IN
кортежи, подобные
SELECT * FROM posts
WHERE userid='john doe' AND (blog_title, posted_at)
IN (('John''s Blog', '2012-01-01), ('Extreme Chess', '2014-06-01'))
как видно из спецификации CQ3: http://cassandra.apache.org/doc/cql3/CQL.html#selectStmt
Существует ли ограничение на количество кортежей, которые можно использовать в предложении SELECT IN? Каков максимальный?
Ответ №1:
Ребекка Миллс из DataStax предоставляет определенное ограничение на количество ключей, разрешенных в IN
инструкции (что вы должны делать при использовании драйверов Cassandra — пункт № 22):
… в частности, ограничение на количество ключей в операторе IN, максимум, который вы можете иметь, — это 65535. Но, практически говоря, вы должны использовать только небольшое количество ключей в INS, только по соображениям производительности.
Я предполагаю, что ограничение также будет применяться к количеству кортежей, которые вы также можете указать. Честно говоря, я бы не стал пытаться дополнить это. Если вы отправите ему большое число, оно вообще не будет работать хорошо. Документация CQL по ПРЕДЛОЖЕНИЮ SELECT предупреждает пользователей об этом:
Когда не использовать В
Рекомендации о том, когда не следует использовать индекс, применяются к использованию IN в предложении WHERE . В большинстве случаев использование IN в предложении WHERE не рекомендуется. Использование IN может снизить производительность, потому что обычно требуется запрашивать много узлов. Например, в одном локальном кластере центра обработки данных с 30 узлами, коэффициентом репликации 3 и уровнем согласованности LOCAL_QUORUM запрос с одним ключом отправляется двум узлам, но если в запросе используется условие IN , количество запрашиваемых узлов, скорее всего, еще больше, додо 20 узлов в зависимости от того, где ключи попадают в диапазон токенов.
Достаточно сказать, что, хотя максимальное количество кортежей, которые вы можете передать, является вопросом математики, количество кортежей, которые вы должны передать, будет зависеть от конфигурации вашего кластера, реализации JVM и немного здравого смысла.