Unless you are using a query cache then running an ObjectSelect will always
give you fresh data from the DB.
On Wed, Mar 8, 2017 at 3:01 PM Musall, Maik <m...@selbstdenker.ag> wrote:

> Can someone confirm this? Will I always get fresh data from DB with an
> explicit query, or am I at risk being returned stale data from a
> context-local cache that doesn't even see changes that haven been recorded
> in the shared snapshot cache in the meantime, let alone in the database?
>
> I'm still a bit puzzled and out of documentation about the question of how
> to control data freshness. Cayenne seems to be a bit different than EOF in
> this regard, with it's multi-level caching.
>
> Maik
>
>
> > Am 24.02.2017 um 23:24 schrieb Markus Reich <markus.re...@markusreich.at
> >:
> >
> > I think if you start a "standard" query it goes always against the DB,
> this
> > would be the query cache but this is not implicit done, you have to use
> > groups for that.
> > Object cache as I understand works behind the scenes, when you access
> > properties of you persistent entity with getters, then values where read
> > through the GraphManager from Cache.
> > Only OID Queries and RelationalQueries can get their data from cache.
> > Standard SelectQuery always runs a query on DB. But maybe I'm wrong :-/
> >
> > Musall, Maik <m...@selbstdenker.ag> schrieb am Fr., 24. Feb. 2017 um
> > 23:14 Uhr:
> >
> >> Hi Lon,
> >>
> >> so with a context-local cache, you would still execute a regular query,
> >> but that query would not actually hit the database but the cache would
> >> return the result instead? Is it like a result set per query SQL string
> >> which is cached? I don't really understand how those local caches are
> keyed.
> >>
> >> If there is any Cayenne documentation explaining this which I missed,
> I'd
> >> be happt to get a pointer to that.
> >>
> >> Maik
> >>
> >>> Am 24.02.2017 um 18:25 schrieb Lon Varscsak <lon.varsc...@gmail.com>:
> >>>
> >>> I built something similar in EOF to local cache, so I think I can
> answer
> >> at
> >>> least part of the question.
> >>>
> >>> It’s not uncommon for me to have a complex set of queries to do
> something
> >>> like compute pricing on an order.  Rather than having to maintain many
> >> tiny
> >>> caches or ivars with query results, all of my code executes queries to
> >> get
> >>> the data set it needs whenever the pricing calculation is called.  It
> >> makes
> >>> the code simpler, but gives you the performance of having stored the
> >>> results yourself in an ivar (or dictionary).
> >>>
> >>> Add in EHCache and now you can control how long those objects live
> >> (rather
> >>> than the life of an ivar). If they get removed from cache due to cache
> >>> control settings, the next time through the code, it will refetch them
> >> but
> >>> I don’t have to be aware of this from a code perspective.
> >>>
> >>> Where I’m still hung up, is that it’s common for me to have many parts
> of
> >>> my code that are not aware of each other that display/operate on the
> same
> >>> data, and I’m unsure how to update the cache (since there are multiple
> >>> local caches) in between those two components after commit (since
> change
> >>> propagation is turned off by default and even when on is in a separate
> >>> thread so I can’t assume the objects will be refreshed when I need).
> >>>
> >>> -Lon
> >>>
> >>> On Fri, Feb 24, 2017 at 3:00 AM, Musall, Maik <m...@selbstdenker.ag>
> >> wrote:
> >>>
> >>>> Hi all,
> >>>>
> >>>> I'd like to extend this question a bit. I just read the entire
> >> performance
> >>>> tuning chapter again [1], and I'm a bit puzzled especially about the
> >>>> ObjectContext's local caches, which Andrus also recommended to use in
> >> the
> >>>> "A way to refreshObject()" thread:
> >>>>
> >>>>> So instead of micro-optimizations with shared snapshot cache, you
> >> should
> >>>> use queries with cache groups and query cache. They get refetched
> when a
> >>>> cache group is flushed in response to an object commit. So technically
> >> you
> >>>> are not reusing the snapshot cache, but it really doesn't matter. The
> >>>> benefit you get in code simplicity, consistency, and often
> performance,
> >>>> always outweighs that. Besides this approach is cluster-friendly.
> >>>>
> >>>> Coming from EOF I grew the habit of frequently creating short-lived
> >>>> ObjectContexts, so basically every page load uses it's own new
> >>>> ObjectContext to get fresh data from the shared global cache, because
> >> other
> >>>> users may have altered data between page loads. While working on a
> >> page, I
> >>>> have references to the objects that I need there anyway, so I don't
> >>>> understand at all what that context-local cache mechanism should do
> for
> >> me,
> >>>> unless that "create new contexts all the time" strategy is just plain
> >> wrong
> >>>> for Cayenne-based applications?
> >>>>
> >>>> And even if I would use a longer-lived ObjectContext for something,
> >> where
> >>>> would that local cache get in effect? Either I have references to
> >> objects
> >>>> anyway, or I would need to refetch them, which would go through to the
> >>>> database, right? In what case would I get a benefit from a local
> cache?
> >> I
> >>>> didn't find answers to this in the Cayenne Guide.
> >>>>
> >>>> Thanks
> >>>> Maik
> >>>>
> >>>> [1] https://cayenne.apache.org/docs/4.0/cayenne-guide/
> >>>> performance-tuning.html <https://cayenne.apache.org/
> >>>> docs/4.0/cayenne-guide/performance-tuning.html>
> >>>>
> >>>>
> >>>>> Am 23.02.2017 um 09:43 schrieb Markus Reich <
> >> markus.re...@markusreich.at
> >>>>> :
> >>>>>
> >>>>> Hi,
> >>>>>
> >>>>> I'm looking for a more detailed explaination of the caching
> mechanism,
> >> as
> >>>>> we are running a quite important and big web application with
> cayenne,
> >> I
> >>>>> want to fine tune, because we run in some performance issues.
> >>>>>
> >>>>> I only found this
> >>>>> https://cayenne.apache.org/docs/3.0/individual-object-caching.html
> >>>>>
> >>>>> In 4.0 docu I can't find anything
> >>>>>
> >>>>> br
> >>>>> Meex
> >>>>
> >>>>
> >>
> >>
>
>

Reply via email to