Vladimir Ozerov created IGNITE-6983:
---------------------------------------
Summary: SQL: optimize CREATE INDEX and BPlusTree interaction
Key: IGNITE-6983
URL: https://issues.apache.org/jira/browse/IGNITE-6983
Project: Ignite
Issue Type: Task
Components: cache, sql
Reporter: Vladimir Ozerov
Fix For: 2.4
Currently index is built as follows:
1) Get next entry from partition's tree
2) Read it's key (copy to heap)
3) Acquire lock on {{GridCacheMapEntry}}
4) Lookup the same key in the tree from the top
5) Read it's value (copy to heap)
6) Add to index.
This is very complex flow. We can optimize two things - tree lookup and value
deserialization as follows:
1) Every data page will have update counter, which is incremented every time
anything is changed.
2) When lock on {{GridCacheMapEntry}} is acquired, we will acquire lock on the
data page and re-check update counter.
3) If page was changed between iterator read and lock acquisition then use old
flow.
4) Otherwise - set read lock on the page, read value as *offheap* object, apply
it to index.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)