Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
Description
In order to increase metaStorage.range() performance that currently retrieves entries one by one it's possible to implement simple batching. As an initial solution we might hardcode the batch-size.
Basically speaking it's required to update CursorNextCommand.
Instead of
Entry e = (Entry) cursorDesc.cursor().next();
clo.result(new SingleEntryResponse(e.key(), e.value(), e.revision(), e.updateCounter()));
we might use something similar to
List<SingleEntryResponse> batch = new ArrayList<>(RANGE_CURSOR_BATCH_SIZE); for (int i = 0; i < RANGE_CURSOR_BATCH_SIZE; i++) { Entry e = (Entry) cursorDesc.cursor().next(); batch.add(new SingleEntryResponse(e.key(), e.value(), e.revision(), e.updateCounter())); if (! cursorDesc.cursor.hasNext()) { break; } } clo.result(new MultipleEntryResponse(batch));
It's not trivial to reimplement rocks cursors to also use batching, however it's not that important because rocks cursors are always local.
Besides that it's required to update org.apache.ignite.internal.metastorage.client.CursorImpl with client-side-iteration over batched data and requesting new portion if nothing left.
Attachments
Issue Links
- relates to
-
IGNITE-16760 Performance degradation of IgniteTables#tables after configuration changes
- Resolved
- links to