fsdb
Minimal filesystem database with Erlang term text serialization (Erlang's JSON). Each table is a folder and each row is a file. Any Erlang term can be persisted as a row. Rows have auto generated IDs. Row files are human readable.
Installation and Usage
-
Add
fsdbto your list of dependencies inmix.exs:
def deps do
[{:fsdb, "~> 0.3.0"}]
end- Run the sample:
#run with: mix sample_server
path = Path.expand("_build/dev/.fsdb")
{:ok, db} = Fsdb.Server.start_link([path: path])
#drop to start over
:ok = Fsdb.Server.drop(db, "table1")
:ok = Fsdb.Server.create(db, "table1")
#insert generates and returns an autoincrementing id
{:ok, 1} = Fsdb.Server.insert(db, "table1", "row1")
{:ok, "row1"} = Fsdb.Server.fetch(db, "table1", 1)
#operation on nonexisting ids return not found
:nf = Fsdb.Server.delete(db, "table1", 5)
:nf = Fsdb.Server.update(db, "table1", 5, "row5+")
#save overrides and updates id generator
:ok = Fsdb.Server.save(db, "table1", 5, "row5")
:ok = Fsdb.Server.save(db, "table1", 3, "row3")
#continue +1 of largest id used/generated before
{:ok, 6} = Fsdb.Server.insert(db, "table1", "row6")
#operations that get back previous value
{:ok, "row5"} = Fsdb.Server.update(db, "table1", 5, "row5+")
{:ok, "row5+"} = Fsdb.Server.save(db, "table1", 5, "row5++")
{:ok, "row5++"} = Fsdb.Server.delete(db, "table1", 5)
#tuples may not be id ordered
[{1, "row1"}, {3, "row3"}, {6, "row6"}] = Fsdb.Server.list(db, "table1")- Run the tests
mix testReleases
Future
- atomic in place updates/deletes
Version 0.3.0
- dropped app & config
- refactored to library module and server
Version 0.2.4
- Dropped policy and app defaults
Version 0.2.3
- api and defaults review with breaking changes
Version 0.2.2
- maintenance release
Version 0.2.1
- added test alias to mix.exs with --no-start
Version 0.2.0
- save support to bypass id generator
- Added documentation
- Added app supervisor
Version 0.1.0
- create, drop support
- insert, fetch, update, delete, list support
- Erlang text term serialization support