storeIterator()の使用

メジャー・キー・コンポーネントの一部のみ一致するレコードをすべて取得する場合、KVStore.storeIterator()を使用します。このメソッドを使用すると、ストア内のすべてのレコードを反復することも、メジャー・コンポーネントの部分的なセットに一致するすべてのレコードを反復することもできます。

KVStore.storeIterator()は、レコードのセット全体を一度に返しません。かわりに、イテレータ内のキーと値のペアのフェッチをバッチ処理し、使用可能な帯域幅を独占することなく、ネットワーク往復を最小限にします。また、このメソッドで返されるレコードはソートされていません。

このメソッドでは1つの原子的操作にならないことに注意してください。取得がバッチ処理されるため、取得操作全体を行ううちに戻りセットが変更されることがあります。その結果、このメソッドを使用する場合、操作の原子性が失われます。

このメソッドでは、ストア内のレコードの未ソート走査を行えます。キーを指定しない場合、このメソッドはストア内のすべてのレコードを反復します。キーを指定する場合、レコードで使用されているメジャー・キー・コンポーネントの一部のみを指定する必要があります。指定するキーには、マイナー・キー・コンポーネントを含めないでください。

このメソッドを使用するには、次の指定を行う必要があります。

たとえば、次のようなキーを使用するユーザー・レコードを格納しているとします。

/Smith/Bob/-/birthdate
/Smith/Bob/-/phonenumber
/Smith/Bob/-/image
/Smith/Bob/-/userID 
/Smith/Patricia/-/birthdate
/Smith/Patricia/-/phonenumber
/Smith/Patricia/-/image
/Smith/Patricia/-/userID 
/Smith/Richard/-/birthdate
/Smith/Richard/-/phonenumber
/Smith/Richard/-/image
/Smith/Richard/-/userID 
/Wong/Bill/-/birthdate
/Wong/Bill/-/phonenumber
/Wong/Bill/-/image
/Wong/Bill/-/userID

次のようにして、姓がSmithであるすべてのユーザーのレコードをすべて取得できます。

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("Smith");

// 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.storeIterator(Direction.UNORDERED, 0,
                          myKey, null, null);
while (i.hasNext()) {
    Value v = i.next().getValue(); 
    // Do some work with the Value here
}