我在哪里可以找到样品?
我的大部分代码都使用ColumnFamilyTemplate对数据记录进行CRUD,见下文。一旦定义了复合键,我是否仍然可以使用ColumnFamilyTemplate来访问具有复合键的数据?
private static final ColumnFamilyTemplate<UUID, String> template =
new ThriftColumnFamilyTemplate<UUID, String>(
Bootstrap.keyspace,
"User",
UUIDSerializer.get(),
StringSerializer.get(),
HFactory.createMutator(Bootstrap.keyspace, UUIDSerializer.get()));
答案 0 :(得分:3)
用于在记录上执行CRUD的API应该无关紧要; CompositeType(或DynamicCompositeType)只是另一种类型(例如类似于UUID),它具有相应的序列化器(CompositeSerializer)。所以,你的例子可能会成为:
private static final ColumnFamilyTemplate<Composite, String> template =
new ThriftColumnFamilyTemplate<Composite, String>(
Bootstrap.keyspace,
"User",
CompositeSerializer.get(),
StringSerializer.get(),
HFactory.createMutator(Bootstrap.keyspace, CompositeSerializer.get()));
在使用模板之前只需要额外创建Composite(假设UUID和Long的复合):
Composite key = new Composite();
key.addComponent(someUUID, UUIDSerializer.get());
key.addComponent(someLong, LongSerializer,get());
ColumnFamilyResult<Composite,String> result = template.queryColumns(key);
获取结果时,获取密钥组件的一种方法是:
myUUID = result.getKey().get(0, UUIDSerializer.get());
myLong = result.getKey().get(1, LongSerializer,get());
答案 1 :(得分:1)
如果定义复合键,还需要告诉Cassandra(> 0.8.1)使用CompositeType作为比较器。以下是从定义CompositeType架构到编写范围查询的完整示例: http://randomizedsort.blogspot.com/2011/11/cassandra-range-query-using.html