2010-07-13 14 views
10

Heh, Tôi đang sử dụngTạo UUID cho Cassandra bằng Python

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

để tạo ra một TimeUUID cho Cassandra, nhưng nhận được lỗi

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

Nó không hoạt động với

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

một trong hai.

Cách tốt nhất để tạo một TimeUUID hợp lệ để sử dụng với cờ CompareWith = "TimeUUIDType" là gì?

Cảm ơn,
Henrik

Trả lời

4

Bạn phải đảm bảo lược đồ gia đình cột của bạn chấp nhận UUID làm khóa. Mã của bạn sẽ làm việc với một gia đình cột tạo ra như (sử dụng cassandra-cli):

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

Để thêm giá trị cho CF này:

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

Hình như bạn đang sử dụng uuid là chìa khóa hàng và không phải là tên cột.

Các 'compare_with: TimeUUIDType' thuộc tính xác định rằng các tên cột sẽ được so sánh với việc sử dụng TimeUUIDType, tức là nó tells Cassandra how to sort the columns for slicing operations

Bạn đã xem là sử dụng một trong các khách hàng python cấp cao? Ví dụ. Tradedgy, Lazy Boy, Telephus hoặc Pycassa

+0

tôi nên đã nói rằng tôi usig pycassa, nhưng có vẻ như tôi phải tự mình tạo ra thời gian. –

+0

lỗi tương tự. có thể đó là vấn đề với pycassa –

+1

một lần nữa. và cho tin nhắn icq của bạn quá :) –