SnapshotVersion

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

SnapshotVersion

Markus Reich
Hi,

I always thought that when the content of an object changes (by commit) the
version gets incremented. I analyzed this a bit further and found sthg.
which is very clear for me :-/

When I have two DataObjects with the same key/id and I change a value in
one Object, I got a higher version after committing the changes. The other
DataObjects also "gets" the new value, but the snapshot version stays the
same?

The background is that I try to build a cache on computed values of
DataObjects, so I need an indicator for invalidating my cache, I thought
snapshot version would be perfect :-) but so it seems that this won't work
for my idea :-/

best regards
Meex
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: SnapshotVersion

Andrus Adamchik
Hi Markus,

Snapshot version reflects the version of a cached snapshot that was used to sync the current state of the object (this is probably obvious). The behavior observed by you may actually be a bug (and we may need to investigate it).

Generally I would recommend against relying too much on snapshot version API. I always considered it an implementation detail (though of course it is publicly accessible... oh well) that may easily fall victim of a future DataObject redesign (e.g. see the parallel 'Fetching lots of objects' thread).

Can you explain how your cache is intended to work? Perhaps there is a callback/listener solution to it?

Andrus

> On Mar 6, 2017, at 5:04 PM, Markus Reich <[hidden email]> wrote:
>
> Hi,
>
> I always thought that when the content of an object changes (by commit) the
> version gets incremented. I analyzed this a bit further and found sthg.
> which is very clear for me :-/
>
> When I have two DataObjects with the same key/id and I change a value in
> one Object, I got a higher version after committing the changes. The other
> DataObjects also "gets" the new value, but the snapshot version stays the
> same?
>
> The background is that I try to build a cache on computed values of
> DataObjects, so I need an indicator for invalidating my cache, I thought
> snapshot version would be perfect :-) but so it seems that this won't work
> for my idea :-/
>
> best regards
> Meex

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: SnapshotVersion

Markus Reich
Hi Andrus,

I have some getters in DataObjects that use some DB properties for
calculation, e.g. I read other data from DB and to kind of lookups, so I
got a much better performance when I introtuced a caching of this
calculated values. I just use a concurrent hash map to realize the caching.
Now I need a trigger for invalidation of the cached values, when the
 DataObject itself get's invalidated?

regards
Meex

Andrus Adamchik <[hidden email]> schrieb am Mi., 8. März 2017 um
20:24 Uhr:

> Hi Markus,
>
> Snapshot version reflects the version of a cached snapshot that was used
> to sync the current state of the object (this is probably obvious). The
> behavior observed by you may actually be a bug (and we may need to
> investigate it).
>
> Generally I would recommend against relying too much on snapshot version
> API. I always considered it an implementation detail (though of course it
> is publicly accessible... oh well) that may easily fall victim of a future
> DataObject redesign (e.g. see the parallel 'Fetching lots of objects'
> thread).
>
> Can you explain how your cache is intended to work? Perhaps there is a
> callback/listener solution to it?
>
> Andrus
>
> > On Mar 6, 2017, at 5:04 PM, Markus Reich <[hidden email]>
> wrote:
> >
> > Hi,
> >
> > I always thought that when the content of an object changes (by commit)
> the
> > version gets incremented. I analyzed this a bit further and found sthg.
> > which is very clear for me :-/
> >
> > When I have two DataObjects with the same key/id and I change a value in
> > one Object, I got a higher version after committing the changes. The
> other
> > DataObjects also "gets" the new value, but the snapshot version stays the
> > same?
> >
> > The background is that I try to build a cache on computed values of
> > DataObjects, so I need an indicator for invalidating my cache, I thought
> > snapshot version would be perfect :-) but so it seems that this won't
> work
> > for my idea :-/
> >
> > best regards
> > Meex
>
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: SnapshotVersion

Andrus Adamchik
You can store those values in each DataObject instance variables and map a PostLoad callback on the entity (Modeler > Select ObjEntity in question > Select "Callbacks" tab). In the callback method you can reset the values. More info on callbacks:

http://cayenne.apache.org/docs/4.0/cayenne-guide/lifecycle-events.html

Andrus


