[Zope] Re: Zope Persistence (was: XML-RPC within ZOPE)
Dieter Maurer
dieter at handshake.de
Tue Dec 27 14:01:09 EST 2005
Jan-Ole Esleben wrote at 2005-12-16 12:40 +0100:
> ...
>However, as I see it, the problem is that what Zope actually _is_
>(i.e. mostly the ZODB) is an unhealthy way of coupling data and
>implementation
Coupling data and behaviour (what you might call "implementation")
is the main feature of object orientedness.
I find this very productive (especially multiple inheritance).
Apart from that: for all solutions you have to make tradeoffs based
on your aims.
The ZODB aimed at ease of integration and ease of implementing simple
multi-threaded applications (such as Web application servers).
To make the second easier, it removed a major fault class: locking
faults in application code. With the ZODB, you need not to worry
about setting locks to make the modification of persitent objects
safe. Because of that, you will usually not have problems with deadlocks
or data inconsistencies due to forgotten locking.
However, this ease has a price: the quite costly ZODB cache maintained
for each connection in a connection pool. To limit RAM consumption,
the ZODB versions before 3.4 had a limit on the number of connections
in the pool. With ZODB 3.4, the number of connections are no longer
limited. Connections exceeding the pool size become temporary connections
the cache of which is destroyed when the connection is closed.
Thus, you can now have a rather small number of ZODB connections
(to hold RAM consumption in check) and a rather large number of workers
to reduce the risk of deadlocks caused by resource exhaustion.
If you are ready to modify ZServer a bit, you could even create
workers on demand (usually, they are preallocated).
However, this will cost you much of your control over resource usage...
>(which is _exactly_ why my implementation didn't work
>immediately). This of course comes from its origins in TTW development
>where there wouldn't actually have been many user made products.
I do not think that it has anything to do with TTW development.
It is just that Zope did not target arbitrary web services implementations
but much simpler web applications such as blogs, CMS, portals, ...
This applications usually do have a precise notion of interior and exterior
of themselves -- no need to call back to itself via HTTP rather than
caller back directly.
If you are smart (and you do not want to replace Zope by a different
system altogether), then you will implement your own WebServices
dispatcher -- one that recognizes when the call it in fact internal
and then does make an internal call. If such calls are frequent, then
you will gain performance as well.
--
Dieter
More information about the Zope
mailing list