Open source distributed event (fact) sourcing database written in #rust
Set up the project structure:
Initialize a new Rust project.
Create the necessary directories and modules.
Implement basic event storage:
Define the event structure.
Set up file I/O for event storage.
Implement event appending and reading.
Design and implement stream management:
Define stream metadata structure.
Develop stream creation and retrieval mechanisms.
Enhance event storage:
Add support for event versioning or timestamps.
Implement basic concurrency control mechanisms.
Improve stream management:
Implement stream deletion and update functionalities.
Begin designing and implementing projections:
Define the projection logic and structures.
Start working on basic projection transformations.
Refine concurrency control:
Improve the conflict resolution mechanism.
Enhance concurrency handling for multiple writers.
Complete basic projections:
Implement the remaining transformation logic.
Test and validate basic projections.
Start networking and API development:
Define the API endpoints for event storage, stream management, and projections.
Set up the necessary networking libraries.
Finalize networking and API implementation:
Implement the handlers for each API endpoint.
Test the API functionality using appropriate tools (e.g., Postman).
Perform comprehensive testing:
Write unit tests for different modules and functionalities.
Develop integration tests for end-to-end scenarios.
Begin performance optimization:
Profile the code and identify areas for optimization.
Start optimizing critical sections for better performance.
Continuation of performance optimization:
Analyze bottlenecks and apply optimization techniques.
Conduct benchmarking and evaluate performance improvements.
Documentation:
Document the project structure, modules, and APIs.
Create user guides and installation instructions.
Update the README file and add relevant project documentation.
Finalize the project:
Refactor and clean up code as necessary.
Perform a thorough code review and resolve any issues.