By default, store reads are performed using multiple threads,
the number of which is chosen by the number of cores available
to your code. You can configure the maximum number of
client-side threads to be used for the scan, as well as the
number of results per request and the maximum number of result
batches that the Oracle NoSQL Database client can hold before the scan pauses.
To do this, use the TableIteratorOptions
class. You pass this to
TableAPI.tableIterator()
. This creates
a TableIterator
that uses the specified
parallel scan configuration.
You cannot configure the number of scans you use for your reads if you are using indexes.
For example, to retrieve all of the records in the store using 5 threads in parallel, you would do this:
package kvstore.basicExample; ... import oracle.kv.Consistency; import oracle.kv.Direction; import oracle.kv.KVStore; import oracle.kv.table.FieldRange; import oracle.kv.table.PrimaryKey; import oracle.kv.table.MultiRowOption; import oracle.kv.table.Row; import oracle.kv.table.Table; import oracle.kv.table.TableAPI; import oracle.kv.table.TableIterator; import oracle.kv.table.TableIteratorOptions; ... // KVStore handle creation is omitted for brevity ... TableAPI tableH = kvstore.getTableAPI(); Table myTable = tableH.getTable("myTable"); // Construct the PrimaryKey. PrimaryKey key = myTable.createPrimaryKey(); key.put("itemType", "Hats"); key.put("itemCategory", "baseball");TableIteratorOptions tio = new TableIteratorOptions(Direction.UNORDERED, Consistency.NONE_REQUIRED, 0, // timeout null, // timeout units 5, // number of concurrent // threads 0, // results per request 0); // max result sets
// Exception handling is omitted, but in production code // ConsistencyException, RequestTimeException, and FaultException // would have to be handled. TableIterator<Row> iter = tableH.tableIterator(key, null,tio
); try { while (iter.hasNext()) { Row row = iter.next(); // Examine your row's fields here } } finally { if (iter != null) { iter.close(); } }