Re: Re: ZODB with Lazy evaluation / Caching / Data Flow programming

"Wong, Byron" <[email protected]> Mon, 30 Apr 2018 17:54:21 +0800
Newsgroups gmane.comp.web.zope.zodb
Message-ID <CAGqXE6JCMa3iHYw4Uvvm8+8cTePg-f6+km-mu4HeX6OoxKZEzg@mail.gmail.com>
thank you all for the pointers and suggestions!

On Mon, Apr 30, 2018 at 5:53 PM, Wong, Byron <[email protected]> wrote:

> thanks Tres. This is a good trick and I will keep that in mind.
>
> On Fri, Apr 27, 2018 at 11:13 PM, Tres Seaver <[email protected]>
> wrote:
>
>> On 04/27/2018 02:43 AM, Wong, Byron wrote:
>> > With regards to the consistency across computers issues -- yes in my
>> case,
>> > it's fine that the read-only client are using a slightly stale data. In
>> > fact, that was the model in my previous company... from time to time,
>> they
>> > will have to "refresh" the in-memory cache and ensure the state is
>> > consistent with that's in the database. I saw the YouTube demo on 2 Tier
>> > Kanban by Jim ... (this link
>> > https://www.youtube.com/watch?v=6v1sIw5j4ss&t=11s)  and see how new
>> feature
>> > can automatically pop up after object being persisted in DB... that's
>> seems
>> > pretty awesome, but my guess is without some proper listener logic, it's
>> > hard to achieve?
>>
>> ZEO does propagate invalidation messages for objects modified in a
>> transaction.  I don't know from PythonFlow / MDF, but if you can arrange
>> to
>> persist an "aggregate" object (think invoice) along with the "detail"
>> objects (think line items in the invoice), then you can store the cached
>> computations as what ZODB calls "volatile" attributes (those whose names
>> start with "_v_").  Volatile attributes are never persisted, and are
>> therefore discarded whenever their persistent instance is invalidated /
>> reloaded.  E.g.:
>>
>>     class Invoice(Persistent):
>>
>>         @property
>>         def subtotal(self):
>>             cached = getattr(self, '_v_subtotal', None)
>>             if cached is not None:
>>                 return cached
>>             result = self._v_subtotal = self._compute_subtotal()
>>             return result
>>
>> As long as the Invoice instance gets modified whenever one of its line
>> items is modified, you get the cache invalidation "for free" from ZODB.
>>
>> If you can't persist the "aggregate" object, then you might need to use
>> some kind of pub-sub event notification to coordinate / distribute the
>> invalidations across hosts.
>>
>>
>> Tres.
>> --
>> ===================================================================
>> Tres Seaver          +1 540-429-0999          [email protected]
>> Palladion Software   "Excellence by Design"    http://palladion.com
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "zodb" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups "zodb" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
For more options, visit https://groups.google.com/d/optout.