Генерация UUID для Кассандры в Python - PullRequest
10 голосов
/ 13 июля 2010

Хех, я использую

cf.insert(uuid.uuid1().bytes_le, {'column1': 'val1'}) (pycassa)

, чтобы создать TimeUUID для Кассандры, но получаю ошибку

InvalidRequestException: 
InvalidRequestException(why='UUIDs must be exactly 16 bytes')

Это не 'работать с

uuid.uuid1()
uuid.uuid1().bytes
str(uuid.uuid1())

.

Какой лучший способ создать действительный TimeUUID для использования с флагом CompareWith = "TimeUUIDType"?

Спасибо,
Хенрик

Ответы [ 2 ]

9 голосов
/ 13 июля 2010

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

Атрибут ' compare_with: TimeUUIDType ' указывает, что имена столбцов будут сравниваться с использованием TimeUUIDType, то есть он сообщает Cassandra, как сортировать столбцы для операций нарезки

Рассматривали ли вы использование любого из клиентов Python высокого уровня?Например, Tradedgy , Ленивый мальчик , Телефон или Пикасса

4 голосов
/ 03 января 2012

Вы должны убедиться, что схема семейства столбцов принимает UUID в качестве ключа. Ваш код будет работать с семейством столбцов, созданным как (используя cassandra-cli):

create column family MyColumnFamily
  with column_type = 'Standard'
  and comparator = 'AsciiType'
  and default_validation_class = 'BytesType'
  and key_validation_class = 'TimeUUIDType';

Чтобы добавить значения к этому CF:

import pycassa
pool = pycassa.ConnectionPool('Keyspace1')
cf = pycassa.ColumnFamily(pool, 'MyColumnFamily')
cf.insert(uuid.uuid1(), {'column1': 'val1'})
...