[ZODB-Dev] Re: so your coming from the rdbms world tutorial?

Roché Compaan roche at upfrontsystems.co.za
Sun Mar 23 13:30:23 EDT 2008


On Sun, 2008-03-23 at 11:38 -0400, Sean Allen wrote:
> Can that be wrapped in a transaction so that if something goes wrong
> with customer creation, the order gets rolled back as well?
> 
> Or put higher level, do transactions only work within a single folder
> or across folders?

You can modify as many objects as you like in a transaction. Have you
read the ZODB/ZEO programming guide yet?

http://www.zope.org/Wikis/ZODB/guide/zodb.html

> >>> There is another good reason - it makes a lot more sense to  
> >>> distribute
> >>> object creation to different containers in the ZODB to avoid write
> >>> conflict errors.
> >>
> >> I think I understand this but can you elaborate?
> >>
> >> By 'distribute object creation to different containers' do you mean
> >> store each
> >> object in own folders?
> >
> > No that would lead to an unnecessary proliferation of folders and it
> > wouldn't actually remove conflict errors.
> >
> > Conflicts errors occur when two concurrent transactions modify the  
> > same
> > attribute. When you are putting objects in a folder you are  
> > essentially
> > modifying the same attribute (unless you are using a btree). A good
> > application design strategy for the ZODB is to ensure that concurrent
> > transactions are modifying attributes on different objects. If you are
> > putting all your orders in one folder you are increasing the chances  
> > of
> > conflict errors.
> >
> 
> If you dont put all orders in a single folder, when it comes time to
> search orders, how would you know where to find?
> 
> Do you sequentially search the multiple folders for a given object?

No. You index the order attributes that you want to search on and
perform a search on the indexes. Have a look at zc.index and zc.catalog

http://svn.zope.org/zc.index/
http://svn.zope.org/zc.catalog/

I think you will also benefit a lot by looking at Zope as development
platform. Have a look at the Zope3Book:
http://wiki.zope.org/zope3/Zope3Book

> 
> > Like I mentioned above you could use a btree folder since it has a
> > fairly good conflict resolution strategy. But given a high enough
> > insertion rate even a btree will not protect you against conflict
> > errors. I would recommend you create orders inside a btree-based order
> > folder inside each customer. This will significantly reduce the
> > likeliness of conflict errors.
> >
> 
> So if this occurs, you get an exception ( basically optimistic locking )
> which you then deal with on a higher level in your application?

Yes.

> > The most valuable resource is the mailing list. Unfortunately
> nobody  
> > has
> > documented their experience elsewhere before.
> >
> 
> Well, if I go with zeo/zodb and python, I'll be sure to document the  
> entire thing.

Cool! We really need that!

-- 
Roché Compaan
Upfront Systems                   http://www.upfrontsystems.co.za



More information about the ZODB-Dev mailing list