[ 
https://issues.apache.org/jira/browse/IGNITE-6945?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16268822#comment-16268822
 ] 

Vladimir Ozerov commented on IGNITE-6945:
-----------------------------------------

[~tledkov-gridgain], my comments:
1) BinaryObjectOffheapImpl: I think it is illegal to "copy" object this way. We 
should copy data from offheap to heap and return BinaryObjectImpl.
2) Usage of GridCloseableCursor and/or Closeable is bad idea, because this may 
lead to unexpected calls to "close" in future. Let's define separate interface 
for this.
3) Why do we push flag to CacheOperationContext? Looks wrong to me, as it 
doesn't relate to cache. This is indexing stuff, GridH2QueryContext should be 
enough.
4) H2Tree.compare - why do we cleanup temp row in one place, but do not do this 
after another getRow() call below?
5) Is it possible to remove all current changes from BPlusTree and perform 
close in H2 classes? It looks strange that we call unrelated unlocks in all 
tree types just to support local SQL queries. You can do that as follows: 
define a kind of registry of binary objects to be closed; pass it to BPlusTree 
when cursor is created; use it inside H2LeafIO and H2ExtrasLeadIO classes to 
track pages to be unlocked. Will that work? Ideally, there should be no changes 
to BPlusTree and CacheDataRow.

> SQL: optionally do not copy offheap rows for local SqlQuery
> -----------------------------------------------------------
>
>                 Key: IGNITE-6945
>                 URL: https://issues.apache.org/jira/browse/IGNITE-6945
>             Project: Ignite
>          Issue Type: Task
>          Components: sql
>            Reporter: Vladimir Ozerov
>            Assignee: Taras Ledkov
>             Fix For: 2.4
>
>
> Currently when iterating over rows we eagerly materialize them [1]. If key or 
> value are large enough, we could loose a lot of time on offheap-heap copying. 
> To partially mitigate this, we can do the following:
> 1) Add new flag {{SqlQuery.localNoCopy}} which is applicable only for local 
> queries.
> 2) When enabled we will not copy final {{_KEY}} and {{_VAL}} columns to heap. 
> but rather wrap them into {{BinaryOffheapObjectImpl}}
> 3) These rows must be released when query iterator switches to the next row.
> [1] {{H2RowFactory.getRow}}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to