[ZODB-Dev] what's the latest on zodb/zeo+memcached?

Jim Fulton jim at zope.com
Tue Jan 15 20:04:22 UTC 2013


On Tue, Jan 15, 2013 at 2:45 PM, Claudiu Saftoiu <csaftoiu at gmail.com> wrote:
> On Tue, Jan 15, 2013 at 2:40 PM, Jim Fulton <jim at zope.com> wrote:
>>
>> So, first, a concise partial answer to a previous question:
>>
>> ZODB provides an in-memory object cache.  This is non-persistent.
>> If you restart, it is lost.  There is a cache per connection and the
>> cache size is limited by both object count and total object size (as
>> estimated by database record size).
>>
>> ZEO also provides a disk-based cache of database records read
>> from the server.  This is normally much larger than the in-memory cache.
>> It can be configured to be persistent.  If you're using blobs, then there
>> is a separate blob cache.
>>
>> On Tue, Jan 15, 2013 at 2:15 PM, Claudiu Saftoiu <csaftoiu at gmail.com>
>> wrote:
>> >> You can't cause a specific object (or collection of objects) to stay
>> >> ion the cache, but if you're working set is small enough to fit in
>> >> the memory or client cache, you can get the same effect.
>> >
>> >
>> > That makes sense. So, is there any way to give ZODB a Persistent and
>> > tell it
>> > "load everything about the object now for this transaction" so  that the
>> > cache mechanism then gets triggered, or do I have to do a custom search
>> > through every aspect of the object, touching all Persistents it touches,
>> > etc, in order to get everything loaded? Essentially, when  the server
>> > restarts, I'd like to pre-load all these objects (my cache is indeed big
>> > enough), so that if a few hours later someone makes a request that uses
>> > it,
>> > the objects will already be cached instead of starting to be cached
>> > right
>> > then.
>>
>> ZODB doesn't provide any pre-warming facility.  This would be
>> application dependent.
>>
>> You're probably better off using a persistent ZEO cache
>> and letting the cache fill with objects you actually use.
>
>
> Okay, that makes sense. Would that be a server-side cache, or a client-side
> cache?

There are no server-side caches (other than the OS disk cache).

> I believe I've already succeeded in getting a client-side persistent
> disk-based cache to work (my zodb_indexdb_uri is
> "zeo://%(here)s/zeo_indexdb.sock?cache_size=2000MB&connection_cache_size=500000&connection_pool_size=5&var=zeocache&client=index"),

This configuration syntax isn't part of ZODB.  I'm not familiar with
the options there.

> but this doesn't seem to be what you're referring to as that is exactly the
> same size as the in-memory cache.

I doubt it, but who knows?

> Could you provide some pointers as to how
> to get a persistent disk-based cache on the ZEO server, if that is what you
> meant?

ZODB is configured via ZConfig.  The parameters are defined here:

  https://github.com/zopefoundation/ZODB/blob/master/src/ZODB/component.xml

Not too readable, but at least precise. :/

Look at the parameters for zodb and zeoclient.

Here's an example:

<zodb main>
  cache-size 100000
  pool-size 7

  <zeoclient>
    blob-cache-size 1GB
    blob-dir /home/zope/foo-classifieds/blob-cache
    cache-size 2GB
    server das-head1.foo.zope.net:11100
    server das-head2.foo.zope.net:11100
  </zeoclient>
</zodb>

If you want to use this syntax with paste, see:

  http://pypi.python.org/pypi/zc.zodbwsgi

Jim

-- 
Jim Fulton
http://www.linkedin.com/in/jimfulton
Jerky is better than bacon! http://zo.pe/Kqm


More information about the ZODB-Dev mailing list