Есть ли способ обновить несколько строк в базе данных cassandra, используя шаблон семейства столбцов, например, предоставить список ключей. в настоящее время я использую средство обновления columnFamilyTemplate для прокрутки списка ключей и обновления для каждой строки. Я видел такие запросы, как multigetSliceQuery, но я не знаю их эквивалентности при выполнении обновлений.
Как обновить несколько строк с помощью Hector
Ответы (2)
В ColumnFamilyTemplate нет служебного метода, позволяющего просто передать список ключей со списком мутаций за один вызов. Вы можете реализовать свои собственные с помощью мутаторов.
Это основной код того, как это сделать в Гекторе
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 «нажми при записи».
Вы можете использовать пакетную мутацию, чтобы вставить столько, сколько хотите (в пределах 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.