Re: Saving derived views

Jean-Claude Wippler <[email protected]>
Newsgroups gmane.comp.db.metakit
Message-ID <[email protected]>
mARK bLOORE wrote:

> i had a design where i was essentially duplicating a folder tree by
> storing the folder's path in a string, and the files in it in a
> subview:
>
> stuff[folderpath:S,files[id:I,name:S]]
> (and other data, of course.  note that it is not fully heirarchical,
> just two levels.)
>
> i found that when there were many rows (say 100,000) it was very slow
> to open.  it seems to go through them all to get some metadata on the
> subviews.

Yes.  With 100,000 subviews things can bog down.  The empty case is 
treated specially, but still.  A number of performance tweaks have been 
made over the past year to address this.  More are needed, there is 
some over-zealous memory buffer allocation going on as well.

> (a sidenote:  it looks like metakit couldn't do a real folder tree,
> since there  is no type which says "this is an arbitrary, dynamically
> allocated, metakit type".  i'm not sure such flexibility would be a
> good thing anyway, though the "store by columns" design would probably
> make it fairly easy.  hmm, maybe not such a bad idea, that could
> extend metakit from a relational database into the realm of
> object-oriented DBs.)

Yes, arbitrary subview structures is up there on my list.  I even have 
a notation for it ("view[*]") and have worked out most details w.r.t. 
restructuring: restructuring needs to be allowed on views, not just 
entire storages.  Doing so automatically redefines the parent view as 
having type "*", while restructuring the parent becomes a way to bring 
heterogeneous subview structures back into homogenous shape.

But there is a way out for simple nesting.  A relatively little known 
feature of MK is the ability to define self-recursive structures:
	blah[foo:S,yes[^],bar:S]
The ^ stands for "same structure as parent", so this can handle 
homogenous trees.  It's not necessarily always most convenient thing to 
do, a row (or tree node in this case) will need a variable amount of 
nested indexing to reach from the root.

Another efficient way to store a tree in a view, as used in CatFish and 
in Starkits, is to store either the parent or the child relationships 
explicitly:
	dirs[parent:I,name:S,files[name:S,date:I]]
Where "parent" is a row index into dirs, or -1 for the root.  This 
structure turns out to scale surprisingly well for filesystem-like data 
collections.  In this approach, <parent,name> is unique.

The general guideline is to look for a balance between # of rows in 
each view/subview and the total number of data columns present in a 
storage, since columns are the basic objects managed by MK.

-jcw

_____________________________________________
Metakit mailing list  -  [email protected]
http://www.equi4.com/mailman/listinfo/metakit
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.