Группировать значение трех столбцов в один столбец в Cassandra?

Ниже приведены данные, которые мне нужно представить в моем семействе столбцов Cassandra.

rowKey           e1_name                    e1_schemaname                   e1_last_modified_date
123             (ByteArray value)           abc (some string)               some_date

userId здесь rowKey. А e1_name, e1_schemaname и e1_last_modified_date — это столбцы специально для e1. Все эти три столбца содержат значение специально для столбца e1. Точно так же у меня будут другие столбцы, такие как ниже.

 e2_name                    e2_schemaname                   e2_last_modified_date
(ByteArray value)           abc (some string)               some_date

 e3_name                    e3_schemaname                   e3_last_modified_date
(ByteArray value)           abc (some string)               some_date

Теперь я думаю: есть ли способ сгруппировать эти три вещи e1_name, e1_schemaname и e1_last_modified_date в один столбец e1 и в котором будет храниться составное значение для всех трех, а не отдельно.

Если да, может ли кто-нибудь помочь мне в разработке семейства столбцов для этого? Я буду использовать клиент Astyanax для вставки в указанное выше семейство столбцов.


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


Ответы (1)


Если я правильно понял, вы можете спроектировать схему следующим образом:

столбцы:

user_id, record_type, имя, имя схемы, last_modified_date

user_id - ваш ключ строки (ключ раздела)

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

В первом случае PRIMARY_KEY(user_id, record_type)

          e1                          e2
123 : {name, schemaname, date }  | {name, schemaname, date }

Примером второго может быть PRIMARY_KEY(user_id, record_type, name)

          e1|name                    e2|name
123 : {schemaname, date }  | {schemaname, date }

Звучит нормально?

Наконец, я бы сказал, что есть очень хороший официальный драйвер Datastax для собственного транспорта cassandra:

https://github.com/datastax/java-driver

person viktortnk    schedule 21.09.2013
comment
В моем примере я хочу сохранить столбец e1, а внутри столбца e1 я хочу сохранить его значение. И это значение можно разделить на три части. Фактическое значение столбца e1, имя схемы строки и дата последнего изменения. Но в вашем примере я считаю, что имя — это значение для столбца e1... верно? - person arsenal; 22.09.2013
comment
Да, я предполагал, что это значение ByteArray из вашего примера. - person viktortnk; 22.09.2013
comment
Итак, проблема в том, что каждый раз, когда я получаю новое значение для столбца e1, для него создается новый столбец... И каким-то образом мне нужно отслеживать удаление старых столбцов, связанных с e1. . - person arsenal; 22.09.2013
comment
тогда вы можете сделать метку времени частью первичного ключа. PRIMARY_KEY(user_id, record_type, timeuuid). Вы можете применить сортировку столбца DESC для столбца timeuuid, и поэтому запрос фактического значения e1 (самого последнего) будет более эффективным. - person viktortnk; 23.09.2013