lodex
is probably the simplest key-value datastore. lodex
appends key-value pairs
to the database file, along with the blocks of the trie-based index. The index
keeps track of where everything is. Only the first couple of bytes of the
database file are mutable and this is where we keep the checkpoints. lodex
keeps two checkpoints, which might seem meaningless at the moment but might
make more sense in the future.
Install lodex
by adding it to your path. python3 is a prerequisite.
❯ cp lodex ~/bin
Call test_lodex.sh
to run the tests.
❯ sh test_lodex.sh
Testing lodex database CLI
ok: "testvalue == testvalue"
ok: "0 == 0"
ok: "127 == 127"
ok: "1 == 1"
ok: "testkey:testvalue, == testkey:testvalue,"
ok: "0 == 0"
ok: "2 == 2"
ok: "another_testkey:testvalue,testkey:testvalue, == another_testkey:testvalue,testkey:testvalue,"
ok: "0 == 0"
ok: "1 == 1"
ok: "testkey:testvalue, == testkey:testvalue,"
ok: "127 == 127"
ok: "127 == 127"
ok: "testkey:testvalue, == testkey:testvalue,"
Like most mammals, lodex
comes with six basic operations, put
, get
,
delete
, stats
, dump
, and load
. If no database path is specified,
lodex
will just use ./database.ldx
.
❯ lodex put mykey myvalue
❯ lodex get mykey
myvalue
❯ lodex stats
db: database.ldx
items: 1
size: 201
❯ lodex dump | lodex load --db database2.ldx
❯ lodex delete mykey
❯ lodex stats
db: database.ldx
items: 0
size: 312
❯ lodex stats --db database2.ldx
db: database2.ldx
items: 1
size: 201
I'm going to clean up the internal API so that you can use lodex
in your
python programs as well. So far, I've just worked on the command line
interface.
I'm also going to add some error checking to be able to truncate the database in case of aborted transactions. These days the database will just continue appending on top existing-but-unavailable key-value pairs if a transaction is aborted. Which is fine, but not optimal.
Also, write access needs to be locked down. There are several ways of doing this,
but I need to figure out which way is simplest. lodex
is all about being
simplest. The basic design allows for a single writer and multiple readers.
Having multiple writers is a no-go, and this is what needs to be handled.
Contributions would be sweet, although not necessary, since lodex
is perfect.
No, just kidding.
All contributions are welcome, especially the ones that reduce LOC without
sacrificing features or readability. lodex
has no ambition of obsoleting any
real, grown-up datastores. No, on the contrary, lodex
is perfectly happy just
being an educational tool.
Stian Lode github
lodex
is licensed under the MIT License - see the LICENSE.md
file for details