multiGetIterator()の使用
戻りセットが大きすぎてメモリーに収まらない場合、KVStore.multiGet()
のかわりにKVStore.multiGetIterator()
を使用します。
KVStore.multiGetIterator()
では、キーまたはキー範囲(オプション)で定義されている、キーのセットの順序付き走査を行えます。戻りセットがメモリーに収まらない場合、または戻りセットが大きすぎてネットワーク・リソースが過度に消費される可能性がある場合、このメソッドを使用します。
KVStore.multiGetIterator()
は、レコードのセット全体を一度に返しません。かわりに、イテレータ内のキーと値のペアのフェッチをバッチ処理し、使用可能な帯域幅を独占することなく、ネットワーク往復を最小限にします。
このメソッドではトランザクション型の操作にならないことに注意してください。取得がバッチ処理されるため、取得操作全体を行ううちに戻りセットが変更されることがあります。その結果、このメソッドを使用する場合、操作の原子性が失われます。
このメソッドでは、同じメジャー・パス・コンポーネントを共有するレコードの順序付き走査を行えます。指定するメジャー・パス・コンポーネントは、コンポーネントの完全なセットを表す必要があります。
このメソッドを使用するには、次の指定を行う必要があります。
-
走査方向。
-
各ネットワーク往復でフェッチするキーの推奨数。値0を指定すると、内部的に決められたデフォルトが使用されます。
-
その子ペアがフェッチ対象になるキー。
他にも指定できるパラメータがあり、前述のリストはこのメソッドを使用するために最小限必要な情報を示していることに注意してください。
たとえば、次の例は、使用するキーを表しているとします。
/Hats/-/baseball
/Hats/-/baseball/longbill
/Hats/-/baseball/longbill/blue
/Hats/-/baseball/longbill/red
/Hats/-/baseball/shortbill
/Hats/-/baseball/shortbill/blue
/Hats/-/baseball/shortbill/red
/Hats/-/western
/Hats/-/western/felt
/Hats/-/western/felt/black
/Hats/-/western/felt/gray
/Hats/-/western/leather
/Hats/-/western/leather/black
/Hats/-/western/leather/gray
次のようにして、メジャー・キー・コンポーネントHats
を使用するすべてのレコードを取得できます。
package kvstore.basicExample;
...
import oracle.kv.Direction;
import oracle.kv.Key;
import oracle.kv.Value;
import oracle.kv.KeyValueVersion;
import java.util.ArrayList;
import java.util.Iterator;
...
ArrayList<String> majorComponents = new ArrayList<String>();
...
// Define the major and minor path components for the key
majorComponents.add("Hats");
// Create the retrieval key
Key myKey = Key.createKey(majorComponents);
// Now retrieve the records. Note that we do not show the creation of
// the kvstore handle here.
Iterator<KeyValueVersion> i =
kvstore.multiGetIterator(Direction.FORWARD, 0,
myKey, null, null);
while (i.hasNext()) {
Value v = i.next().getValue();
// Do some work with the Value here
}