Alexey G.,

>  How these field extractors will be configured. QueryField and QueryIndex are
already quite complex classes.
> Adding such a closure to configuration would complicate them even further.
May be we can go in "JavaScript" way and pass a string with expression that
will be parsed and evaluated later on server side.

> How these extractors will interact with future SQL drivers (my current guess
- there is no way to define them in SQL)

AFAIK RDBMS support index on expression.
For example: https://sqlite.org/expridx.html

Make sense?

On Tue, Oct 17, 2017 at 3:26 PM, Alexey Goncharuk <
alexey.goncha...@gmail.com> wrote:

> I like this idea. In general case, this will not even require
> deserializing the cache value. Consider a binary tree implementation with a
> binary object node {val, left, right}. In this case, it is impossible to
> have an index of min or max, but with Andrey's suggestion, these indexes
> are trivially extracted.
>
> Two things to consider:
>  * How these field extractors will be configured. QueryField and QueryIndex
> are already quite complex classes. Adding such a closure to configuration
> would complicate them even further.
>  * How these extractors will interact with future SQL drivers (my current
> guess - there is no way to define them in SQL)
>
> Andrey, can you create a ticket and suggest an API design so we can review
> it?
>
> Thanks,
> AG
>
> 2017-10-17 5:44 GMT+03:00 Andrey Kornev <andrewkor...@hotmail.com>:
>
> > Of course it does, Dmitriy! However as I suggested below, the feature
> > should be optional. The current behavior (not requiring user classes on
> the
> > server, etc.) would remain the default one.
> >
> > Also, please realize that not everyone stores their data as POJOs or uses
> > Ignite as a JDBC source -- the use cases that appear to have been the
> main
> > focus of Ignite community lately.
> >
> > Payloads with dynamic structures require more advanced mechanisms for
> > indexing, for example, to avoid the overhead of duplicating the indexable
> > fields as top level fields of the BinaryObjects. In cases where the cache
> > sizes are in tens of millions of entries, the ability to generate index
> > values on the fly rather than store them, would go a long way in terms of
> > reducing memory utilization.
> >
> > In Ignite community finds this feature generally useful, I'd be more than
> > happy to contribute its implementation.
> >
> > Regards
> > Andrey
> >
> > ________________________________
> > From: Dmitriy Setrakyan <dsetrak...@apache.org>
> > Sent: Monday, October 16, 2017 6:14 PM
> > To: dev@ignite.apache.org
> > Subject: Re: Indexing fields of non-POJO cache values
> >
> > On Mon, Oct 16, 2017 at 12:35 PM, Andrey Kornev <
> andrewkor...@hotmail.com>
> > wrote:
> >
> > > [Crossposting to the dev list]
> > >
> > > Alexey,
> > >
> > > Yes, something like that, where the "reference"/"alias" is expressed
> as a
> > > piece of Java code (as part of QueryEntity definition, perhaps) that is
> > > invoked by Ignite at the cache entry indexing time.
> > >
> > > My point is that rather than limiting indexable fields only to
> predefined
> > > POJO attributes (or BinaryObject fields) Ignite could adopt a more
> > general
> > > approach by allowing users designate an arbitrary piece of code (a
> > > lambda/closure) to be used as an index value extractor. In such case,
> the
> > > current functionality (extracting index values from POJO attributes)
> > > becomes just a special case that's supported by Ignite out of the box.
> > >
> >
> > Andrey, this would require deserialization on the server side. It would
> > also require that user classes are present on the server side. Both of
> this
> > scenarios Ignite tries to avoid.
> >
> > Makes sense?
> >
>



-- 
Alexey Kuznetsov

Reply via email to