Ява - Кассандра с множеством параметров в "IN" - PullRequest
0 голосов
/ 19 декабря 2018

Я пишу Java-приложение с Cassandra DB.Я делаю запрос с большим количеством (более 100 000) параметров в моем предложении 'IN':

SELECT country, gender FROM persons WHERE person_id IN (1,7,18, 34,...,)

Но я думаю, что помещение многих параметров в IN выглядит плохо.

Я также могу сделать много запросов, как это (еще раз более 100 000 итераций):

for (Integer id : ids) {
    ResultSet res = session.execute(preparedStatement(id));
    //processing with data from Cassandra
}

тоже не лучше, слишком долго.

Есть ли API, шаблон для подражанияв моем случае?

Спасибо

1 Ответ

0 голосов
/ 20 декабря 2018

Если person_id является ключом раздела (как видно из запроса), то использование IN приведет к большому количеству проблем, поскольку перегрузит узел-координатор, который должен будет собирать результаты с других узлов.

В этом случае наиболее эффективный способ - запускать отдельные запросы, но выполнять их через executeAsync, чтобы они отправлялись на разные узлы.В этом случае вам нужно будет контролировать количество отправленных вами запросов, например, путем подсчета семафоров, плюс вам может потребоваться время для параметров пула соединений, которые контролируют количество запросов в полете: https://docs.datastax.com/en/developer/java-driver/3.6/manual/pooling/

...