5a9e355df8 | ||
---|---|---|
keyedmutex | ||
kvstore | ||
testconn | ||
.gitignore | ||
README.md | ||
btreeindex.go | ||
btreeindex_test.go | ||
btreeiterator.go | ||
codec.go | ||
collection.go | ||
collection_test.go | ||
database.go | ||
database_test.go | ||
errors.go | ||
go.mod | ||
go.sum | ||
itemmap.go | ||
mapindex.go | ||
mapindex_test.go | ||
shipping_test.go | ||
types.go | ||
util.go | ||
util_test.go |
README.md
mdb
An in-process, in-memory database for Go.
TO DO
- kvstore: tests
Structure
Files
wal/<id>/data
wal/<id>/length
wal/<id>/archived
max-committed-id
write-lock
commit-lock
<day-ts>
is the unix timestamp / 86400. Therefore a new segment will be
created every day. The data file is append-only, and the length is written
atomically.
write-lock
is used by flock
to ensure there's only one
writer. commit-lock
is used by the commit routine. This routine will commit
data to the database and update max-committed-id
atomically.
Code
retry/
wal/
segment/
storage/
WAL File Format
The WAL file consists of an 8 byte minimum ID followed by a stream of entries of the form
(4) Data length
(Data length) Data
(8) ID.
This allows us to quickly get the min and max IDs from the file, and iterate though the segment from the beginning.