Cassandra 1.2 вставляет/обновляет тип столбца больших двоичных объектов с помощью Python и библиотеки cql

Введение

У меня есть столбец больших двоичных объектов в семействе столбцов Cassandra 1.2, таблица определяется следующим образом:

CREATE TABLE objects (
   id        text,
   obj       blob,
   PRIMARY KEY (id)
);

Проблема:

Проблема в том, что когда мне нужно вставить/обновить столбец BLOB-объектов из Python с помощью библиотеки cql, мне нужно, чтобы base 16 кодировал содержимое столбца следующим образом:

import cPickle
import cql
...
def save_object(connection, obj):
    object['id']  = obj['id']
    object['obj'] = cPickle.dumps(obj).encode("hex")
    cql_statement = "INSERT INTO objects (id, obj) values (:id, :obj)"
    cursor = connection.cursor()
    cursor.execute(cql_statement, object)

Вопрос:

Есть ли способ выполнить этот запрос без использования кодировки (строки) объекта с основанием 16? Причина этого заключается в том, чтобы уменьшить накладные расходы на отправку по сети строки, закодированной с основанием 16, вместо простых байтов.

Заранее спасибо!


person Sergio Ayestarán    schedule 27.05.2013    source источник


Ответы (1)


Base64 или HEX?

если ваш вопрос не кодируется в base64, да, вы можете, однако вы должны предоставить свои данные в CQL в формате HEX.

Если ваш вопрос не переводится в HEX, нет, это невозможно.

Как большой двоичный объект, определенный в документации CQL.

Константа blob — это шестнадцатеричное число, определяемое как 0xX+, где hex — это шестнадцатеричный символ, например. [0-9a-fA-F]. Например, 0xcafe.

Таким образом, это явно означает, что вам нужно отправлять свои данные в формате HEX.

person Boynux    schedule 23.06.2013