OODB Storage Options and Performance

David Shaffer cdshaffer at acm.org
Wed Apr 13 12:46:41 UTC 2005


Daniel Salama wrote:

> David,
>
> I executed the following:
> [snip]
>
> The time was 204.789 seconds (about 3 seconds longer than before).
>
I'm surprised that using a BTree didn't improve performance.  The
Dictionary class is basically a Hashtable so all of the items are stored
as associations in an array.  I haven't looked at the GOODS client but I
assume that arrays have to be loaded/commited in their entirety (or
maybe they are paged?).  A BTree is, well, more of a tree structure.  An
insert is likely to only affect one or two nodes of the tree so the
GOODS traffic should be a lot less on each commit.  It might be that
your key choices are problematic for BTree's (causing lots of
splitting?) but I'll reserve further conjecture until I look at it in
detail.

Have you profiled this code?  You can do this with:

TimeProfileBrowser onBlock: ["the block which you are currently passing
to millisecondsToRun:"]

or to produce a simple text output:

MessageTally spyOn: ["the block"]

I'm curious why you're seeing two orders of magnitude difference from
Omnibase for this simple example.  My personal experience is that
Omnibase is much faster than the current GOODS client (w/o WriteBarrier
which has never performed well in my applications) but your numbers seem
excessive.  I'm going to profile it myself so maybe we can compare notes
off-list and bring our results back when appropriate.

Looking at the GOODS code suggests one possible improvement for the
Squeak client.  I believe that GOODS supports a UNIX domain socket (as
well as the window's equivalent).  These tend to be much lighter weight
than full TCP/IP sockets.  Unfortunately I don't see a way to connect to
such a socket in Squeak.  The SocketPlugin could be copy/paste adapted
for such use.  It might be worth the work but we need more information
on bottlenecks first.

David




More information about the Squeak-dev mailing list