Thanks!
1.
1. "Ignite feeds H2 rows that it asks for, and H2 creates indexes on
them and executes queries on them." - what exactly do you mean
by that? Do
you mean that all parts of a query that use indexes are executed by H2,
then the actual data is retrieved from Ignite pages, and the final
(non-indexed) parts of the query executed by Ignite?
2. What happens when I create an index on a new column? Is the index
created in Ignite (and stored in Ignite pages?), or is it created in H2?
2. The reason I was asking about AFFINITY_KEY, _key_PK and _key_PK_hash
indexed is that in this code
<https://github.com/apache/ignite/blob/56975c266e7019f307bb9da42333a6db4e47365e/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableDescriptor.java>
it
looks like they are created in H2
On Mon, Sep 17, 2018 at 8:36 AM Ilya Kasnacheev <[email protected]>
wrote:
> Hello!
>
> 1. H2 does not store data but, as far as my understanding goes, it created
> SQL indexes from data. Ignite feeds H2 rows that it asks for, and H2
> creates indexes on them and executes queries on them.
> 2. Ignite always has special index on your key (since it's a key-value
> storage it can always find tuple by key). Ignite is also aware of key's
> hash code, and affinity key value always maps to one partition of data (of
> 1024 by default). Those are not H2 indexes and they're mostly used on
> planning stage. E.g. you can map query to one node if affinity key is
> present in the request.
> 3. Data is brought onto the heap to read any fields from row. GROUP BY
> will hold its tuples on heap. Ignite has configurable index inlining where
> you can avoid reading objects from heap just to access indexed fields.
> 4. With GROUP BY, lazy evaluation will not help you much. It will still
> have to hold all data on heap at some point. Lazy evaluation mostly helps
> with "SELECT * FROM table" type queries which provide very large and boring
> result set.
>
> Hope this helps.
> --
> Ilya Kasnacheev
>
>
> пт, 14 сент. 2018 г. в 17:39, eugene miretsky <[email protected]>:
>
>> Hello,
>>
>> Trying to understand how exactly SQL queries are executed in Ignite. A
>> few questions
>>
>>
>> 1. To what extent is H2 used? Does it store the data? Does it create
>> the indexes? Is it used only for generating execution plans? I believe
>> that
>> all the data used to be stored in H2, but with the new durable memory
>> architecture, I believe that's no longer the case.
>> 2. Which indexes are used? Ignite creates B+ tree indexes and stores
>> them in Index pages, but I also see AFFINITY_KEY, _key_PK and _key_PK_hash
>> indexes created in H2.
>> 3. When is data brought onto the heap? I am assuming that groupby and
>> aggregate require all the matching queries to first be copied from
>> off-heap
>> to heap
>> 4. How does lazy evaluation work? For example, for group_by, does it
>> bring batches of matching records with the same group_by key onto the
>> heap?
>>
>> I am not necessarily looking for the exact answers, but rather pointer in
>> the right direction (documentation, code, jiras)
>>
>> Cheers,
>> Eugene
>>
>