Модель данных 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, и с любым типом значения, совпадающим с вашими значениями (могут быть байтами, если у вас есть разные типы).