diff options
Diffstat (limited to 'Documentation/lei_design_notes.txt')
-rw-r--r-- | Documentation/lei_design_notes.txt | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/Documentation/lei_design_notes.txt b/Documentation/lei_design_notes.txt new file mode 100644 index 00000000..b5180374 --- /dev/null +++ b/Documentation/lei_design_notes.txt @@ -0,0 +1,32 @@ +lei design notes +---------------- + +Daemon architecture +------------------- + +The use of a persistent daemon works around slow startup time of +Perl. This is especially important for built-in support for +shell completion. It attempts to support inotify and EVFILT_VNODE +background monitoring of Maildir keyword changes. + +If lei were reimplemented in a language with faster startup +time, the daemon architecture would likely remain since it also +lets us easily decouple the local storage from slow IMAP/NNTP +backends and allow us to serialize writes to git-fast-import, +SQLite, and Xapian across multiple processes. + +The coupling of IMAP and NNTP network latency to local storage +is a current weakness of public-inbox-watch. Therefore, -watch +will likely adopt the daemon architecture of lei in the future. + +Read/write vs read-only storage +------------------------------- + +public-inboxes are intended to be written and read by different +Unix users. Commonly, a single Unix user or group will write to +a public-inbox, but the inbox will be served by a user with +read-only permissions (e.g. "www-data" or "nobody"). + +lei/store is intended to be read and written by a single user, +thus we can rely on the Write-Ahead-Log journal of SQLite to +improve performance: <https://sqlite.org/wal.html> |