0

キーのリストを提供するような列ファミリー テンプレートを使用して、cassandra データベースの複数の行を更新する方法はありますか。現在、アップデータ columnFamilyTemplate を使用してキーのリストをループし、各行の更新を行っています。multigetSliceQuery のようなクエリを見たことがありますが、更新を行う際の同等性はわかりません。

4

2 に答える 2

0

ColumnFamilyTemplate には、1 回の呼び出しでキーのリストとミューテーションのリストを渡すだけのユーティリティ メソッドはありません。ミューテーターを使用して独自のものを実装できます。

これはヘクターでそれを行う方法に関する基本的なコードです

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 の「プッシュオンライト」パターンを使用する機能の非正規化がたくさんあります。

于 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 に答える