/*! @page arch-glossary Architecture Guide Glossary of Terms

WiredTiger has a lot of domain specific nomenclature - this page attempts
to decode it. This is intended for those navigating the WiredTiger source
tree - it describes terms internal to the storage engine.

The definitions list how the terms are used in WiredTiger, which may not match how
they are used in other settings.

@section arch-glossary-transactions Glossary (click headings to sort)

<!-- Please keep glossary formatted a single entry to a line, and sorted alphabetically (case insensitive). -->

<table class="doxtable sortable">
<tr><th>Term<th>Category<th>Definition
<tr><td>address cookie<td>block manager<td>an opaque set of bytes returned by the block manager to reference a block in a Btree file, it includes an offset, size, checksum, and object id.
<tr><td>atomicity<td>transactions<td>a guarantee provided within the context of a transaction that all operations made within that transaction either succeed or fail.
<tr><td>barrier<td>general<td>a call that forces the CPU and compiler to enforce ordering constraints on memory operations, used in multithreaded code.
<tr><td>block<td>block manager<td>the smallest granularity of data that is read from or written to a Btree file.  A btree page, when it appears on disk, may consist of one or more blocks.
<tr><td>block compression<td>btree<td>after pages of btrees are encoded to be written, they may be compressed according to a configured algorithm.  Compressors may be added to WiredTiger via the extension mechanism.
<tr><td>block manager<td>block manager<td>an internal API that abstracts writing, reading and allocating blocks to and from files.  A block manager is associated with a Btree.
<tr><td>Bloom filter<td>lsm<td>a data structure that identifies that a key cannot be present.  Used by LSM.
<tr><td>btree<td>btree<td>a data structure on disk or in memory that stores keys, it with its associated value. In WiredTiger, all btrees are in fact B+trees, meaning that adjacent keys and values are grouped into pages.
<tr><td>bulk insert<td>btree<td>the capability to rapidly insert a set of ordered key value pairs into a Btree. In WiredTiger, a Btree's dhandle must be obtained exclusively, guaranteeing that the inserts can be done single threaded.
<tr><td>cell<td>file format<td>a key or value packed as it appears on disk for a Btree.
<tr><td>checkpoint<td>checkpoint<td>a stable point that bounds how much work recovery must do. Data committed before a checkpoint is guaranteed to reside in data files. Thus, recovery must replay log files starting at the last completed checkpoint.
<tr><td>chunk<td>lsm<td>a single file within an LSM tree.
<tr><td>collator<td>general<td>a comparison function that determines how keys will be ordered in a Btree. The default collator is byte oriented. A custom collator may be packaged as an extension and attached to a Btree.
<tr><td>column<td>schema<td>a single field in a record, which must be unpacked from a raw key or value.
<tr><td>column group<td>schema<td>a set of column store Btrees, whose record ids logically correspond. Together, a column group represents a table of data, with its columns being the union of columns in the individual Btrees.
<tr><td>column store<td>btree<td>a Btrees that has as its key a record id
<tr><td>commit timestamp<td>transactions<td>values in this transaction become visible at this timestamp.
<tr><td>compare and swap (CAS)<td>general<td>a CPU instruction that can be used to coordinate the activity of multiple threads. Specifically, the instruction atomically changes a memory location to a new value only if the existing value matches a second value.
<tr><td>compression<td>general<td>one of several techniques to reduce the size of data on disk and memory.  See block compression, run length encoding, Huffman encoding, key prefix compression.
<tr><td>connection<td>general<td>an encapsulation of information stored for an application's use of a WiredTiger instance attached to a specific home directory. This encapsulation is kept in a handle that is used in the API.
<tr><td>cursor<td>general<td>a handle in the WiredTiger API that encapsulates a position in a Btree, and may hold the key and value associated with that position.
<tr><td>data handle<td>general<td>an abstraction of a named file, table or other data source in WiredTiger
<tr><td>data source<td>general<td>an abstraction that extends the uri name space.  A custom data source defines APIs that are invoked when objects are created in, or cursors are opened on, the new name space.
<tr><td>dhandle<td>general<td>see data handle
<tr><td>diagnostic build<td>general<td>a build of WiredTiger that includes extra code to check invariants, and abort if they fail.
<tr><td>durability<td>transactions<td>the property that guarantees that transactions that have been committed will survive permanently.
<tr><td>encryption<td>btree<td>in WiredTiger, encryption is applied to data files, log files and metadata.  Encryption algorithms may be added to WiredTiger via the extension mechanism.
<tr><td>encryptor<td>btree<td>an encryption algorithm packaged as an extension.
<tr><td>eviction<td>general<td>the process of freeing memory in the cache, which often includes reconciling and writing dirty pages. This term generally includes the process of deciding which pages should be evicted.
<tr><td>extension<td>general<td>a module that uses the WiredTiger extension interface, allowing it to be added in an encapsulated way, without altering the core of the WiredTiger library.  Extensions are typically compiled into shared libraries.
<tr><td>extent list<td>block manager<td>a list of contiguous sets of blocks in a file.  Extent lists are used to track available blocks and/or used blocks.
<tr><td>fast truncate<td>btree<td>a truncate that spans a key range over more than one leaf page may be performed quickly by deleting entire data pages at a time.
<tr><td>frag<td>verify<td>in verify, a part of a file that is the minimum allocation size and aligned the same.  The smallest blocks may be the same as a frag, other blocks may be composed of multiple contiguous frags.
<tr><td>hazard pointer<td>general<td>a data structure that assists in lock free algorithms, used by WiredTiger Btrees
<tr><td>history store<td>general<td>storage in WiredTiger (currently implemented as a Btree) that keeps previous values associated with a key.
<tr><td>home directory<td>general<td>the directory containing all the data for a WiredTiger connection.  The connection is attached to this directory via a call to ::wiredtiger_open.
<tr><td>Huffman encoding<td>btree<td>data in a btree may optionally be encoded using a Huffman encoding, based on either English letter frequencies or a custom encoding.  See @subpage_single huffman for details.
<tr><td>index<td>schema<td>a Btree with records having values that are keys to another Btree. An index (or set of indices) become associated with a primary Btree via the table construct.
<tr><td>insert<td>btree<td>an in-memory structure holding a key and a set of updates for a Btree.
<tr><td>internal page<td>btree<td>either in-memory or on disk, a page in a Btree that has a set of keys that reference pages beneath it.
<tr><td>isolation<td>transactions<td>determines which versions of data are visible to a running transaction, and whether it can see changes made by concurrently running transactions.
<tr><td>key prefix compression<td>btree<td>a technique to store identical key prefixes only once per page.  See @ref file_formats_compression
<tr><td>kv or k/v<td>btree<td>a key/value pair in a Btree.
<tr><td>leaf page<td>btree<td>either in-memory or on disk, a page in a Btree that has a pairs of keys and values, and no pages beneath it.
<tr><td>log structured merge tree (or LSM tree)<td>lsm<td>a data structure that stores keys and values (as a Btree), but composed of potentially many trees (Btrees in WiredTiger).
<tr><td>LSM<td>lsm<td>see log structured merge tree
<tr><td>merge<td>btree<td>the process of making a single page out of two adjacent smaller pages in a Btree.  This can occur with leaf pages or internal pages.
<tr><td>metadata<td>general<td>a set of data that is used to help manage files, tables, indices and column groups in WiredTiger.
<tr><td>metadata tracking<td>general<td>a technique to track a set of changes to the metadata, so they can be "rolled back" when an error occurs.
<tr><td>mutex<td>general<td>a locking algorithm that waits, allowing other threads to execute, when the lock cannot be immediately acquired, and is woken to retry when the lock is available.  Although more heavyweight than a spin lock, it consumes fewer resources while waiting.  Appropriate for resources that may be in contention and may be held for longer periods.
<tr><td>object id<td>tiered storage<td>an integer that indicates an individual file that is a part of a Btree.
<tr><td>oldest timestamp<td>transactions<td>a connection-wide value, specifies the oldest timestamp that must be tracked by the system. Values with stop timestamps older than this value do not have to be retained.
<tr><td>on disk<td>general<td>a shorthand meaning "in the file system", and may or may not be stored on a physical disk.
<tr><td>overflow page<td>btree<td>either in-memory or on disk, a page in a Btree that has a key or value that is too large to appear on a leaf or internal page.
<tr><td>pack<td>general<td>convert in-memory representations of keys or values to a compact format for file storage
<tr><td>page<td>btree<td>one logical node of a Btree, in memory, or on disk, that may store keys and/or values.  See internal page, leaf page, overflow page.
<tr><td>page reference<td>btree<td>an indirect reference to a key on a page in a Btree.  The reference struct (WT_REF) acts as the indirection and may include a pointer to an in memory object or an address cookie to find the object on disk.  "ref" for short.
<tr><td>page split<td>btree<td>the process of breaking up a large page in a Btree into multiple smaller pages.  This may occur with either leaf pages or internal pages.
<tr><td>pthread<td>general<td>a thread implementation used on POSIX systems
<tr><td>raw<td>schema<td>data as it appears on-disk, typically in a packed format.
<tr><td>read timestamp<td>transactions<td>a timestamp that specifies what data should be visible.
<tr><td>recno<td>general<td>a 64 bit integer. When used as a key, the Btree is said to be a column store, and the keys are assigned incrementally by WiredTiger when new records are inserted.
<tr><td>reconcile<td>general<td>convert the in-memory version of a page to a more compact form for file storage.
<tr><td>recovery<td>general<td>a procedure used on opening WiredTiger whereby, starting at the last checkpoint written, log records are played back to bring the database up to date.
<tr><td>ref<td>btree<td>see page reference
<tr><td>RLE<td>general<td>see run length encoding
<tr><td>run length encoding<td>general<td>also known as "RLE".  A technique to save space whereby repeated items can be represented by a count followed by the item.  For example the string of letters \sic "AAAAAAABBBCDDDD" might be encoded as \sic "7A3BC4D" using "out of band" digits.
<tr><td>salvage<td>general<td>functionality to repair Btree disk files.
<tr><td>schema<td>schema<td>the algorithms that use metadata to map the raw keys and values in Btrees to higher level abstractions like tables with typed columns.
<tr><td>session<td>general<td>an encapsulation of information stored for single thread of control in the application. This encapsulation is kept in a handle that is used in the API.  Sessions manage transactions and performs the transactional operations.
<tr><td>skip list<td>general<td>a variation of a sorted linked list that allows for faster (O(log(N))) searching. It is used in WiredTiger as a lock-free data structure for keys inserted on a page.
<tr><td>spin lock<td>general<td>a simple locking algorithm that continually attempts to acquire a lock, appropriate for resources that are likely to be available and may be held for a short time.  This lock is CPU intensive while it is waiting.  Contrast with mutex
<tr><td>split<td>btree<td>see page split
<tr><td>stable timestamp<td>transactions<td>a connection-wide value, checkpoints will not include commits newer than this value.
<tr><td>table<td>schema<td>an abstraction that allows one or more btrees to be used in a coordinated way, which is specified by the schema.  The table coordinates indices and column groups.
<tr><td>thread<td>general<td>a thread of control.  WiredTiger uses pthreads for POSIX systems.
<tr><td>thread group<td>general<td>a group of threads that perform a common task.  Eviction is performed by a thread group.
<tr><td>timestamp<td>transactions<td>refers to one of several types of 64 bit values used to control transactional visibility of data in WiredTiger.  See oldest timestamp, stable timestamp, commit timestamp, read timestamp.
<tr><td>transaction<td>transactions<td>a unit of work performed in WiredTiger that is atomic and consistent with the specified isolation level and durability level.
<tr><td>truncate<td>btree<td>an operation to remove a range of key/values from a Btree.  See also fast truncate
<tr><td>update<td>btree<td>a value associated with a key in a Btree.  A key may have many updates, these correspond to values written to the key previously.
<tr><td>update chain<td>btree<td>a list of updates.
<tr><td>verify<td>general<td>functionality to check integrity of Btree disk files.
</table>

*/
