Journal based storage backend
The basic idea is simple and wellknown (so, if this seems difficult to you, know that you are below average).
All (writing) method calls are stored in a journal, before being executed. The method calls are read from the log file by a process called a Backend Writer. Multiple Journal Appenders can of course add method calls to the front of the journal.
The advantage of this solution are manyfold.
- The journal files can be read again (replayed) to bring a clean repository into "current" mode
- The journal files can be specified to be of a specific size, so the "small files" problem is alleviated
- Once a journal file is written, it will never be changed again, making backup and bit preservation simple.
- Backend migration just involved writing a new Backend Writer and replaying the journal.
- Multiple backends are easily supported
- In order for the replay feature to work, the method calls need to be deterministic.
- All writing operations will fundamentally be asynchroneous
Locking of objects is not handled by this system.