2013-07-09 4 views
0

Можно ли вставить строку следующего формата в Кассандре с помощью 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"} 

т.е. каждого столбец будет состоять из: column_name, множественного значения столбца т.е. Столбец будет состоять из имени столбца, и его значение будет состоять из нескольких элементов типа {'item title', 'item price', 'about item'} . Название столбца и тип значения столбца динамические, в другой строке могут быть разные столбцы с разным числом и разными значениями.

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

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

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

ответ

0

По определению 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) 

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

+1

Не могли бы вы повлиять на обновленный. Я просто упростил понимание scanerio. – manish

+0

Кстати, пожалуйста, прочитайте мою статью о мифах Кассандры, прежде чем рассказывать кому-либо еще, что «Кассандра - это база данных с ключом». :) http://www.infoq.com/articles/cassandra-mythology – jbellis

+0

@Manish Хорошо, теперь я понимаю, что вы ищете. Насколько я знаю, с Astyanax вы можете легко хранить объекты (с другими клиентами, такими как Hector I, я этого не делал) См. Эту ссылку: https: //github.com/Netflix/astyanax/wiki/Chunked-Object-Store – ftrujillo

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