[Zope-dev] how bad are per-request-write-transactions
Steve Alexander
steve@cat-box.net
Thu, 18 Apr 2002 17:49:43 +0100
Jeremy Hylton wrote:
>>>>>>"CM" == Chris McDonough <chrism@zope.com> writes:
>>>>>
>
> >> Completely agreed. My disagreement is portraying the counter
> >> problem as impossible with the zodb. I think some people, as
> >> evidenced by some of the responses, are willing to live with the
> >> tradeoffs. Other people will find managing a log file on disk to
> >> be a more manageable solution.
>
> CM> It would be best to make make a dual-mode undoing and nonundoing
> CM> storage on a per-object basis.
>
> I'd really like to do this for ZODB4, but it seems hard to get it into
> FileStorage, without adding automatic incremental packing to
> FileStorage.
This might be possible without incremental packing, if the object will
be of a fixed size.
I'm thinking of a simple counter here, something like:
class Counter(object):
__slots__ = ['__count']
def __init__(self):
self.__count = 0
def increment(self):
self.__count += 1
def getValue(self):
return self.__count
Now, imagine that Counter was somehow Persistent too. (There would need
to be a few more _p_... declarations in __slots__, and possibly some
changes in the persistence machinery to allow for slots based instances
as well as __dict__ based ones.)
I would naively expect a pickle of Counter instance to always remain the
same size. Therefore, it could be updated in-place.
Of course, this would break various other nice behaviours of FileStorage.
Another variation on the same theme: have a fixed-size "external
reference" instead of the object's pickle. The fixed-size reference
points to a separate some_object.pickle file which contains the pickle
for that one object. The some_object.pickle file gets overwritten on
each update.
--
Steve Alexander