我在使用time_uuid类型作为我的columnfamily中的键时遇到问题.我想存储我的记录,并在插入时按顺序排序,然后我认为time_uuid是一个很好的方法.这就是我设置列系列的方法:
sys.create_column_family("keyspace", "records", comparator_type=TIME_UUID_TYPE)
Run Code Online (Sandbox Code Playgroud)
当我尝试插入时,我这样做:
q=pycassa.ColumnFamily(pycassa.connect("keyspace"), "records")
myKey=pycassa.util.convert_time_to_uuid(datetime.datetime.utcnow())
q.insert(myKey,{'somedata':'comevalue'})
Run Code Online (Sandbox Code Playgroud)
但是,当我插入数据时,我总是收到错误:
v1 UUID列名称或值的参数既不是UUID,也不是日期时间或数字.
如果我将comparator_type更改为UTF8_TYPE,它可以工作,但返回时项目的顺序不是应该的.我究竟做错了什么?
问题是在您的数据模型中,您将时间用作行键.虽然这是可能的,但除非您还使用ByteOrderedPartitioner,否则您将无法获得有意义的排序.
因此,大多数人使用时间作为列名而不是行键来插入按时间排序的数据.在此模型中,insert语句如下所示:
q.insert(someKey, {datetime.datetime.utcnow(): 'somevalue'})
Run Code Online (Sandbox Code Playgroud)
where someKey是与您要插入的整个时间序列相关的键(例如,用户名).(请注意,您不必将时间转换为UUID,pycassa会为您执行此操作.)要存储多个值,请使用超级列或复合键.
如果你真的想在行键中存储时间,那么你需要指定key_validation_class,而不是comparator_type. comparator_type设置列名key_validation_class的类型,同时设置行键的类型.
sys.create_column_family("keyspace", "records", key_validation_class=TIME_UUID_TYPE)
Run Code Online (Sandbox Code Playgroud)
请记住,除非您还使用ByteOrderedPartitioner,否则不会对行进行排序.
| 归档时间: |
|
| 查看次数: |
2533 次 |
| 最近记录: |