The Log-Structured Merge Tree (LSM-Tree)

Log-Structured Merge-Tree; at Jimi Wales’ Wiki.


Patrick O’Neil, Edward Cheng, Dieter Gawlick, Elizabeth O’Neil; The Log-Structured Merge Tree (LSM-Tree); In Acta Informatica (maybe); 1996; 32 pages; paywalled.


High-performance transaction system applications typically insert rows in a History table to provide an activity trace; at the same time the transaction system generates log records for purposes of system recovery. Both types of generated information can benefit from efficient indexing. An example in a well-known setting is the TPC-A benchmark application, modified to support efficient queries on the History for account activity for specific accounts. This requires an index by account-id on the fast-growing History table. Unfortunately, standard disk-based index structures such as the B-tree will effectively double the I/O cost of the transaction to maintain an index such as this in real time, increasing the total system cost up to fifty percent. Clearly a method for maintaining a real-time index at low cost is desirable. The Log-Structured Merge-tree (LSM-tree) is a disk-based data structure designed to provide low-cost indexing for a file experiencing a high rate of record inserts (and deletes) over an extended period. The LSM-tree uses an algorithm that defers and batches index changes, cascading the changes from a memory-based component through one or more disk components in an efficient manner reminiscent of merge sort. During this process all index values are continuously accessible to retrievals (aside from very short locking periods), either through the memory component or one of the disk components. The algorithm has greatly reduced disk arm movements compared to a traditional access methods such as B-trees, and will improve cost-performance in domains where disk arm costs for inserts with traditional access methods overwhelm storage media costs. The LSM-tree approach also generalizes to operations other than insert and delete. However, indexed finds requiring immediate response will lose I/O efficiency in some cases, so the LSM-tree is most useful in applications where index inserts are more common than finds that retrieve the entries. This seems to be a common property for History tables and log files, for example. The conclusions of Section 6 compare the hybrid use of memory and disk components in the LSM-tree access method with the commonly understood advantage of the hybrid method to buffer disk pages in memory.

Via: backfill

Couchbase 2.0 released 2012-12-12

Couchbase Release 2.0; 2012-12-12; all downloads

Otherwise, that fork of CouchDB had a lot to do with Couchbase deciding that Erlang is too hard to optimize, and hence moving to C/C++ instead. Currently still in Erlang and “strong candidates” to also move to C/C++ are distributed view indexes (but not the single-node b-trees).

via Couchbase 2.0; In DBMS 2 : DataBase Management System Services; 2012-11-19.

Filed under: !false || true => snideness

Couchbase is switching from Erlang to C. In my mind, that’s code for “we’re building a real DBMS now”