Модель данных Cassandra - несколько составных столбцов

Я пытаюсь смоделировать следующую модель данных в Кассандре:

Бизнес - первичный ключ: BusinessId

Has Many Reviews - primary key : ReviewId
   - Review 1
        - Body
        - Rating
   - Review 2
        - Body
        - Rating 
   and so on
Has an Address
  - State
  - City
  - Zip
Has Business Hours
  - Monday Hours
  - Tuesday Hours
  and so on
Has Offers
  - Offer1
  - Offer2
  and so on

Я хочу быть в состоянии извлечь всю эту информацию, используя один запрос, т.е. я хочу сохранить это в одной бизнес-строке. Как я могу это сделать? По сути, у меня есть много дочерних объектов, которые я хочу сохранить вместе с родительским бизнес-объектом. Из того, что я понимаю о составных ключах, у вас может быть только один составной ключ (ex) businessId:ReviewId для проверки модели), но как мне сохранить все эти сущности в одной строке, чтобы эффективно извлечь все бизнес-данные в одном запросе.

Мой второй вопрос касается обновлений. Предположим, что только одна из этих сущностей (Обзоры) часто обновляется. Другие объекты в основном остаются статичными. Желательно ли отделить обзоры от этой гигантской бизнес-строки, или я могу обновить обзоры, не помещая всю бизнес-строку в память?

1 ответ

Решение

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

Key: ReviewID {
  Review:1:Body = ""
  Review:1:Rating = 1
  Review:2:Body = ""
  Review:2:Rating = 1
  Address:1:City = ""
  Address:1:State = ""
  Address:1:Zip = ""
  Hours:1:Monday = ""
  Hours:1:Tuesday = ""
  Offer:1:[fieldName] = ""
  Offer:2:[fieldName] = ""
}

Схема для этого будет Composite(Utf8Type, IntegerType, Utf8Type) с любым типом ключа, совпадающим с вашим ReviewID, и с любым типом значения, совпадающим с вашими значениями (могут быть байтами, если у вас есть разные типы).

Другие вопросы по тегам