Re: [Zope-dev] References, persistence, BTrees
Hi jeffrey, perhaps it might save you a bit of trouble. i've written a publish/subscribe event channel that seems to have must of the functionality listed below although it does use the techniques that you wanted to avoid. its at http://www.zope.org/Members/k_vertigo/Products/EventChannel at the moment its purposefully a simple publish subscribe model with filters. object references are stored via physical path and resolved via unrestrictedTraverse. On Thursday 03 January 2002 04:49 pm, Jeffrey P Shell wrote: I'm experimenting with an event notification service based on a publish-subscribe model for some projects I'm working on. When a subscription comes in, a 'Subscription' object is made, that basically looks like this: class Subscription(Base): def __init__(self, subscriber, eventType, filter=None): self.subscriber = subscriber self.eventType = eventType self.filter = filter def __hash__(self): return hash(self.subscriber) \ hash(self.eventType) \ hash(self.filter) 'subscriber' is a reference to the subscribing object, and it's very likely to be to an object in the ZODB. Is it wise to have more than one persistent reference to a single persistent object? I swear that I had once heard Jim say (vocally) that you could do references like this in the ZODB now. I'm trying to avoid using Paths because objects have a tendency to move around[*], and I have performance concerns for a single event service object to have to call 'unrestrictedTraverse' to every subscriber. yes, this a concern and depends on usage. i generally don't have many listeners to a particular event. when this has been an issue, i instead chain event channels and stick events in an event queue, which periodically gets flushed from a zeo client script. currently i'm doing this for a subscription model which works well since the subscriptions that way get sent out all at once, instead of bombarding the end user with lots of emails. [*] (it's due to the annoyances with manage_beforeDelete() and friends that I'm writing this tool.) Second question: If I use the hash of the Subscription as a key, is there any advantages/disadvantages with using an IOBTree to hold Subscription objects instead of a PersistentMapping? memory usage would probably be an advantage over large numbers of subscriptions, but i'm not qualifed to answer... cheers kapil ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
[Zope-dev] References, persistence, BTrees
I'm experimenting with an event notification service based on a publish-subscribe model for some projects I'm working on. When a subscription comes in, a 'Subscription' object is made, that basically looks like this: class Subscription(Base): def __init__(self, subscriber, eventType, filter=None): self.subscriber = subscriber self.eventType = eventType self.filter = filter def __hash__(self): return hash(self.subscriber) \ hash(self.eventType) \ hash(self.filter) 'subscriber' is a reference to the subscribing object, and it's very likely to be to an object in the ZODB. Is it wise to have more than one persistent reference to a single persistent object? I swear that I had once heard Jim say (vocally) that you could do references like this in the ZODB now. I'm trying to avoid using Paths because objects have a tendency to move around[*], and I have performance concerns for a single event service object to have to call 'unrestrictedTraverse' to every subscriber. [*] (it's due to the annoyances with manage_beforeDelete() and friends that I'm writing this tool.) Second question: If I use the hash of the Subscription as a key, is there any advantages/disadvantages with using an IOBTree to hold Subscription objects instead of a PersistentMapping? Jeffrey P Shell, [EMAIL PROTECTED] ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
Re: [Zope-dev] References, persistence, BTrees
At 05:49 PM 1/3/02 -0700, Jeffrey P Shell wrote: 'subscriber' is a reference to the subscribing object, and it's very likely to be to an object in the ZODB. Is it wise to have more than one persistent reference to a single persistent object? I swear that I had once heard Jim say (vocally) that you could do references like this in the ZODB now. I'm trying to avoid using Paths because objects have a tendency to move around[*], and I have performance concerns for a single event service object to have to call 'unrestrictedTraverse' to every subscriber. Unfortunately, you can't take this shortcut. Not because you can't store or retrieve references in this way, but because you can't get an acquisition context this way, which means security is shot, not to mention things like objects knowing their URLs. So although it's perfectly safe to point to objects in the ZODB from more than one place, it's almost always useless to do so with respect to an arbitrary Zope object. :( I don't know if this is changing in Z3, but I'm rather curious about the possibility, myself. ___ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )