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.