Значение обновления Cassandra в одном из столбцов кластеризации
На Кассандре желательно выполнять моделирование данных вокруг запросов. Однако, если я смоделирую столбец в качестве столбца кластеризации для целей сортировки по нему и если этот объект является динамическим, поскольку он является столбцом кластеризации, я не смогу обновить его значение, поскольку он принадлежит первичному ключу для этой таблицы. В этом случае два варианта
- Сортировка на стороне клиента (что плохо)
- Удалить полную строку и вставить новую строку (которая создаст надгробную плиту)
Есть ли другой надежный способ добиться этого в моделировании данных Cassandra?
Например. У меня есть table_A и для запроса получения всех строк с определенным состоянием, table_A_by_state. Однако, так как состояние будет динамическим, вам нужно будет обновить состояние в table_A_by_state, который поставляется с опциями, которые я упоминал выше. Кто-то еще сталкивался с такой же проблемой или есть другой способ моделирования данных для этой проблемы?
table_A: столбцы: id (K), имя, состояние
table_A_by_state: столбцы: id (K), состояние (C), имя
1 ответ
В зависимости от количества записей в каждом разделе вы можете попробовать прибегнуть к индексации и посмотреть, насколько вы можете масштабировать их.
К сожалению других вариантов нет. Например, если вы используете Cassandra 3.0+ и хотите использовать материализованные представления для удовлетворения ваших требований к оформлению заказа, вы фактически попадаете в свой вариант 2, поскольку C* скрывает от вас, что он создаст другую таблицу и вставит / обновит / удалить эту таблицу под сценами. Так что, да, это создаст для вас надгробия.
Тем не менее, вариант 1 также не так уж плох (если вы управляете относительно небольшим количеством записей, потому что выборка большого количества строк - это анти-шаблон), предполагая, что вам нужно где-то выполнить порядок. Да, хранение и получение уже заказанных данных - большой плюс, но лучше отсортировать на стороне клиента, чем стать волшебником с надгробиями и тайм-аутами записи / чтения...