Семейство столбцов Cassandra для составных столбцов?

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

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

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

Для каждого идентификатора пользователя мы будем хранить столбец1 и его значение, и это значение всегда будет хранить эти три вещи:

(Column1-Value   Column1-SchemaName     LMD)

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

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

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}];

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


person arsenal    schedule 17.09.2013    source источник


Ответы (2)


@TechGeeky

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

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

ByteType для значения столбца

UTF8Type для столбца-SchemaName

DateType для LMD

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

person doanduyhai    schedule 18.09.2013
comment
Меня смущает этот подход. comparator для имени столбца. Верно? Но мне нужны составные значения. Каждый столбец будет иметь составные значения. В моем случае мне нужно иметь три значения в одном столбце. И это имя столбца может быть e1, e2 или e3 или любым другим в моем случае.. - person arsenal; 21.09.2013
comment
компаратор для имени столбца. Верно? --> Точный. В этом случае имя вашего столбца будет составным значением v1:v2:v3. v1 — это byte[], v2 — это строка, а v3 — дата. - person doanduyhai; 21.09.2013
comment
Я вижу, но мне нужно, чтобы имя столбца было одной строкой, например e1, а значение столбца должно быть составным значением v1:v2:v3. v1 — это байт[], v2 — это строка, а v3 — это дата. Возможно ли это сделать? - person arsenal; 21.09.2013
comment
значение столбца должно быть составным значением v1:v2:v3 --> В этом случае создайте в Java класс, который инкапсулирует v1, v2 и v3. Затем сериализуйте этот класс как JSON. Вы можете сохранить эту полезную нагрузку JSON, указав тип значения столбца как UTF8Type. - person doanduyhai; 21.09.2013
comment
Спасибо doanduyhai за предложение. Это было мое последнее решение сериализовать все как JSON. Но есть ли способ использовать какие-либо функции самой Cassandra, прежде чем идти по этому пути? - person arsenal; 21.09.2013
comment
Но есть ли способ использовать какие-либо функции самой Cassandra, прежде чем идти по этому пути? -> Конечно. Вы можете хранить v1, v2 и v3 как составное имя столбца, например: 'comparator:v1:v2:v3'. Но будьте осторожны, имя столбца ограничено максимальным размером 64 КБ. - person doanduyhai; 21.09.2013
comment
Но проблема в том, что... Вы говорите, сохраните их как имя столбца, но тогда что я буду хранить в значениях? - person arsenal; 22.09.2013
comment
что я собираюсь хранить в значениях? -> Пустой строки - person doanduyhai; 22.09.2013

Я бы посоветовал вам использовать 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

person Zanson    schedule 18.09.2013