Есть ли способ обновить несколько строк в базе данных cassandra, используя шаблон семейства столбцов, например, предоставить список ключей. В настоящее время я использую updater columnFamilyTemplate для прокрутки списка ключей и обновления для каждой строки. Я видел такие запросы, как multigetSliceQuery, но я не знаю их эквивалентности при выполнении обновлений.Как обновить несколько строк с помощью Hector
ответ
В 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
As последнее примечание: мутатор позволяет вам мутировать несколько строк в нескольких семействах столбцов сразу ... вот почему я обычно предпочитаю использовать их вместо шаблонов CF. У меня много денормализации для функциональных возможностей, которые используют шаблон «push-on-write» 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.
Я думаю, что ваше упоминание о максимальном размере бережливости важно, так как если вы не будете осторожны, он сбросит соединения. так +1 –
Привет, Ричард, вы можете рассказать о максимальном размере и потерях соединений. Я не намекал на максимальный размер, и мне нужно знать, какую осторожность я должен предпринять. – qualebs
Я хочу одно уточнение: если я хочу удалить несколько строк, тогда я должен сначала получить список ключей, а затем попытаться удалить каждый ряд строк один за другим. или существует другой способ удаления нескольких строк. Поскольку сценарий - это что-то вроде того, что я не знаю ключа строки (поскольку он генерируется случайным образом), но я знаю адрес электронной почты или определенное значение столбца для каждой строки. – manish
Вы должны взглянуть на Reddit для этого ... они находятся на переднем крае использования Cassandra из типа Board/Message/Comment. Я бы предпочел использовать couchbase/bigcouch/couchdb для этого. Сложной частью использования cassandra было бы избавиться от «read-modify-write» и внести любые изменения в запись в cass. –
Если бы вы отправили свой последний комментарий в качестве вопроса, я думаю, что это было бы интересным мероприятием для многих из нас. –