From d86483fc4b3fda70b6e342d0aa1c0fa49d7b6943 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Tue, 28 Oct 2014 13:45:50 +0100 Subject: Database documentation, first cut. --- doc/Makefile | 6 ++++++ doc/db.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 doc/Makefile create mode 100644 doc/db.md (limited to 'doc') diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..05b987d --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,6 @@ +ALL = db.html + +all: $(ALL) + +%.html: %.md + markdown $< > $@ diff --git a/doc/db.md b/doc/db.md new file mode 100644 index 0000000..79ff9ac --- /dev/null +++ b/doc/db.md @@ -0,0 +1,59 @@ +# plop database + +The plop database is a distributed, single-master, append-only +database suitable for transparency systems like Certificate +Transparency. + +Data entries are stored together with three attributes: + +- index + + the first entry in a database has index 0, the next 1 and so on + +- entry hash + + the hash over the entry, used for duplicate detection + +- leaf hash + + hash over specific parts of the entry, usually together with a + timestamp, for use in a merkle tree + +## Erlang code in src/ + +- db.erl + + public interface for adding entries and getting entries by index, + leaf hash and entry hash + +- index.erl + + file-based storage for ordered append-only lists of fixed-sized + entries, retrievable by index + +- atomic.erl + + atomic file operations + +- util.erl + + helper functions for lower level file handling + +- fsyncport.erl + + interface to C implementation for fsync(2) syscall + +## C code in c_src/ + +- net_read_write.c + + read and write to/from a file descriptor, using fsync(2) to increase + probability that data lands on disk + +- fsynchelper.c + + erlang port for net_read_write + +- erlport.c + + glue -- cgit v1.1