Как обновить несколько строк с помощью Hector

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


person qualebs    schedule 21.03.2013    source источник


Ответы (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 «нажми при записи».

person le-doude    schedule 26.03.2013
comment
Я хочу одно уточнение: если я хочу удалить несколько строк, я должен сначала получить список ключей, а затем попытаться удалить каждый ключ строки один за другим. или есть другой способ удалить несколько строк. Поскольку сценарий похож на то, что я не знаю ключ строки (поскольку он генерируется случайным образом), но я знаю адрес электронной почты или какое-то конкретное значение столбца каждой строки. - person Manish Kumar; 09.05.2013
comment
Вы должны взглянуть на Reddit для этого ... они находятся на переднем крае использования Cassandra из данных типа Board / Message / Comment. Я бы предпочел использовать для этого диван-кровать/bigcouch/couchdb. Сложной частью использования cassandra было бы избавиться от чтения-изменения-записи и сделать любую модификацию записью в cass. - person le-doude; 09.05.2013
comment
Если бы вы разместили свой последний комментарий в виде вопроса, я думаю, это было бы интересным упражнением для многих из нас. - person le-doude; 09.05.2013

Вы можете использовать пакетную мутацию, чтобы вставить столько, сколько хотите (в пределах 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.

person Richard    schedule 21.03.2013
comment
Я думаю, что ваше упоминание о максимальном размере бережливости важно, поскольку, если вы не будете осторожны, это приведет к разрыву соединений. так что +1 - person le-doude; 09.05.2013
comment
Привет, Ричард, можешь рассказать о максимальном размере бережливости и потере связей. Я не намекал на максимальный размер, и мне нужно знать, на что следует обратить внимание. - person qualebs; 17.05.2013