キーのリストを提供するような列ファミリー テンプレートを使用して、cassandra データベースの複数の行を更新する方法はありますか。現在、アップデータ columnFamilyTemplate を使用してキーのリストをループし、各行の更新を行っています。multigetSliceQuery のようなクエリを見たことがありますが、更新を行う際の同等性はわかりません。
2 に答える
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 の「プッシュオンライト」パターンを使用する機能の非正規化がたくさんあります。
バッチミューテーションを使用して、必要な数だけ挿入できます(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を参照してください。