If you are sending around notifications why do you need to update the cache?

Wouldn't the cache (assuming distributed here) have already been
updated when user 4 saved to the db and published the notification?

Greg

On Thu, Aug 5, 2010 at 12:07 PM, Huge <[email protected]> wrote:
> Thanks Tim.
>
> "Why not just fetch and update the object in question with the data
> you
> received from some other source, and the cache (and eventually the
> db)
> will be up to date."
>
> I guess my point is, that when I receive the object via the Network,
> it was because somebody else on the Network has already just recently
> committed that object to the database, and I'm being notified of that
> fact.
>
> Imagine a Doctor's office with 20 people running the software
> connected via P2P.  One person saves an object and notifies all the
> other ones of that fact via the Network.  What I'm trying to avoid is
> then all 20 workstations going and selecting that object out of the
> database.  They just got it off the network, so all the data the
> client needs, it already has.
>
> It seems to me the better approach would be to receive the object off
> the network, and have it "absorb" into my system completely, and not
> have to make another trip from each client to the database in order to
> verify the correctness of the object.  Just treat it as the "gospel"
> master object and replace any other previous version of that object
> with the one received off the network.
>
> Why does it seem like people want to challenge everything I'm doing,
> instead of considering the possibility I might have a good idea or a
> unique need?
>
> "If you insert into that cache manually from some other source, you
> completely violate that contract."
>
> What I'm saying is that by providing a SessionFactory.Evict() method,
> hasn't this "contract" essentially been violated already?  And if it
> has, then why not enjoy this and expand on it to let it be a 2 way
> street?
>
> H
>
>
>
> On Aug 5, 9:32 am, Tim Hoolihan <[email protected]> wrote:
>> The discussion seems to be missing a fundamental point of L2 cache.
>> If you get an object, or collection of objects via NHibernate with L2
>> cache, you don't know or care if the object is coming from the cache
>> or the database.  The assumption is, that if you do not hit the
>> database that you are getting an up-to-date object that is or will be
>> committed to the db at the appropriate time.  That is an implicit
>> contract in the nature of caching an ORM.
>>
>> If you insert into that cache manually from some other source, you
>> completely violate that contract.  There is no guarantee that the next
>> person fetching an object (or collection) will get data that is up-to-
>> date and will be (or already is) persisted in the database.
>>
>> You are bypassing the mechanism which NHibernate tracks what in the
>> cache needs flushed to the DB, and thus breaking the entire point of
>> having the cache.
>>
>> Why not just fetch and update the object in question with the data you
>> received from some other source, and the cache (and eventually the db)
>> will be up to date.  Data coming in from some other source should be
>> treated just like any other disconnected object, and there is tons of
>> documentation about dealing with this in NHibernate.
>>
>> Or am I missing something about your request?
>>
>> On Aug 5, 11:18 am, Huge <[email protected]> wrote:
>>
>>
>>
>> > Thank you, one and all, for the good insight.  I'm new to NHibernate
>> > and I might have dumb questions or perhaps be too wordy.  You can say
>> > whatever you want about me, I also have a thick skin, like Fabio said,
>> > you will have a very hard time to offend me :)
>>
>> > So, please if you could just clarify a little more, that would be
>> > great.  What did you mean by:
>>
>> > "the underlying caching system used for l2 caching is the one you can
>> > add the object to yourself, that's what was meant."
>>
>> > Great so it does sound like there's a way to add an object received
>> > via network connection into the L2 cache, by accessing "the underlying
>> > system".  But in some ways that last statement contradicted your
>> > previous few which said that was the ORM's job.  If you could just
>> > provide a link or two that might demonstrate how to do add an object
>> > to that myself, I think that would solve my original need.
>>
>> > Thanks again, H
>>
>> > On Aug 5, 1:21 am, "Frans Bouma" <[email protected]> wrote:
>>
>> > > Apparently no-one else is mature enough to answer this guy's questions, 
>> > > so
>> > > let me give it a try.
>>
>> > > > "The NH cache is for objects retrieved by NH"
>>
>> > > > I understand that.  What confuses me is that somebody wrote an API to 
>> > > > take
>> > > > things out of that cache without writing an API to put things into it.
>>
>> > > > Why allow the ability to take something out of that cache?  Somebody 
>> > > > had
>> > > > justification for writing such a function back in the day.
>>
>> > >         The caching mechanism is in the o/r mapper, it's FOR the o/r 
>> > > mapper,
>> > > when it materializes entity class instances with the data from the db. So
>> > > objects end up in the cache because the o/r mapper decided to do so.
>>
>> > >         It can be you need to remove an object from the cache, because 
>> > > you
>> > > removed it from the db using other means, e.g. a trigger, a separate 
>> > > process
>> > > on another machine, you name it. This way you can, in case of emergency,
>> > > remove it. I think that's the reason behind this method but we can only
>> > > guess, we didn't write the method. I agree that it's not a shiny example 
>> > > of
>> > > proper design, but NHibernate has plenty of that kind of hodgepodge 
>> > > stuff,
>> > > added during the years, as it's a framework which exists for a long time
>> > > (and inherited it from the Java version)
>>
>> > > > So, isn't that same justification viable for a reason to be able to 
>> > > > stuff
>> > > > something into that cache?  Even better yet a
>> > > > SessionFactory.Replace(object) would be perfect, because I just need to
>> > > take
>> > > > the new copy of Object A and overwrite the old Object A and have that 
>> > > > new
>> > > > Object A be the master.
>>
>> > >         that would mean you'd place yourself on the seat of the o/r 
>> > > mapper
>> > > which decides when to keep objects in the cache. That's not your job, 
>> > > leave
>> > > that to the o/r mapper. If you want to use a cache for your objects, use 
>> > > ...
>> > > a cache :) The l2 cache here is out of reach so use another one.
>>
>> > > > "If you are getting it from other source, you can cache it yourself 
>> > > > using
>> > > > the same underlying cache (syscache, memcached, etc)"
>>
>> > > > I'm not sure what you mean.  Are you saying there is a way to stuff an
>> > > > object into the L2 cache?  If so, how do I get at the SessionFactory's
>> > > > underlying memory structure that is used to implement that cache?  Or, 
>> > > > are
>> > > > you saying that I should implement my own cache, separate from
>> > > > SessionFactory?  In that case, what good would it do, because
>> > > SessionFactory
>> > > > wouldn't be aware that I have a separate cache where it could find 
>> > > > objects
>> > > > instead of selecting them.
>>
>> > >         the underlying caching system used for l2 caching is the one you 
>> > > can
>> > > add the object to yourself, that's what was meant.
>>
>> > >                 FB
>>
>> > > > Thanks for your help.
>> > > > Hugh
>>
>> > > > --
>> > > > You received this message because you are subscribed to the Google 
>> > > > Groups
>> > > > "nhusers" group.
>> > > > To post to this group, send email to [email protected].
>> > > > To unsubscribe from this group, send email to
>> > > > [email protected].
>> > > > For more options, visit this group at
>> > > >http://groups.google.com/group/nhusers?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "nhusers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> For more options, visit this group at 
> http://groups.google.com/group/nhusers?hl=en.
>
>



-- 
Les erreurs de grammaire et de syntaxe ont été incluses pour m'assurer
de votre attention

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to