Кассандра: список 10 самых последних измененных записей

У меня возникают проблемы при попытке смоделировать мои данные так, чтобы я мог эффективно запросить у Cassandra последние 10 (на самом деле, любое количество) записей, которые были недавно изменены. Каждая запись имеет столбец last_modified_date, который устанавливается приложением при вставке / обновлении записи.

Я исключил столбцы данных из этого примера кода.

Основная таблица данных (содержит только одну строку на запись):

CREATE TABLE record (
    record_id int,
    last_modified_by text,
    last_modified_date timestamp,
    PRIMARY KEY (record_id)
);
Решение 1 (Ошибка)

Я попытался создать отдельную таблицу, в которой использовался порядок ключей кластеризации.

Таблица (одна строка для каждой записи; вставляется только дата последнего изменения):

CREATE TABLE record_by_last_modified_index (
    record_id int,
    last_modified_by text,
    last_modified_date timestamp,
    PRIMARY KEY (record_id, last_modified_date)
) WITH CLUSTERING ORDER BY (last_modified_date DESC);

Запрос:

SELECT * FROM record_by_last_modified_index LIMIT 10

Это решение не работает, поскольку порядок кластеризации применяется только к порядку записей с одним и тем же ключом разделения. Поскольку каждая строка имеет свой ключ разделения (record_id), результаты запроса не включают ожидаемые записи.

Решение 2 (Неэффективно)

Другое решение, которое я попробовал, - просто запросить у Cassandra все значения record_id и last_modified_date, отсортировать их и выбрать первые 10 записей в моем приложении. Это явно неэффективно и плохо масштабируется.

Решение 3

Последнее решение, которое я рассмотрел, - это использование одного и того же ключа разделения для всех записей и порядок кластеризации для обеспечения правильной сортировки записей. Проблема с этим решением состоит в том, что данные не будут правильно распределены по узлам, поскольку все записи будут иметь одинаковый ключ разделения. Это кажется не стартером для меня.

Ответы на вопрос(3)

Ваш ответ на вопрос