Я разрабатываю приложение Java с Cassandra с моей таблицей:
id | registration | name
1 1 xxx
1 2 xxx
1 3 xxx
2 1 xxx
2 2 xxx
... ... ...
... ... ...
100,000 34 xxx
В моих таблицах очень большое количество строк (более 50 000 000).У меня есть myListIds
из String id
для повторения.Я мог бы использовать:
SELECT * FROM table WHERE id IN (1,7,18, 34,...,)
//image more than 10,000,000 numbers in 'IN'
Но это плохой шаблон.Поэтому вместо этого я использую асинхронный запрос следующим образом:
List<ResultSetFuture> futures = new ArrayList<>();
Map<String, ResultSetFuture> map = new HashMap<>();
// map : key = id & value = data from Cassandra
for (String id : myListIds)
{
ResultSetFuture resultSetFuture = session.executeAsync(statement.bind(id));
mapFutures.put(id, resultSetFuture);
}
Затем я обработаю свои данные методом getUninterruptibly()
.
Вот мои проблемы: я делаю, возможно, больше, чем10 000 000 запросов Касандры (один запрос для каждого идентификатора).И я помещаю все эти результаты в карту.
Может ли это вызвать ошибку кучи памяти?Какой лучший способ справиться с этим?
Спасибо