3

我在哪里可以找到这方面的样品?

我的大部分代码使用 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()));
4

2 回答 2

3

您使用哪个 API 对记录进行 CRUD 并不重要;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()));

唯一额外的就是在使用模板之前创建复合(假设 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());
于 2011-10-17T19:37:24.483 回答
1

如果定义复合键,还需要告诉 Cassandra (>0.8.1) 使用 CompositeType 作为比较器。这是一个从定义 CompositeType 模式到编程范围查询的完整示例: http ://randomizedsort.blogspot.com/2011/11/cassandra-range-query-using.html

于 2011-11-21T23:36:46.000 回答