diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/impl.html | 26 | ||||
-rw-r--r-- | doc/index.html | 16 |
2 files changed, 23 insertions, 19 deletions
diff --git a/doc/impl.html b/doc/impl.html index dd09fea..e870795 100644 --- a/doc/impl.html +++ b/doc/impl.html @@ -17,14 +17,14 @@ However the organization of the files that make up the representation is somewhat different and is explained below. <p> -Each database is represented by a set of file stored in a directory. +Each database is represented by a set of files stored in a directory. There are several different types of files as documented below: <p> <h2>Log files</h2> <p> A log file (*.log) stores a sequence of recent updates. Each update is appended to the current log file. When the log file reaches a -pre-determined size (approximately 1MB by default), it is converted +pre-determined size (approximately 4MB by default), it is converted to a sorted table (see below) and a new log file is created for future updates. <p> @@ -83,19 +83,15 @@ Other files used for miscellaneous purposes may also be present <h1>Level 0</h1> When the log file grows above a certain size (1MB by default): <ul> -<li>Write the contents of the current memtable to an sstable -<li>Replace the current memtable by a brand new empty memtable -<li>Switch to a new log file +<li>Create a brand new memtable and log file and direct future updates here +<li>In the background: +<ul> +<li>Write the contents of the previous memtable to an sstable +<li>Discard the memtable <li>Delete the old log file and the old memtable +<li>Add the new sstable to the young (level-0) level. +</ul> </ul> -Experimental measurements show that generating an sstable from a 1MB -log file takes ~12ms, which seems like an acceptable latency hiccup to -add infrequently to a log write. - -<p> -The new sstable is added to a special level-0 level. level-0 contains -a set of files (up to 4 by default). However unlike other levels, -these files do not cover disjoint ranges, but may overlap each other. <h1>Compactions</h1> @@ -162,8 +158,8 @@ read. <p> Solution 1: To reduce this problem, we might want to increase the log switching threshold when the number of level-0 files is large. Though -the downside is that the larger this threshold, the larger the delay -that we will add to write latency when a write triggers a log switch. +the downside is that the larger this threshold, the more memory we will +need to hold the corresponding memtable. <p> Solution 2: We might want to decrease write rate artificially when the diff --git a/doc/index.html b/doc/index.html index c2312b7..58442e8 100644 --- a/doc/index.html +++ b/doc/index.html @@ -141,10 +141,18 @@ the batch. <p> <h1>Concurrency</h1> <p> -A database may only be opened by one process at a time. The <code>leveldb</code> -implementation acquires a lock from the operating system to prevent -misuse. Within a single process, the same <code>leveldb::DB</code> object may -be safely used by multiple concurrent threads. +A database may only be opened by one process at a time. +The <code>leveldb</code> implementation acquires a lock from the +operating system to prevent misuse. Within a single process, the +same <code>leveldb::DB</code> object may be safely shared by multiple +concurrent threads. I.e., different threads may write into or fetch +iterators or call <code>Get</code> on the same database without any +external synchronization (the leveldb implementation will +automatically do the required synchronization). However other objects +(like Iterator and WriteBatch) may require external synchronization. +If two threads share such an object, they must protect access to it +using their own locking protocol. More details are available in +the public header files. <p> <h1>Iteration</h1> <p> |