Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/i-e-b/streamdb
A minimalist database that uses only Streams as storage, and can survive power loss and data corruption
https://github.com/i-e-b/streamdb
byte-streams csharp database minimalist-database recoverable storage working
Last synced: 2 months ago
JSON representation
A minimalist database that uses only Streams as storage, and can survive power loss and data corruption
- Host: GitHub
- URL: https://github.com/i-e-b/streamdb
- Owner: i-e-b
- License: bsd-3-clause
- Created: 2019-09-20T11:30:51.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-12-02T10:50:27.000Z (about 2 years ago)
- Last Synced: 2024-10-15T05:29:09.185Z (4 months ago)
- Topics: byte-streams, csharp, database, minimalist-database, recoverable, storage, working
- Language: C#
- Homepage:
- Size: 921 KB
- Stars: 1
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# StreamDb
A minimalist database that uses only Streams as storage, and can survive power loss and data corruption.
This is working, but don't use it for anything important without significant testing.There is also a small WinForms app to explore StreamDB files created by other software.
## The plan:
* A generalised page storage system, using fixed size pages
* Every page is monotonically versioned
* Pages are garbage collected once enough versions behind
* Data is referred to with a GUID identifier
* Data is stored as binary objects
* A special path object is maintained to link string paths to object GUIDs## Goals:
1. Be reliable (specifically, don't corrupt the database if the host process crashes)
2. No 3rd party dependencies, run in most basic C# environment possible (i.e. .Net Standard)
3. Be reasonably fast
4. Don't waste too much disk space (i.e. re-use deleted pages and very old versions)
4.a. It's ok to waste some space if it helps reliability
5. Small code## Non Goals:
* Any kind of advanced querying, searching, etc.
* Be the fastest / smallest / anything-est.
* Structure (de)serialisation. Users should provide byte streams, and will get byte streams back.## To-do / progress
* [ ] Remove the special cases for index and free-list, make them a regular stream like the trie.
* [ ] Remove the version request, replace with a 'prev' method.
* [ ] Replace `lock` with non-recursive mutex calls (for portability)
* [ ] Finish port to Golang