2013-02-15 3 views
1

Я пытаюсь смоделировать следующую модель данных Cassandra: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 для моделирования отзывов), но как я могу хранить все эти объекты в одной строке, чтобы эффективно получать все бизнес-данные в одном запросе.

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

+0

Зачем вам нужен один запрос? –

+0

Ну, как можно меньше запросов. Я не хочу распространять данные по нескольким семействам столбцов, если только не нужно. Как я могу моделировать многие отношения 1-много в одном семействе столбцов? – user1710833

+0

Кроме того, не считается ли наилучшей практикой пытаться получить данные из одного семейства столбцов, где это возможно, потому что данные в разных семействах столбцов хранятся в разных файлах? Как кассандра поддерживает одно или несколько отношений. Бизнес-объект в моем случае имеет много отношений 1-много, и если единственный способ моделировать это состоит в том, чтобы помещать их в отдельные семейства столбцов, разве это не противоречит принципу моделирования ваших данных для эффективного ответа на ваш запрос? – user1710833

ответ

2

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

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

+0

Спасибо. Эта модель будет работать для меня – user1710833

Смежные вопросы