In-memory database code.
This repository has been archived on 2022-07-30. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
Go to file
jdl 88f12256e7 WAL written and tested. 2022-07-25 07:39:16 +02:00
wal WAL written and tested. 2022-07-25 07:39:16 +02:00
.gitignore Initial commit 2022-07-23 07:28:33 +00:00
README.md WAL written and tested. 2022-07-25 07:39:16 +02:00

README.md

mdb

An in-process, in-memory database for Go.

TO DO

  • wal: writer lock via flock?

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.