2016-12-07 5 views
7

В cassandra рекомендуется выполнять моделирование данных вокруг запросов. Однако, если я моделирую столбец как столбец кластеризации с целью сортировки на нем, и если этот объект является динамическим, потому что это кластерный столбец, я не могу обновить его значение, так как теперь он относится к первичному ключу для этой таблицы. В этом случае возможны два вариантаЗначение обновления Cassandra в одной из столбцов кластеризации

  1. Сортировка на стороне клиента (что плохо)
  2. Удалить полную строку и вставить новую строку (которая будет создавать надгробие)

Есть другой действительный способ достижение этого в моделировании данных Кассандры?

Например. У меня есть table_A и для запроса получения всех строк с определенным состоянием table_A_by_state. Однако, поскольку состояние будет динамичным, и вам нужно будет обновить состояние в таблице_A_by_state, которая поставляется с вариантами, упомянутыми выше. Кто-то другой столкнулся с такой же проблемой или есть другой способ моделирования данных для этой проблемы?

TABLE_A: Колонки ID (K), имя, состояние

table_A_by_state: Колонки ID (K), состояние (C), название

ответ

2

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

К сожалению, других вариантов нет. Например, если вы используете Cassandra 3.0+ и хотите использовать Materialized Views, чтобы удовлетворить требования к заказу, вы фактически попадаете в свой вариант 2, потому что C * скрывает от вас, что он создаст другую таблицу и вставляет/обновляет/удалите эту таблицу под сценой. Итак, да, это создаст вам надгробия.

Однако вариант 1 не так уж плох (если вы управляете относительным небольшим количеством записей, потому что выборка множества строк является анти-шаблоном), если вы должны выполнить заказ где-то. Да, хранение и извлечение данных уже заказано большое плюс, но лучше сортировать клиентскую сторону, чем становиться волшебником с надгробиями и таймаутами для записи/чтения ...