Как выбрать несколько записей из каждого совпадения в одном запросе в cassandra?

У меня есть таблица testtable Cassandra с первичным ключом (partitionkey, cl1, cl2). Теперь мне нужно запросить данные для раздела p1, где cl1 в (a1, a2, a3, a4, a5, a6, a7).

select * from testtable where partitionkey=p1 and cl1 
   in (a1, a2, a3, a4, a5, a6, a7) limit 10000;

Есть ли способ указать, что запрос возвращает максимум 100 записей, соответствующих каждому cl1, т.е. максимум 100 записей, которые соответствуют a1, максимум 100 записей, которые соответствуют a2 и т. д. Я не хочу запускать для этого несколько запросов.

I don't want to fire multiple queries for that. - почему бы и нет? executeAsync и собрать результат всех из них, может быть даже быстрее.
Chris Lohfink 26.10.2018 18:12

@ChrisLohfink executeAsync также потребует запуска нескольких запросов. В приведенном мной примере было всего 7 ключей для предложения in. Но на самом деле таких ключей для моих вариантов использования может быть более 5000, и, следовательно, для этого потребуется 5000+ запросов, запускаемых асинхронно.

Nipun Talukdar 27.10.2018 03:58

в конечном итоге под покровом, который превратится в 5000+ запросов, это делает только координатор, что создает дополнительную нагрузку на него. Если вы это сделаете, он будет лучше распределять нагрузку, особенно с учетом токенов. Если вы сделаете один запрос с 5000 разделами, он не сработает.

Chris Lohfink 27.10.2018 04:11

@ChrisLohfink Мы запрашиваем один раздел за раз. Кроме того, запуск 5000+ запросов по отдельности также повлияет из-за задержек в сети. Я предполагаю, что это похоже на случай пакетных обновлений в разделе по сравнению с отдельными обновлениями для каждой строки или обновлениями меньшими партиями.

Nipun Talukdar 27.10.2018 06:13

Да, внутри одного раздела неплохо (пропустил). Нет никакого способа сделать это существующим, вам нужно делать разные запросы с лимитом 100. Вы можете создать JIRA, чтобы добавить эту функциональность, если вы заинтересованы в том, чтобы дать ей шанс, в GroupByAwareCounter он может увеличивать счетчик, сбрасывая isNewGroup и останавливаясь после достижения лимита. Его также довольно легко изменить, чтобы включить PER GROUP LIMIT так же, как PER PARTITION LIMIT в грамматику cql, но есть некоторые проблемы с подключением к состоянию подкачки. тогда может GROUP BY p1, cl PER GROUP LIMIT 100

Chris Lohfink 27.10.2018 07:01

@ChrisLohfink Спасибо за предложения, сделаю это.

Nipun Talukdar 27.10.2018 07:07
0
6
50
0

Другие вопросы по теме