Добрый день.
Пытаюсь оптимизировать последовательное чтение данных из кластера.
Имеем вот такой ddl:
CREATE KEYSPACE storage WITH REPLICATION = {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'hetzner': '3'} CREATE TABLE orderbook ( exchange text, instrument text, operatedate date, instant time, complete boolean, sizepricemap map<decimal, decimal>, PRIMARY KEY ((exchange, instrument, operatedate), instant) )
партишены получаются от 2 до 900 Мб. С записью всё шикарно 5 нод в дц отрабатывают отлично на запись с consistency_level: TWO.
А вот при последовательном чтении утыкаюсь в проблемы.
Пытаюсь через project-reactor + reactive JPA читать данные последовательно за несколько месяцев опираясь на operatedate и instant.
Запросы получаются примерно такие:
SELECT * FROM orderbook WHERE exchange=? AND instrument=? AND operatedate=? AND instant>=82800000000000 AND instant<=83700000000000;
Читаем с ConsistencyLevel.LOCAL_ONE.
Приложение крутиться на соседней ноде в том же дц.
При этом SlowQuery log регулярно сообщает вот такое:
QueryLogger.SLOW : [cluster1] [/10.0.0.4:9042] Query too slow, took 6846 ms: SELECT * FROM orderbookevent WHERE exchange=? AND instrument=? AND operatedate=? AND instant>=82800000000000 AND instant<=83700000000000; ['bitmex', 'XBTUSD', '2020-05-31']
Подскажите как такие ситуации можно оптимизировать?
Может быть есть возможность посмотреть некоторый ExecutionPlan?
который даст инсайты о том почему мы так долго выбираем эти данные.