Batching II

To illustrate a second type of batching, we make a slightly different test query to the example in the last section. The only difference is in the choice of string to pass into the query, so that the result of the query is a large set. In this test, the result set is over 25,000 strings. The client query is still significantly longer than the server query, but even the server query now takes several seconds in absolute time.

There is no reason to make the user wait for the whole result set to be transferred before displaying some of the results. Altering the application to send results in batches is quite easy. You need to add an intermediate object to hold the results on the server, which can send the results in batches as required:

public class QueryResultHolderImpl
  implements QueryResultHolder
{
  String[] results;
  int sentSoFar;
  public QueryResultHolderImpl(String[] results)
  {
    this.results = results;
    sentSoFar = 0;
  }

  public resultSize( ){return results.length;}
  public nextBatch(int batchSize)
  {
    String[] batch = new String[batchSize];
    System.arraycopy(results, sentSoFar, batch, 0, batchSize);
    sentSoFar += batchSize;
    return batch;
  }
}

You also need to add methods in the server object to support this batching object:

public QueryResultHolder getBatchedServerQuery(String obj)
{
  return new QueryResultHolderImpl(getQuery(obj, getQueryArray( )));
}

Now the client has the flexibility to request batches of results. The initial call to the query returns as fast as possible, ...

Get Java Performance Tuning now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.