0

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

4

2 回答 2

0

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

这是有关如何在赫克托中执行此操作的基本代码

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

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

于 2013-03-26T11:31:49.400 回答
-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

于 2013-03-21T16:55:25.150 回答