Я начинаю с первоначальной идеи переписать приложение мамонта spark-kafka-hbase с помощью spark-kafka-cassandra (на kubernetes).
У меня есть следующие модели данных, одна из которых поддерживает вставки на все времена, а другаяподдерживается upserts
Подход 1:
создать таблицу test.inv_positions (
location_id int,
item bigint,
time_id timestamp,
sales_floor_qty int,
backroom_qty int,
in_backroom логический,
транзит_qty int,
первичный ключ ((location_id), item, time_id)) с порядком кластеризации по (item asc, time_id DESC);
Эта таблица продолжает вставляться, поскольку timeid является частью кластеризации col.Я подумываю прочитать последние (timeid is desc) путем выборки 1 и каким-то образом удалить старую запись, установив TTL на ключевые столбцы или удалив их в одночасье.
Проблемы: TTL или удаление старых записей создает надгробия.
Подход 2:
создать таблицу test.inv_positions (
location_id int,
item bigint, time_id timestamp,
sales_floor_qty int,
backroom_qty int,
in_backroom логический,
транзит_qty int,
первичный ключ ((location_id), item)) с порядком кластеризации по (item asc);
Эта таблица, если приходит новая записьдля того же местоположения и предмета, это поддерживает его.Его легко читать, и не нужно беспокоиться об удалении старых записей.
Проблемы: у меня есть другое приложение на Cassandra, которое обновляет разные col в разное время, и у нас все еще есть проблемы с чтением.Тем не менее, upserts также создает надгробия, но насколько хуже по сравнению с подходом 1?или любой другой лучший способ моделирования это правильно?