about MaAtomicFileStream

Chris Muller asqueaker at gmail.com
Wed May 2 02:24:49 UTC 2007


Hilaire, had indicated he will eventually need very large repositories...

I've just finished a great new feature for the upcoming "r40" release;
unlimited database sizes.  Before, the object buffers were all in one
file ("objects"), now they're spread across as many files as
necessary, sized up to (a default of) 1.8GB chunks.

MaAtomicFileStream handles this completely transparently; i.e., it
provides the API of a StandardFileStream, but when you specify a
filename of "objects.dat" it creates the file, "objects.1.dat".  When
it reaches 1.8GB, "objects.2.dat" appears automatically.  Although
it's currently part of the Magma server package, I plan to separate it
out someday..

MaAtomicFileStream can also let its underlying physical files be part
of a pool that limits the number of simultaneously open files,
allowing your application to play within the constraints of a hosting
service, if necessary.  This is something already supported in r39,
and it actually worked perfectly despite the new many relationship.

Finally, MaAtomicFileStream is transactional, meaning writes are
atomic.  Writes are actually cached in memory until it is instructed
to #maCommit (prefixed to avoid confusion with MagmaSession #commit),
upon which it will write and, if so instructed, flush all of the
in-memory buffers.  Magma takes it one step further by capturing
before-images for restoration in the event of a power failure in
mid-flush.

Anyway, I'm happy to have it all working, and look forward to sharing
r40 with you all..

 - Chris


More information about the Magma mailing list