パラレル・スキャン
デフォルトでは、ストアの読取りは複数のスレッドを使用して実行され、その数はコードで使用可能なコアの数によって決まります。スキャンに使用するクライアント側のスレッドの最大数、およびスキャンが一時停止するまでにOracle NoSQL Databaseクライアントが保持できる要求ごとの結果の数と結果バッチの最大数も構成できます。これを実行するには、TableIteratorOptions
クラスを使用します。これをTableAPI.tableIterator()
に渡します。これにより、指定されたパラレル・スキャン構成を使用するTableIterator
が作成されます。
ノート:
索引を使用している場合には、読取りに使用するスキャンの数は構成できません。
たとえば、ストアの全レコードの取得に5スレッドを並行して使用する場合は、次のようにします。
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();
}
}