Cassandra: сохранение значения столбца с дополнительными данными

Можно ли вставить строку следующего формата в cassandra с помощью hector api:

rowkey1 ==>     "Column name1":{"item1","item2","item3"}
                "Column name2":{"item11","item22","item33"}
                "Column name3":{"item111","item222","item333"}

rowkey2 ==>     "Column name1-a":{"item1","item2","item3"}
                "Column name2-b":{"item11","item22","item33"}
                "Column name3-c":{"item111","item222","item333"}

т. е. каждый столбец будет состоять из: имя_столбца, несколько значений столбца, т.е. столбец будет состоять из имени столбца, а его значение будет состоять из нескольких элементов, таких как {'название элемента','цена элемента','об элементе '} .Имя столбца и тип значения столбца являются динамическими, в разных строках могут быть разные столбцы с другим количеством и разными типами значений.

Я думал сделать что-то вроде: имя столбца будет String, а значением столбца будет некоторый объект класса с требуемым свойством. Это хорошо? Идея заключается в том, что он будет содержать все в одном столбце, а при одном вызове столбца будет давать все несколько значений. Использование нескольких столбцов может увеличить объем работы по чтению нескольких столбцов.

Я думаю, что редактирование и чтение записи не должно быть проблемой. Я использую основной API hector, а не CQL, поскольку столбцы являются динамическими.

Любые предложения или решения ??


person Manish Kumar    schedule 09.07.2013    source источник


Ответы (2)


Похоже, вы хотите использовать Карта CQL. Гектор плохо поддерживает CQL; вместо этого используйте драйвер DataStax Java.

Заявление о том, что CQL не поддерживает динамические столбцы, является к сожалению, распространенное недоразумение.

person jbellis    schedule 10.07.2013

По определению Cassandra представляет собой базу данных с ключом и значением, поэтому модель, которую вы ищете, не соответствует философии Cassandra. Имя столбца должно быть уникальным, поэтому, если вы сделали:

create columnfamily demo WITH comparator = UTF8Type AND key_validation_class = UTF8Type AND default_validation_class=UTF8Type;
 set demo['1']['column1'] = 'value';
 set demo['1']['column1'] = 'value2';

Когда вы выполняете получение:

 GET demo['1'];
=> (column=column1, value=value2, timestamp=1373438507059000)

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

person ftrujillo    schedule 10.07.2013
comment
Не могли бы вы изучить обновленный вопрос. Я только что упростил понимание scanerio. - person Manish Kumar; 10.07.2013
comment
Кстати, пожалуйста, прочтите мою статью о мифах о Cassandra, прежде чем рассказывать кому-либо еще, что Cassandra — это база данных типа «ключ-значение». :) infoq.com/articles/cassandra-mythology - person jbellis; 10.07.2013
comment
@Manish Хорошо, теперь я понимаю, что вы ищете. Насколько я знаю, с Astyanax вы можете легко хранить объекты (с другими клиентами, такими как Hector, я этого не пробовал). См. Эту ссылку: github.com/Netflix/astyanax/wiki/Chunked-Object-Store - person ftrujillo; 11.07.2013