2013-09-17 4 views
1

Я проектирую семейство колонок для нашего случая использования в Кассандре. Я планирую перейти с динамической структурой столбцов.Семейство колонн Кассандры для композитных колонн?

Ниже мое требование в нашем использовании регистра

user-id column1          column2          column3 
123  (Column1-Value Column1-SchemaName LMD)  (Column2-Value Column2-SchemaName LMD)  (Column3-Value Column3-SchemaName LMD) 

Для каждого идентификатора пользователя, мы будем хранить column1 и его значение, и это значение будет хранить эти три вещей always-

(Column1-Value Column1-SchemaName  LMD) 

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

Теперь я не уверен, как хранить эти три вещи всегда на уровне значения столбца? Должен ли я использовать составные столбцы на уровне столбцов? если да, то я не уверен, как сделать такое семейство колонок в Кассандре.

Column1-value will be in binary, Column1-SchemaName will be String, LMD will be DateType. 

Это то, что я так далеко

create column family USER_DATA 
with key_validation_class = 'UTF8Type' 
and comparator = 'UTF8Type' 
and default_validation_class = 'UTF8Type' 
and gc_grace = 86400 
and column_metadata = [ {column_name : 'lmd', validation_class : DateType}]; 

Может кто-нибудь мне помочь в разработке семейства столбцов для этого?

ответ

1

@TechGeeky

Изменение компаратора:

comparator = 'CompositeType(ByteType,UTF8Type,DateType)' 

ByteType для Column-Value

UTF8Type для Column-SchemaName

DateType для LMD

Будьте осторожны , с этой конструкцией, запрашивая ваши данные, кроме user-id будет сложно. Особенно вы могли бы получить фрагменты столбцов, указав данные столбца (в байтах), если вы знаете их раньше ...

+0

Я путать с этим подходом .. 'compator' для имени столбца. Правильно? Но мне нужны составные значения. Каждый столбец будет иметь составные значения. В моем случае мне нужно иметь три значения внутри одного столбца. И это имя столбца может быть 'e1',' e2' или 'e3' или что-то в моем случае .. – ferhan

+0

" компаратор для названия столбца .. Правильно? " -> Точный. В этом случае ваше имя столбца будет составным значением v1: v2: v3. v1 является байтом [], v2 является строкой, а v3 - датой – doanduyhai

+0

Я вижу, но мне нужно - columnName должно быть однострочным, например 'e1', а значение столбца должно быть составным значением' v1: v2: v3' , 'v1' является байтом [],' v2' является строкой, а 'v3' является датой. Возможно ли это сделать? – ferhan

1

Я бы предложил использовать CQL3. Если вы используете Cassandra 1.2+ и CQL3, следующая таблица приведет к описанию разбиения (строки), которое вы описываете.

CREATE TABLE user_data (
    userid text, 
    data bytes, 
    schema_name string, 
    lmd timestamp, 
    PRIMARY KEY (userid, data, schema_name, lmd) 
) 

Вы можете увидеть в следующей статье для получения дополнительной информации о том, как CQL3 заканчивается в виде составных колонн под капотом, и делает их гораздо проще в использовании:
http://www.datastax.com/dev/blog/cql3-for-cassandra-experts

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