summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/Makefile6
-rw-r--r--doc/db.md59
2 files changed, 65 insertions, 0 deletions
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