Существует ли какое-либо ограничение на количество кортежей в CQL3 SELECT…В предложении?

#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 и немного здравого смысла.