Key/Data Pairs and Bulk Operations

Bulk operations in the driver APIs are quite different from the Java base APIs. In Java base APIs, multiple entries are encoded into a single byte array. In the driver APIs, they are simply maintained as a list of entries. As a consequence, the MultipleEntry class has no counterpart in the driver APIs, and SMultipleDataEntry , SMultipleKeyDataEntry and SMultipleRecnoDataEntry are no longer subclasses of SDatabaseEntry. To support functions that accept any type of data entries, SDatabaseEntryBase is added as the base interface of all data entry classes, and SMultiplePairs is added as the base class of SMultipleKeyDataEntry and SMultipleRecnoDataEntry.

In driver APIs, the amount of data to be returned in a single bulk retrieval is not limited by a buffer size, because SMultipleDataEntry , SMultipleKeyDataEntry or SMultipleRecnoDataEntry does not use a byte array buffer. Instead, the number of entries to be returned is specified with the setBatchSize method:

SEnvironment env = ...

// Open the database with the default configuration.
SDatabase db = env.openDatabase(null, "db", null, null);

// Create a SMultipleDataEntry for bulk retrieval.
SMultipleDataEntry dataEntries = new SMultipleDataEntry();

// Return at maximum of 10 data items from a single retrieval.
dataEntries.setBatchSize(10);

// Perform a bulk retrieval to return multiple data items
// for the same duplicated key.
db.get(null, new SDatabaseEntry("key".getBytes()), dataEntries, null);

// Iterate over the retrieved items.
SDatabaseEntry item = new SDatabaseEntry();
while (dataEntries.next(item)) {
    // Do something for each item.
}