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