Индексация и деградация производительности запросов в облаке griddb с высокой нагрузкой вставкиJAVA

Программисты JAVA общаются здесь
Anonymous
Индексация и деградация производительности запросов в облаке griddb с высокой нагрузкой вставки

Сообщение Anonymous »

Оператор задачи:
Я использую облако griddb для хранения данных временных рядов из нескольких устройств IoT. Система принимает около 5000 записей в секунду при выполнении частых запросов диапазона на метки времени. Однако, после того, как в течение некоторого времени работало плавно, запросы начинают резко замедлять - иногда требуется несколько секунд. Единственное временное исправление, которое я обнаружил, - это перезапуск griddb, но мне нужно постоянное решение.

Код: Выделить всё

// Define the container schema
ContainerInfo containerInfo = new ContainerInfo("sensor_data",
Arrays.asList(
new ColumnInfo("device_id", GSType.STRING),
new ColumnInfo("timestamp", GSType.TIMESTAMP),
new ColumnInfo("temperature", GSType.FLOAT),
new ColumnInfo("humidity", GSType.FLOAT)
),
ContainerType.TIME_SERIES
);

// Create the container (if it doesn't exist)
gridStore.putContainer(containerInfo);
< /code>
Проведение данных происходит на высокой скорости, используя пакетные вставки: < /p>
// Insert multiple records in a batch
TimeSeries ts = gridStore.getTimeSeries("sensor_data", containerInfo);
List batch = new ArrayList();

for (int i = 0; i < 5000; i++) {
Row row = ts.createRow();
row.setString(0, "device_123");
row.setTimestamp(1, new Date());
row.setFloat(2, 25.6f);
row.setFloat(3, 60.3f);
batch.add(row);
}

// Commit batch insert
ts.multiPut(batch);

Проблема с производительностью запроса
Я использую простые запросы диапазона на временных метках, но некоторые из них занимают секунды:

Код: Выделить всё

// Query temperature readings for the past hour
String query = "SELECT * FROM sensor_data WHERE timestamp BETWEEN TIMESTAMPADD(HOUR, -1, NOW()) AND NOW()";
Query gridQuery = ts.query(query);
QueryResults results = gridQuery.fetch();
< /code>
[b] странные наблюдения: < /strong> < /p>
[list]
[*] Сначала запросы возвращаются приводит к миллисекундам. Вместо этого сканировать.containerInfo.setIndex("timestamp", IndexType.DEFAULT);
Tested with different query variations (same problem)
[*]Checked system logs - no warnings or errors
[*]Tried partitioning by device_id - no effect
[/list]
Questions:[/b]
  • Почему облако griddb иногда игнорирует индекс и выполняет полное сканирование? Запрос рабочие нагрузки?


Подробнее здесь: https://stackoverflow.com/questions/795 ... nsert-load

Вернуться в «JAVA»