[elephant-devel] Design Suggestion Request
Robert L. Read
read at robertlread.net
Thu Jul 27 13:42:30 UTC 2006
On Wed, 2006-07-26 at 17:36 -0400, Daniel Salama wrote:
> The other approach I thought would be to model it similarly as to
> how
> I would do it in a relational database. Basically, I would create
> separate collections of objects representing the tables I would have
> in the relational database. Then, within each object, e.g. a
> customer
> object, I would create a reference to a collection that holds a
> subset of invoices, for example. This would allow me to simply query
> the invoices collection of a customer and that's it. At the same
> time, I would be able to query the entire invoices collection.
Dear Daniel,
I think this approach is much better than creating a very large
object.
Personally, I have an opinion a lot of people disagree with --- I
use the "prevalence" model,
which is basically that I keep all of the objects in memory, and when I
change something I
write back to the data store. This pretty much makes your reporting
efficiency issues
go away, because you can compute any report really, really fast.
I have checked in, in the "contrib" directory, a packaged called
DCM, for Data Collection Management,
that does the in-memory management --- the responsibility of the user is
to call "register-object" whenever
an object needs to be back. DCM also supports the "reference" problem
that you mention --- that is,
instead of putting a whole object into a slot, you put the key there and
look it up in a separate object.
In this model, each class of object you would objectify (which is
very similar to the "tables" in
relational model or "entities" in the entity-relational model.) Each
should class gets a "director", and
you operate against the director when you do something. One of the
advantages of this approach is
that you can choose the "strategy" for each director --- so you can
choose to cache the objects in
memory, or to directly use the database store, or even to use a
generational system.
I think the tests of DCM could be considered a little bit of pseudocode
for what you want.
In considering whether or not things should be kept in memory, one
should do the math: the
maximum number of objects * their size vs. the free memory. Memories
are big and getting bigger.
Let me know if this addresses you ideas or if you have any other
questions; Ian and I had
previously agreed that the lack of a big example application is one of
the biggest weaknesses in
Elephant right now.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/elephant-devel/attachments/20060727/36268d6b/attachment.html>
More information about the elephant-devel
mailing list