ZODB guys,

I have a bookstore application in which I use the ZODB in a simple way.  The
database saves stores and records in the stores.
I open the database as follows where the databasePath argument points to my
bookserver.fs file.

from ZODB import FileStorage, DB
import  transaction
import BTrees.OOBTree,  BTrees.IOBTree

       def open(self, databasePath):
                self.bookDatabase_storage     =
                self.bookDatabase_db          =
                self.bookDatabase_connection  = self.bookDatabase_db.open()
                self.dbRoot = self.bookDatabase_connection.root()

       # our btrees
        ibTree = BTrees.IOBTree

I define the key 'books' to be an IOBTree

        db.dbRoot['books'] = ibTree.IOBTree()

And when the user creates a store I define the book number to be an IOBTree

        db.dbRoot['books'][storeNumber] = ibTree.IOBTree()

Then I save the book using storeNumber and bookNumber as keys.

        record = {'title':"The Grapes of Wrath", 'author':"John
        db.dbRoot['books'][storeNumber][bookNumber] = record

So now I can qualify an entire store by using

                                currentStore = db.dbRoot['books'][storeNumber]

And a single book by


And look at the books in the store by
                          for k, v in currentStore.values():
                                                print k, v

I have two questions.
                1)  When I already have a storeNumber and I save a record to 

                                db.dbRoot['books'][storeNumber][bookNumber] = 

                 I have to set the _p_changed flag on the 'books' IOBTREE 
structure to get
the book to save.

                                db.dbRoot['books']._p_changed = True

                Which means that it saves the ENTIRE 'books' IOBTREE' structure 
every time
a save a single book.  (at least it looks like it is doing this).  When I
edit a book and save it the database grows by more than 64k.  And it looks
like it will get worse and worse as more books are added.

                Am I looking at this correctly.  Or am I doing something really 

                2)  When I assign a value to the db such as 

                        db.dbRoot['books'][storeNumber][bookNumber] = record

                        I initially assumed that setting the _p_changed flag on 
the storeNumber
key would only save the single record that I want to save.   As mentioned
above, I am setting the flag on the 'books' IOBTREE also.  Should I have to
set it on both.  I have come to the conclusion that the _p_changed flag must
be set at the highest key level.  ie.. 'books'.  Again, Am I doing something
really ignorant?  

Thank you for your responses.  I really need to know and get this fixed
before my wife divorces me!  She spends time entering books and we still
seem to not really know when the changes are going to permanently be saved.  


View this message in context: 
Sent from the Zope - ZODB-Dev mailing list archive at Nabble.com.

For more information about ZODB, see the ZODB Wiki:

ZODB-Dev mailing list  -  ZODB-Dev@zope.org

Reply via email to