Я хочу вернуть первые N строк из фильтрации базы данных Cassandra по некоторому критерию, где фильтрация выполняется по обычным (не кластеризованным) столбцам.
Давайте предположим простую таблицукак это:
CREATE TABLE test(
id UUID,
timestamp TIMESTAMP,
value DOUBLE,
PRIMARY KEY ((id), timestamp)
) WITH CLUSTERING ORDER BY (timestamp ASC)
Опция 1
SELECT timestamp, value FROM test WHERE id=? AND value<? LIMIT ? ALLOW FILTERING
Это разрешено, но, как правило, ALLOW FILTERING
следует избегать.Сказав это, действительно ли так плохо, если запрос касается только одного раздела?
Вариант 2 Установить очень маленький размер подкачки, например, N * 10 (скажем), а затем:
SELECT timestamp, value FROM test WHERE id=?
Читайте результаты по странице за раз и прекращайте чтение, как только будет прочитано достаточно подходящих строк.Есть ли какие-либо расходы, связанные со страницами, которые еще не были получены?Если нет, я бы догадался, что это явный победитель.
Опция 3 Пейджинг по умолчанию, ОГРАНИЧИТЬ количество результатов до N * 10, выполнить новый запрос, если вернулось недостаточно подходящих строк:
SELECT timestamp, value FROM test WHERE id=? AND timestamp>? LIMIT ?
Если в результатах недостаточно подходящих строк, введите новый запрос сразу после последнего результата предыдущего запроса timestamp
.
Я хотел бы знать, что можетбудь лучшим вариантом.