Gary

Metakit uses the Commit model for making changes persistent. That means
that until you call storage.Commit() the old data is the valid
representation, and if you close the storage without committing, the next
time you open it, none of your changes will be present.

The key to your situation is in what you wrote: you read the data, check
it, and *write it out* again. Since the old data is not overwritten (it
needs to stay there till you commit, in case you decide to discard your
changes) the storage grows.

I don't know enough about the Python binding to answer the rest of your
questions.

--JYL

> I'm just learning how to use this.  So it's possible I've overlooked
> something.  But this behavior is rather puzzling.
>
> I've created a MK database (using Python) with a rather simple view and
> a hash view on top of it.  On entry to my application, the contents are
> checked and information is displayed.  This works fine.
>
> Then, just as a test, I call a method in my application that gets each
> entry in the database, updates it, and puts it back -- at least that's
> what I think I'm doing.
>
> What I notice is that each time I run the application the database file
> gets larger (by 2K) -- even though my code is not adding any new rows.
> Why is the file size growing?  What am I overlooking?
>
> Also, it occurred to me that in the code below I might be misusing
> 'getas' to access the existing view.  But when I attempt to use 'view',
> it seems to return a valid Python object whether the named view exists
> or not!!  So how can I tell whether the view is really there?  (I guess
> I can attempt some kind of try/except access to the retirmed view, but
> that seems *really* kludgy.)
>
> Any help will be appreciated.
>
> The row format for the underlying view is 'Index[name:S,index:M]'
>
> The code for opening the database and setting up the view and hash view
> is:
>
>         indexInfoFileName = join(indexDir, IndexInfoFileName)
>         self.InfoDb = mk.storage(indexInfoFileName, 2)
>         basicInfoView = self.InfoDb.getas(IndexInfoViewFmt)
>         infoHashView = self.InfoDb.getas(IndexInfoHashFmt)
>         self.InfoView = basicInfoView.hash(infoHashView, 1)
>         self.InfoDb.commit()
>
> The code for updating looks like the following.  As you can see, it
> attempts to modify existing rows and append new ones as necessary
>
>         for infoInstance in self.itemsData:
>             rowIdx = self.InfoView.find(name=infoInstance.indexName)
> binIndex = dumps(infoInstance, 1)
>             if rowIdx >= 0:
>                 self.InfoView[rowIdx].index = binIndex
>             else:
>                 self.InfoView.append(name=infoInstance.indexName,
>                                      index=binIndex)
>         self.InfoDb.commit()
>
> --------------------------------------
> Gary H. Merrill
> Director and Principal Scientist, New Applications
> Data Exploration Sciences
> GlaxoSmithKline Inc.
> (919) 483-8456
>
>
>
>
> _______________________________________________
> metakit mailing list  -  [EMAIL PROTECTED]
> http://www.equi4.com/mailman/listinfo/metakit



_______________________________________________
metakit mailing list  -  [EMAIL PROTECTED]
http://www.equi4.com/mailman/listinfo/metakit

Reply via email to