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

  1. Add fsdb to your list of dependencies in mix.exs:
  def deps do
    [{:fsdb, "~> 0.3.0"}]
  end
  1. 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")
  1. Run the tests
  mix test

Releases

Future

Version 0.3.0

Version 0.2.4

Version 0.2.3

Version 0.2.2

Version 0.2.1

Version 0.2.0

Version 0.1.0