2013-09-19 2 views
1

Мне нужно сохранить двоичные байтовые данные в семействе столбцов Cassandra во всех моих столбцах. Ниже приведен код, в котором я получаю двоичные байтовые данные. Мой rowKey будет String, но все мои столбцы должны хранить двоичные данные blobs.Сохранение двоичных данных капли в Cassandra Column family

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

create column family TESTING 
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}]; 

Обновления: -

Я собираюсь использовать Astyanax Client для извлечения данных из Кассандры. Мой пример использования прост.

Все мои столбцы в моей колонке Cassandra Column Family будут хранить только двоичные данные капли.

Как насчет этой фамилии? Правильно ли это выглядит?

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

Когда я попытался создать вышеуказанную семью колонки, я получил это exception-

[[email protected]] create column family TESTING 
...  with key_validation_class = 'UTF8Type' 
...  and comparator = 'TimeUUIDType' 
...  and default_validation_class = 'ByteType' 
...  and gc_grace = 86400 
...  and column_metadata = [ {column_name : 'lmd', validation_class : DateType}]; 

java.lang.RuntimeException: org.apache.cassandra.db.marshal.MarshalException: Unknown timeuuid representation: lmd 

Я буду хранить USERID как RowKey, то моя колонка имя-которая будет хранить данные в двоичном узора водных потеков и, наконец, lmd в качестве столбца DateType.

ответ

1

@Trekkie

Если вы используете бережливости клиента:

create column family TESTING 
with key_validation_class = 'UTF8Type' 
and comparator = 'TimeUUIDType' 
and default_validation_class = 'ByteType' 

* default_validation_class * является ByteType для хранения BLOB.

Поскольку вы не указали, как вы хотите получить доступ к вам данные, вы можете использовать TimeUUIDType для естественного упорядочения вашей колонки

Если вы используете CQL3:

CREATE TABLE TESTING(
    partition_key text, //corresponds to row key 
    column_name timeuuid, 
    data blob, 
    PRIMARY KEY(partition_key)); 
+0

Я буду использовать Astyanax клиента, поэтому мне нужно использовать колонки семья не cql3. Я не уверен, почему вы используете ByteType для default_validation_class? – AKIWEB

+0

А также почему вы используете «TimeUUIDType» для компаратора здесь? Я также обновил свой вопрос с более подробной информацией. – AKIWEB

+0

ByteType для класса проверки, поскольку вы храните данные в виде байта [], не так ли? TimeUUIDType предназначен для сортировки столбцов. – doanduyhai

0

@Trekkie

теперь я понимаю ваше требование:

  1. ключа строки = текст
  2. имени столбца = байты для хранения
  3. значения = нет

В начале, я не предполагал, что вы будете хранить двоичные данные в столбце значение, а не в столбце имени.

Если вы храните данные в имени столбца, будьте очень осторожны, потому что вы не можете хранить более 64 тыс. Данных в имени столбца. Вы уверены, что blob никогда не превысит 64K?

http://wiki.apache.org/cassandra/FAQ#max_key_size

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