Код: Выделить всё
com.datastax.oss
java-driver-core
4.17.0
Первичный ключ таблицы 4 — (id, store)
store — это кластеризация key и id — ключ раздела.
Из таблицы 3 получена группа хранилищ.
Детали сеанса Cassandra для 4-го кластера — < /p>
Код: Выделить всё
DriverConfigLoader.programmaticBuilder()
.withLong(DefaultDriverOption.REQUEST_PAGE_SIZE, 1000)
.withLong(DefaultDriverOption.CONNECTION_POOL_LOCAL_SIZE, 4)
.withLong(DefaultDriverOption.CONNECTION_MAX_REQUESTS, 8192)
.withBoolean(DefaultDriverOption.SOCKET_KEEP_ALIVE, true)
.withBoolean(DefaultDriverOption.SOCKET_REUSE_ADDRESS, true)
.withBoolean(DefaultDriverOption.METADATA_SCHEMA_ENABLED, false)
.withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(30))
.withString(DefaultDriverOption.REQUEST_CONSISTENCY, DefaultConsistencyLevel.LOCAL_ONE.toString())
.build();
Код: Выделить всё
return cqlSession.executeAsync(ps.bind(id))
.thenCompose(rs -> {
Map finalMap = new HashMap();
return processRows(rs, finalMap, listedStores, limoEligStartTime);
})
.exceptionally(ex -> {
// do something, record metrics
return Collections.emptyMap();
` });
Код: Выделить всё
private CompletionStage processRows(AsyncResultSet rs, Map finalMap, Set thirdTableResult, long resultGetTime) {
METRICS.recordExecutionTime("LimoEligibilityQueryTime", System.currentTimeMillis() - resultGetTime);
Iterable iterable = rs.currentPage();
for (Row row : iterable) {
try {
if (row != null) {
// do something
} else {
//record metrics for row not found
}
} catch (IOException ex) {
//record exception
}
}
if (rs.hasMorePages()) {
return rs.fetchNextPage()
.thenCompose(asyncRs -> processRows(rs, finalMap, thirdTableResult, limoEligRowsProcessingCompletionTime))
.exceptionally(ex -> {
// record exception
return Collections.emptyMap();
});
} else {
return CompletableFuture.completedFuture(finalMap);
}
}
Код: Выделить всё
Exception occurred in table future - java.util.concurrent.CompletionException: com.datastax.oss.driver.api.core.DriverTimeoutException: В таблице 4 я сталкиваюсь с проблемами с запросами.
Может ли быть возможно, что Возможно, истекло время ожидания драйвера, поскольку запрос к двум разным кластерам выполняется одновременно?
Попробовал следующее, но ничего не помогло
Настроить размер страницы — со 100 до 1000
Увеличить количество соединений на хост — 4
Максимальный запрос на соединение — от 2048 до 8192
Когда я использую выборку одной строки из таблицы 4, используя результаты таблицы 3 (из В таблице 3 получена куча хранилищ), запрос работает совершенно нормально, и я не получаю никаких исключений, но это увеличивает пропускную способность чтения в кластере cassandra (а это не то, что нам нужно)
Подробнее здесь: https://stackoverflow.com/questions/788 ... pagination
Мобильная версия