> On Mar 8, 2017, at 10:31 PM, Markus Reich <[hidden email]> wrote:
>
> Hi Andrus,
>
> I have some getters in DataObjects that use some DB properties for
> calculation, e.g. I read other data from DB and to kind of lookups, so I
> got a much better performance when I introtuced a caching of this
> calculated values. I just use a concurrent hash map to realize the caching.
> Now I need a trigger for invalidation of the cached values, when the
> DataObject itself get's invalidated?
>
> regards
> Meex
>
> Andrus Adamchik <[hidden email]> schrieb am Mi., 8. März 2017 um
> 20:24 Uhr:
>
>> Hi Markus,
>>
>> Snapshot version reflects the version of a cached snapshot that was used
>> to sync the current state of the object (this is probably obvious). The
>> behavior observed by you may actually be a bug (and we may need to
>> investigate it).
>>
>> Generally I would recommend against relying too much on snapshot version
>> API. I always considered it an implementation detail (though of course it
>> is publicly accessible... oh well) that may easily fall victim of a future
>> DataObject redesign (e.g. see the parallel 'Fetching lots of objects'
>> thread).
>>
>> Can you explain how your cache is intended to work? Perhaps there is a
>> callback/listener solution to it?
>>
>> Andrus
>>
>>> On Mar 6, 2017, at 5:04 PM, Markus Reich <[hidden email]>
>> wrote:
>>>
>>> Hi,
>>>
>>> I always thought that when the content of an object changes (by commit)
>> the
>>> version gets incremented. I analyzed this a bit further and found sthg.
>>> which is very clear for me :-/
>>>
>>> When I have two DataObjects with the same key/id and I change a value in
>>> one Object, I got a higher version after committing the changes. The
>> other
>>> DataObjects also "gets" the new value, but the snapshot version stays the
>>> same?
>>>
>>> The background is that I try to build a cache on computed values of
>>> DataObjects, so I need an indicator for invalidating my cache, I thought
>>> snapshot version would be perfect :-) but so it seems that this won't
>> work
>>> for my idea :-/
>>>
>>> best regards
>>> Meex
>>
>>

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: SnapshotVersion

Markus Reich
Perfect!!! Thx Meex

Andrus Adamchik <[hidden email]> schrieb am Do., 9. März 2017 um
07:20 Uhr:

> You can store those values in each DataObject instance variables and map a
> PostLoad callback on the entity (Modeler > Select ObjEntity in question >
> Select "Callbacks" tab). In the callback method you can reset the values.
> More info on callbacks:
>
> http://cayenne.apache.org/docs/4.0/cayenne-guide/lifecycle-events.html
>
> Andrus
>
>
> > On Mar 8, 2017, at 10:31 PM, Markus Reich <[hidden email]>
> wrote:
> >
> > Hi Andrus,
> >
> > I have some getters in DataObjects that use some DB properties for
> > calculation, e.g. I read other data from DB and to kind of lookups, so I
> > got a much better performance when I introtuced a caching of this
> > calculated values. I just use a concurrent hash map to realize the
> caching.
> > Now I need a trigger for invalidation of the cached values, when the
> > DataObject itself get's invalidated?
> >
> > regards
> > Meex
> >
> > Andrus Adamchik <[hidden email]> schrieb am Mi., 8. März 2017 um
> > 20:24 Uhr:
> >
> >> Hi Markus,
> >>
> >> Snapshot version reflects the version of a cached snapshot that was used
> >> to sync the current state of the object (this is probably obvious). The
> >> behavior observed by you may actually be a bug (and we may need to
> >> investigate it).
> >>
> >> Generally I would recommend against relying too much on snapshot version
> >> API. I always considered it an implementation detail (though of course
> it
> >> is publicly accessible... oh well) that may easily fall victim of a
> future
> >> DataObject redesign (e.g. see the parallel 'Fetching lots of objects'
> >> thread).
> >>
> >> Can you explain how your cache is intended to work? Perhaps there is a
> >> callback/listener solution to it?
> >>
> >> Andrus
> >>
> >>> On Mar 6, 2017, at 5:04 PM, Markus Reich <[hidden email]>
> >> wrote:
> >>>
> >>> Hi,
> >>>
> >>> I always thought that when the content of an object changes (by commit)
> >> the
> >>> version gets incremented. I analyzed this a bit further and found sthg.
> >>> which is very clear for me :-/
> >>>
> >>> When I have two DataObjects with the same key/id and I change a value
> in
> >>> one Object, I got a higher version after committing the changes. The
> >> other
> >>> DataObjects also "gets" the new value, but the snapshot version stays
> the
> >>> same?
> >>>
> >>> The background is that I try to build a cache on computed values of
> >>> DataObjects, so I need an indicator for invalidating my cache, I
> thought
> >>> snapshot version would be perfect :-) but so it seems that this won't
> >> work
> >>> for my idea :-/
> >>>
> >>> best regards
> >>> Meex
> >>
> >>
>
>
Loading...