When performing multi-key operations in the store, you can specify a depth of records to operate upon. That is, you can indicate whether you want to operate upon:
The specified key and all its children.
The specified key and its most immediate children.
Only the immediate children of the specified key. (The specified key is omitted.)
All of the children of the specified key. (The specified key is omitted.)
By default, multi-key operations operate upon the specified key
and all of its children. To limit the operation to something
else, such as just the key's immediate children,
specify Depth.CHILDREN_ONLY
to the operation's Depth
parameter.
For example, suppose you were using the following keys:
/Products/Hats/-/baseball /Products/Hats/-/baseball/longbill /Products/Hats/-/baseball/longbill/blue /Products/Hats/-/baseball/longbill/red /Products/Hats/-/baseball/shortbill /Products/Hats/-/baseball/shortbill/blue /Products/Hats/-/baseball/shortbill/red /Products/Hats/-/western /Products/Hats/-/western/felt /Products/Hats/-/western/felt/black /Products/Hats/-/western/felt/gray /Products/Hats/-/western/leather /Products/Hats/-/western/leather/black /Products/Hats/-/western/leather/gray
Further, suppose you wanted to retrieve just these records:
/Products/Hats/-/baseball /Products/Hats/-/western
Then you could do this using KVStore.multiGet()
with the appropriate Depth
argument.
package kvstore.basicExample;
...
import oracle.kv.Depth;
import oracle.kv.Key;
import oracle.kv.RequestTimeoutException;
import oracle.kv.Value;
import oracle.kv.ValueVersion;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.SortedMap;
...
ArrayList<String> majorComponents = new ArrayList<String>();
...
// Define the major and minor path components for the key
majorComponents.add("Product");
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.
try {
SortedMap<Key, ValueVersion> myRecords = null;
myRecords = kvstore.multiGet(myKey,
null,
Depth.CHILDREN_ONLY
);
} catch (RequestTimeoutException re) {
// The operation was not completed within the
// timeout value
}