我正在使用cassandra,我想获取介于给定时间戳范围之间的记录.对此有什么疑问?我正在使用节俭客户端.
我试过这段代码.
String columnFamily = "UserColumnFamily";
String keyspace="Enterprise";
final String UTF8 = "UTF8";
String keyUserid="1";
TTransport tr = new TSocket("10.10.10.104", 9160);
TProtocol proto = new TBinaryProtocol(tr);
Cassandra.Client client = new Cassandra.Client(proto);
SlicePredicate predicate = new SlicePredicate();
SliceRange sliceRange = new SliceRange();
String startkey="1293443184521000";
String finishkey ="1293445102333000";
sliceRange.setStart(new byte[0]);
sliceRange.setFinish(new byte[0]);
predicate.setSlice_range(sliceRange);
ColumnParent parent = new ColumnParent(columnFamily);
try {
tr.open();
List<KeySlice> results=client.get_range_slice(keyspace,parent,predicate,startkey,finishkey,100, ConsistencyLevel.ONE);
for (KeySlice result : results) {
Column column = (Column) result.columns;
System.out.println(new String(column.name,UTF8) + " ->> "
+ new String(column.value,UTF8));
}
tr.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但它抛出了这个错误:
InvalidRequestException(why:start key's md5 sorts after end key's md5.
This is not allowed; you probably should not specify end key at all, under RandomPartitioner
Run Code Online (Sandbox Code Playgroud)
如果我把finishkey给null然后它说:
Required field 'finish_key' was not present!
Struct: get_range_slice_args(keyspace:NiidleEnterprise,
column_parent:ColumnParent(column_family:UserColumnFamily),
predicate:SlicePredicate(slice_range:SliceRange(start:, finish:, reversed:false, count:100)),
start_key:1293443184521000, finish_key:null, row_count:100, consistency_level:ONE)"
Run Code Online (Sandbox Code Playgroud)
我不明白设定的价值startkey和finishkey.在上面的代码中:
String startkey="1293443184521000";
String finishkey ="1293445102333000";
Run Code Online (Sandbox Code Playgroud)
这些是时间戳值.请建议我应该采取什么样的开始和结束键?
请使用Hector,一个用于Cassandra的Java客户端库或其他客户端:http://wiki.apache.org/cassandra/ClientOptions.使用原始Thrift是缓慢,艰难,并且已经成为可能的方式.
但是,通常,使用RandomPartitioner时无法获得有意义的行范围,因为行按其键的MD5哈希排序.相反,您需要通过对列名使用时间戳或TimeUUID来在一行(或多行)中创建时间轴.这将导致您的列按时间顺序排序.然后,您可以将数据存储为列值,也可以将实际数据行的键存储为列值.
| 归档时间: |
|
| 查看次数: |
5079 次 |
| 最近记录: |