2013-03-21 6 views
0

Есть ли способ обновить несколько строк в базе данных cassandra, используя шаблон семейства столбцов, например, предоставить список ключей. В настоящее время я использую updater columnFamilyTemplate для прокрутки списка ключей и обновления для каждой строки. Я видел такие запросы, как multigetSliceQuery, но я не знаю их эквивалентности при выполнении обновлений.Как обновить несколько строк с помощью Hector

ответ

0

В 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.

+0

Я хочу одно уточнение: если я хочу удалить несколько строк, тогда я должен сначала получить список ключей, а затем попытаться удалить каждый ряд строк один за другим. или существует другой способ удаления нескольких строк. Поскольку сценарий - это что-то вроде того, что я не знаю ключа строки (поскольку он генерируется случайным образом), но я знаю адрес электронной почты или определенное значение столбца для каждой строки. – manish

+0

Вы должны взглянуть на Reddit для этого ... они находятся на переднем крае использования Cassandra из типа Board/Message/Comment. Я бы предпочел использовать couchbase/bigcouch/couchdb для этого. Сложной частью использования cassandra было бы избавиться от «read-modify-write» и внести любые изменения в запись в cass. –

+0

Если бы вы отправили свой последний комментарий в качестве вопроса, я думаю, что это было бы интересным мероприятием для многих из нас. –

-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.

+0

Я думаю, что ваше упоминание о максимальном размере бережливости важно, так как если вы не будете осторожны, он сбросит соединения. так +1 –

+0

Привет, Ричард, вы можете рассказать о максимальном размере и потерях соединений. Я не намекал на максимальный размер, и мне нужно знать, какую осторожность я должен предпринять. – qualebs