ID | IEP-32 |
Author | |
Sponsor |
|
Created | |
Status | DRAFT |
Currently batch updates on page memory level are not implemented in Ignite. The internal structures such as BPlusTree and FreeList don't provide support for them. The performance of batch operations (putAll, datastreamer, preloader) can be improved by implementing batch updates on page memory level.
Profiling the current rebalancing process shows that most of the time is spent on working with FreeList and BPlusTree (details Cluster re-balance in Ignite#balanceinIgnite-Profilingcurrentprocess).
Currently, when updating the batch of cache entries in off heap, each entry is processed separately.
Each entry update in PageMemory can be divided into the following steps:
In Ignite search and update of key in tree implemented through the "invoke" operation, to understand the needs for this operation, it is necessary to describe B+ tree in more detail.
The keys of the tree (hashes) are stored on the B+ tree pages (index pages), the cache key-value (data row) itself is stored on data pages. Each item on the index page includes a link to the data page item (pageId + itemId).
In general, a B-tree supports find, put and remove operations. For put/remove, you must firstly find the point of insertion/update/removal.
So, cache entry update without invoke operation should look like this:
To prevent a redundant secondary search in the case described above the "invoke" operation was introduced. This operation has the following scheme of execution:
OffHeapManager.invoke |-> BPlusTree.invoke | | | | | | | |-> Invoke.invokeClosure() | | |-> UpdateClosure.call(foundRow) | | | |- compare entry version | | | |- newRow = create newRow on data page | | | |- treeOp = PUT/REMOVE/NOOP | | | | | \-> read treeOp -> create operation closure (Put(newRow)/Remove(row)) | | | \-> Invoke.found()/notFound() -> exec opearation closure | | \-> finishUpdate/finishRemove
Saving a cache entry on data page consists of the following operations:
Implementation should consists of two major related improvements:
Improves the time to remove/insert pages in FreeList, pages locking and update item counters.
Improves the time of searching and inserting a range of keys.
// Describe project risks, such as API or binary compatibility issues, major protocol changes, etc.
// Links to discussions on the devlist, if applicable.
// Links to various reference documents, if applicable.