[ZODB-Dev] Cache warm up time

Vincent Pelletier plr.vincent at gmail.com
Sat Mar 9 10:50:29 UTC 2013


Le Friday 08 March 2013 18:50:09, Laurence Rowe a écrit :
> It would be great if there was a way to advise ZODB in advance that
> certain objects would be required so it could fetch multiple object
> states in a single request to the storage server.

+1

I can see this used to process a large tree, objects being be processed as 
they are loaded (loadds being pipelined).

Pseudo-code interface suggestion:

class IPipelinedStorage:
  def loadMany(oid_list, callback, tid=None, before_tid=None):
  callback being along the lines of:
    def callback(oid, data_record, tid, next_tid):
      if stop_condition:
        raise ... (StopIteration ? just anything ?)
      return more_oids_to_queue_for_loading
  tid and before_tid (mutualy exclusive) specify the snapshot to use, to
  implement equivalent of loadSerial and loadBefore.

class IPipelinedConnection:
  def walk(ob, callback):
  callback being along the lines of:
    def callback(just_loaded_object, referee_list):
      # do womething on just_loaded_object
      return filtered_referee_list
  referee_list would expose at least referee's class (name ?), and hold their
  oid for Connection.walk internal use (only ?).
  Or maybe just ghosts, but callback would have to take care of not
  unghostifying them - it would void the purpose of pipelining loads.

Above ZODB (persistent containers with internal persistent objects, like 
BTree):
  Implement an iterator over subobjects ignoring intermediate internal
  structure (think BTree.*Bucket classes).

Specific iteration order could probably be specified to be able to implement 
iterkeys and such in BTree for example, but storage may have to implement load 
reordering when they happen in parallel (like NEO, and as could probably be 
implemented for zeoraid and relStorage configured with multiple mirrored 
databases), limiting latency/processing parallelism and possibly leading to 
memory footprint explosion.
So I think it should be possible to also request no special loading order to 
get lowest latency backend can provide and somewhat constant memory footprint.

Any thought/comment ?
-- 
Vincent Pelletier


More information about the ZODB-Dev mailing list