如何使用Hector更新多行

时间:2013-03-21 13:58:56

标签: cassandra hector

有没有办法可以使用列族模板更新cassandra数据库中的多行,例如提供密钥列表。 目前我使用updater columnFamilyTemplate循环键列表并对每一行进行更新。我见过像multigetSliceQuery这样的查询,但我不知道它们在进行更新时的等效性。

2 个答案:

答案 0 :(得分:0)

ColumnFamilyTemplate中没有实用程序方法,只允许您在一次调用中传递一个包含突变列表的键列表。 您可以使用mutators实现自己的。

这是关于如何在hector中执行此操作的基本代码

Set<String> keys = MY_KEYS;
Map<String, String> pairsOfNameValues = MY_MUTATION_BY_NAME_AND_VALUE;

Set<HColumn<String, String>> colums = new HashSet<HColumn<String,String>>();
for (Entry<String, String> pair : pairsOfNameValues.entrySet()) {
    colums.add(HFactory.createStringColumn(pair.getKey(), pair.getValue()));
}

Mutator<String> mutator = template.createMutator();
String column_family_name = template.getColumnFamily();
for (String key : keys) {
    for (HColumn<String, String> column : colums) {
        mutator.addInsertion(key, BASIC_COLUMN_FAMILY, column);
    }
}
mutator.execute();

那应该是这样的。这是插入的示例,请确保使用以下方法进行批量突变:

mutator.addInsertion 
mutator.addDeletion
mutator.addCounter
mutator.addCounterDeletion

因为这些将立即执行而无需等待mutator.execute():

mutator.incrementCounter
mutator.deleteCounter
mutator.insert
mutator.delete

最后一点:mutator允许您同时批量处理多个列系列上的多行...这就是为什么我通常更喜欢使用它们而不是CF模板。对于使用NoSQL的“push-on-write”模式的功能,我有很多非规范化。

答案 1 :(得分:-1)

您可以使用批量突变尽可能多地插入(在thrift_max_message_length_in_mb内)。请参阅http://hector-client.github.com/hector//source/content/API/core/1.0-1/me/prettyprint/cassandra/model/MutatorImpl.html