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
magma@lists.squeakfoundation.org