Denis, The whole binary representation of the object is used now for hash code generation and equality comparison. So the answer - all fields are used for this.
Best Regards, Igor On Mon, Apr 10, 2017 at 9:50 PM, Denis Magda <dma...@apache.org> wrote: > Considering this simple example > > INSERT (id, orgId, name, age, address) into Person… > > where id and orgId define Person’s affinity key - PersonKey(id, orgId) > > How do we know which fields to use for hash code generation and equality > comparison? QueryEntity? > > No, it’s unclear how to document it properly. > > — > Denis > > > On Apr 10, 2017, at 11:14 AM, Vladimir Ozerov <voze...@gridgain.com> > wrote: > > > > There is no more such resolver. It was removed. > > > > On Mon, Apr 10, 2017 at 8:58 PM, Denis Magda <dma...@apache.org> wrote: > > > >> Vovan, > >> > >> Before I fix the documentation, what’t the replacement for > >> BinaryFieldIdentiyResolver we used to define field for hash code > >> calculation and equality comparison when DML statements are used? > >> https://apacheignite.readme.io/docs/binary-marshaller# > >> section-binary-field-identity-resolver <https://apacheignite.readme. > >> io/docs/binary-marshaller#section-binary-field-identity-resolver> > >> > >> — > >> Denis > >> > >>> On Apr 9, 2017, at 7:39 AM, Vladimir Ozerov <voze...@gridgain.com> > >> wrote: > >>> > >>> Resolvers were essential for DML because we had broken comparison > >> semantics > >>> of binary objects. This is not the case now. > >>> > >>> Resolver as a whole is normal practice. E.g. it is implemented in .NET > on > >>> core language level and widely used in many cases. Hazelcast has it as > >> well > >>> AFAIK. So it is wrong to think that the whole idea is useless. Think of > >> it > >>> as a comparator's brother. > >>> > >>> The only reason why we need to remove it is missing hash index in new > >>> architecture. It makes sense, as it is better to have AI 2.0 without > >> them, > >>> than no AI 2.0 :-) > >>> > >>> 09 апр. 2017 г. 17:31 пользователь "Sergi Vladykin" < > >>> sergi.vlady...@gmail.com> написал: > >>> > >>>> I guess Resolvers were added to DML just because they already existed > >> since > >>>> 1.9 and we were forced to support them in all the parts of our > product. > >>>> > >>>> We have to stop this practice to add features without clear real life > >> use > >>>> cases for them. > >>>> > >>>> Sergi > >>>> > >>>> 2017-04-09 17:00 GMT+03:00 Denis Magda <dma...@gridgain.com>: > >>>> > >>>>> Sergi, Vovan, > >>>>> > >>>>> Sorry for being annoying but I still didn't get an answer on whether > >> the > >>>>> resolvers are the must for DML. The main reason why we made them up > >> some > >>>>> time ago is to support specific DML use cases. However I can't recall > >> the > >>>>> use cases. > >>>>> > >>>>> -- > >>>>> Denis > >>>>> > >>>>> On Sun, Apr 9, 2017 at 6:54 AM, Sergi Vladykin < > >> sergi.vlady...@gmail.com > >>>>> > >>>>> wrote: > >>>>> > >>>>>> Ok, we need to do 2 things here: > >>>>>> > >>>>>> 1. Drop the resolvers from the source code. > >>>>>> 2. Write a good page in docs on "What makes a correct cache key". > >>>>>> > >>>>>> Who can do that? > >>>>>> > >>>>>> Sergi > >>>>>> > >>>>>> 2017-04-07 9:48 GMT+03:00 Sergi Vladykin <sergi.vlady...@gmail.com > >: > >>>>>> > >>>>>>> It is possible to try adding support of comparison to Resolvers, > but > >>>>> the > >>>>>>> whole approach looks wrong and for now it is better to get rid of > it > >>>>>> while > >>>>>>> we have a chance to break compatibility. > >>>>>>> > >>>>>>> Sergi > >>>>>>> > >>>>>>> 2017-04-07 9:19 GMT+03:00 Valentin Kulichenko < > >>>>>>> valentin.kuliche...@gmail.com>: > >>>>>>> > >>>>>>>> The discussion should've been started with that :) If supporting > >>>>>> resolvers > >>>>>>>> in new architecture is not possible or means too big effort, then > >>>> it's > >>>>>>>> definitely not worth it. > >>>>>>>> > >>>>>>>> -Val > >>>>>>>> > >>>>>>>> On Thu, Apr 6, 2017 at 8:52 PM, Vladimir Ozerov < > >>>> voze...@gridgain.com > >>>>>> > >>>>>>>> wrote: > >>>>>>>> > >>>>>>>>> Dima, > >>>>>>>>> > >>>>>>>>> Yes, they may explode some internals of our indexes. > >>>>>>>>> > >>>>>>>>> 06 апр. 2017 г. 23:32 пользователь "Dmitriy Setrakyan" < > >>>>>>>>> dsetrak...@apache.org> написал: > >>>>>>>>> > >>>>>>>>>> Guys, > >>>>>>>>>> > >>>>>>>>>> Isn't the main issue here that we cannot use the Identity > >>>>> Resolvers > >>>>>> in > >>>>>>>>>> BTrees in the 2.0 version? If yes, then we have to remove them > >>>> no > >>>>>>>> matter > >>>>>>>>>> what. > >>>>>>>>>> > >>>>>>>>>> D. > >>>>>>>>>> > >>>>>>>>>> On Thu, Apr 6, 2017 at 1:23 PM, Sergi Vladykin < > >>>>>>>> sergi.vlady...@gmail.com > >>>>>>>>>> > >>>>>>>>>> wrote: > >>>>>>>>>> > >>>>>>>>>>> Binary key representation is stable when we always have equal > >>>>>>>>> serialized > >>>>>>>>>>> bytes when the original keys are equal. > >>>>>>>>>>> > >>>>>>>>>>> Resolver allows you to have some extra info in the Key and > >>>> equal > >>>>>>>> Keys > >>>>>>>>>> will > >>>>>>>>>>> be serialized into different bytes, which is wrong. > >>>>>>>>>>> > >>>>>>>>>>> Look at the example what you can do with resolvers: > >>>>>>>>>>> > >>>>>>>>>>> We may have some data entry with fields a, b, c. Let's say the > >>>>>>>> unique > >>>>>>>>>> part > >>>>>>>>>>> here is `a` and it the only fields used in Key equals() and > >>>>>>>> hashCode(). > >>>>>>>>>>> Still we may have the following layouts: > >>>>>>>>>>> > >>>>>>>>>>> 1. Ka -> Vbc > >>>>>>>>>>> 2. Kab -> Vc > >>>>>>>>>>> 3. Kabc -> Boolean.TRUE > >>>>>>>>>>> > >>>>>>>>>>> The only 1 is a correct layout, others are plain wrong > >>>> variants > >>>>>> (but > >>>>>>>>> they > >>>>>>>>>>> are still possible with Resolvers) because everything that > >>>> does > >>>>>> not > >>>>>>>>> make > >>>>>>>>>>> Key unique must be in Value. > >>>>>>>>>>> > >>>>>>>>>>> We want to clearly state that if you have something in Key, > >>>> that > >>>>>> is > >>>>>>>> not > >>>>>>>>>>> part of equals(), then the Key is invalid and that stuff must > >>>> be > >>>>>> in > >>>>>>>>>> Value. > >>>>>>>>>>> This allows us to rely on binary representation of a Key to be > >>>>>>>> stable > >>>>>>>>> and > >>>>>>>>>>> have some more optimizations and code simplifications with > >>>>> respect > >>>>>>>> to > >>>>>>>>>> these > >>>>>>>>>>> assumptions. > >>>>>>>>>>> > >>>>>>>>>>> Sergi > >>>>>>>>>>> > >>>>>>>>>>> 2017-04-06 14:24 GMT+03:00 Valentin Kulichenko < > >>>>>>>>>>> valentin.kuliche...@gmail.com>: > >>>>>>>>>>> > >>>>>>>>>>>> Even with my vast expirience I would never claim that I've > >>>>> seen > >>>>>>>>>>>> "everything" :) > >>>>>>>>>>>> > >>>>>>>>>>>> What do you mean by stable binary key representation and how > >>>>>>>>> resolvers > >>>>>>>>>>> make > >>>>>>>>>>>> it unstable? > >>>>>>>>>>>> > >>>>>>>>>>>> -Val > >>>>>>>>>>>> > >>>>>>>>>>>> On Thu, Apr 6, 2017 at 2:36 AM, Sergi Vladykin < > >>>>>>>>>> sergi.vlady...@gmail.com > >>>>>>>>>>>> > >>>>>>>>>>>> wrote: > >>>>>>>>>>>> > >>>>>>>>>>>>> Val, > >>>>>>>>>>>>> > >>>>>>>>>>>>> I know that you have really vast experience in Ignite > >>>>>>>> deployments > >>>>>>>>> and > >>>>>>>>>>>>> probably saw everything that can happen. Did you ever see > >>>>>>>> identity > >>>>>>>>>>>>> resolvers use in real life? I guess no. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Hibernate example is bad here, because if their key is > >>>>>> unstable > >>>>>>>>>> across > >>>>>>>>>>>>> multiple JVMs, it means that it was not designed for > >>>>>> distributed > >>>>>>>>>>> caches a > >>>>>>>>>>>>> priori. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Also knowing in advance about stable binary key > >>>>> representation > >>>>>>>>> allows > >>>>>>>>>>> us > >>>>>>>>>>>> to > >>>>>>>>>>>>> apply additional optimizations, like comparing keys > >>>> without > >>>>>>>>> detaching > >>>>>>>>>>>> them > >>>>>>>>>>>>> from offheap memory. > >>>>>>>>>>>>> > >>>>>>>>>>>>> We always will be able to add this stuff back if we see > >>>>> users > >>>>>>>>> really > >>>>>>>>>>> need > >>>>>>>>>>>>> it. Let's remove it for 2.0. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Sergi > >>>>>>>>>>>>> > >>>>>>>>>>>>> 2017-04-06 11:21 GMT+03:00 Valentin Kulichenko < > >>>>>>>>>>>>> valentin.kuliche...@gmail.com>: > >>>>>>>>>>>>> > >>>>>>>>>>>>>> Alex, > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> To be honest, I don't understand the reasoning behind > >>>> the > >>>>>>>>> removal. > >>>>>>>>>> I > >>>>>>>>>>>>> think > >>>>>>>>>>>>>> resolvers provide good flexibility for different corner > >>>>>> cases > >>>>>>>> and > >>>>>>>>>>> it's > >>>>>>>>>>>> a > >>>>>>>>>>>>>> good thing to have them. Note that they can be applied > >>>> not > >>>>>>>> only > >>>>>>>>> to > >>>>>>>>>>>> cache > >>>>>>>>>>>>>> keys, but to any binary objects. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Hibernate issue is actually a good example of such use > >>>>> case. > >>>>>>>> The > >>>>>>>>>> fact > >>>>>>>>>>>>> that > >>>>>>>>>>>>>> we found an alternative solution doesn't actually mean > >>>>>>>> anything, > >>>>>>>>>>>> because > >>>>>>>>>>>>>> what if this happened not in our module, but in user's > >>>>>>>>> application? > >>>>>>>>>>>>>> Unfortunately, we can't predict everything. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> Error proneness is not a very strong argument either, > >>>>>> because > >>>>>>>> in > >>>>>>>>> my > >>>>>>>>>>>> view > >>>>>>>>>>>>>> these resolvers are as much error prone as > >>>> BinaryIdMapper, > >>>>>> for > >>>>>>>>>>> example. > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> -Val > >>>>>>>>>>>>>> > >>>>>>>>>>>>>> On Wed, Apr 5, 2017 at 11:44 PM, Alexey Goncharuk < > >>>>>>>>>>>>>> alexey.goncha...@gmail.com> wrote: > >>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Denis, > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> Can you suggest a use-case where identity resolver is > >>>>>> needed > >>>>>>>>>> (given > >>>>>>>>>>>>> that > >>>>>>>>>>>>>> we > >>>>>>>>>>>>>>> agree that a key must contain only valuable fields)? > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> 2017-04-05 22:08 GMT+03:00 Denis Magda < > >>>>> dma...@apache.org > >>>>>>> : > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> Where do you want to remove the identity resolvers > >>>>> from? > >>>>>>>> If > >>>>>>>>>> it’s > >>>>>>>>>>>>>> related > >>>>>>>>>>>>>>>> to the internals of Hibernate module then it’s fine > >>>>> but > >>>>>> if > >>>>>>>>> you > >>>>>>>>>>>>> suggest > >>>>>>>>>>>>>>>> removing identity resolvers public interfaces then > >>>> it > >>>>>>>> might > >>>>>>>>> be > >>>>>>>>>> a > >>>>>>>>>>>>> haste > >>>>>>>>>>>>>>>> decision. > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> — > >>>>>>>>>>>>>>>> Denis > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> On Apr 5, 2017, at 7:42 AM, Alexey Goncharuk < > >>>>>>>>>>>>>>> alexey.goncha...@gmail.com> > >>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> +1, I see no other reasons to keep it. > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>> 2017-04-05 13:59 GMT+03:00 Sergi Vladykin < > >>>>>>>>>>>>> sergi.vlady...@gmail.com > >>>>>>>>>>>>>>> : > >>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> +1 > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Lets drop them. > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> Sergi > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> 2017-04-05 13:50 GMT+03:00 Dmitriy Govorukhin < > >>>>>>>>>>>>>>>>>> dmitriy.govoruk...@gmail.com> > >>>>>>>>>>>>>>>>>> : > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> Hi guys, i implemented proxy for IgniteCache in > >>>>>>>> hibernate > >>>>>>>>>>>>>>> integration, > >>>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>> proxy transformate cacheKey to our key wrapper, > >>>>>> leaves > >>>>>>>>> only > >>>>>>>>>>>>>> required > >>>>>>>>>>>>>>>>>>> field. I think we can remove identity resolve, > >>>> it > >>>>>>>> should > >>>>>>>>>> not > >>>>>>>>>>>>> broke > >>>>>>>>>>>>>>>>>>> integration with hibernate. Any objections? > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> On Wed, Mar 29, 2017 at 11:07 PM, Valentin > >>>>>> Kulichenko > >>>>>>>> < > >>>>>>>>>>>>>>>>>>> valentin.kuliche...@gmail.com> wrote: > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> I'm not saying there is no alternative > >>>> solution. > >>>>>> But > >>>>>>>>> let's > >>>>>>>>>>>>>> implement > >>>>>>>>>>>>>>>> it > >>>>>>>>>>>>>>>>>>> and > >>>>>>>>>>>>>>>>>>>> prove that it works first, and remove resolvers > >>>>>> only > >>>>>>>>> after > >>>>>>>>>>>> that. > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> -Val > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> On Wed, Mar 29, 2017 at 12:18 PM, Sergi > >>>> Vladykin > >>>>> < > >>>>>>>>>>>>>>>>>>> sergi.vlady...@gmail.com > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> wrote: > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Guys, nothing is impossible if you know a bit > >>>>>> about > >>>>>>>>>>>> reflection > >>>>>>>>>>>>> in > >>>>>>>>>>>>>>>>>> Java > >>>>>>>>>>>>>>>>>>> :) > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> We had a look at the CacheKey class and it is > >>>>>> easily > >>>>>>>>>>>>> replaceable. > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> Sergi > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> 2017-03-29 21:49 GMT+03:00 Dmitriy Setrakyan < > >>>>>>>>>>>>>>> dsetrak...@apache.org > >>>>>>>>>>>>>>>>>>> : > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> On Wed, Mar 29, 2017 at 11:43 AM, Valentin > >>>>>>>> Kulichenko > >>>>>>>>> < > >>>>>>>>>>>>>>>>>>>>>> valentin.kuliche...@gmail.com> wrote: > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>> "Hibernate key" is the CacheKey class I was > >>>>>>>> referring > >>>>>>>>>> to. > >>>>>>>>>>>>> It's > >>>>>>>>>>>>>>>>>>>> provided > >>>>>>>>>>>>>>>>>>>>>> by > >>>>>>>>>>>>>>>>>>>>>>> Hibernate, not by user and not by us. So I'm > >>>>> not > >>>>>>>> sure > >>>>>>>>>>> it's > >>>>>>>>>>>>>>>>>> possible > >>>>>>>>>>>>>>>>>>>> to > >>>>>>>>>>>>>>>>>>>>>>> replace it. > >>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>> If it is impossible to replace or get rid of > >>>>> the > >>>>>>>>>> Hibernate > >>>>>>>>>>>>> key, > >>>>>>>>>>>>>> is > >>>>>>>>>>>>>>>>>>> this > >>>>>>>>>>>>>>>>>>>>>> discussion valid at all? > >>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>> > >>>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>>> > >>>>>> > >>>>> > >>>> > >> > >> > >