github.com/prataprc/gobtree (go): Supplies API to append/fetch key/value/docid from kv-file. kv-file is opened and managed by the WStore structure. entry format is,  Maximum size of each entry is int32, that is 2^31.  translates btree blocks from persistant storage to in-memory data structure, called btree-node. A btree node can be a knode (also called leaf node) or it can be a inode. `block` structure is fundamental to both type of nodes.  Btree indexing algorithm for json {key,docid,value} triplets. `keys` and `values` are expected to be in json, while `docid` is the primary key of json document which contains the key fragment. `value` can optionally be used to store fragment of a document. since keys generated for seconday indexes may not be unique, indexing a.k.a sorting is done on {key,docid}.  This module provides a lock free interface to cache data structure. The general idea is to create an array of pointers, each pointing to the head of DCacheItem linked list.  Since nodes are cached based on their file-position (fpos), fpos is hashed to index into the array. Refer indexFor() to know how.  Subsequenly we walk the linked list for a match in fpos and corresponding cached node.  For deleting we simply remove the node from the list.  For inserting, we prepend the new DCacheItem as the head of the list, and walk the remaining list to delete the item, if it is already present.  (fpos & hashmask) >> rshift  defer goroutine that handles mvcc snapshots. Functionalites of this process augments the functionalit of MVCC process.  Manages list of free blocks in btree index-file.  Manages head sector of btree index-file. Head sector contains the following items,  Index mutation due to {key,docid,value} insert.  MVCC controller process.  Handles all btree traversals except, insert() and remove()  The following is the general idea on cache structure.  commits*-----------| MVCC |<-*   | recyles            *------*      | reclaims              |          |  The cycle of ping-pong,  reads will always refer to the pong-cache.  reads will populate the cache from disk, when ever cache lookup fails.  writes will refer to the commitQ maintained by MVCC, if node is not in commitQ it will refer to pong-cache.  ping-cache is operated only by the MVCC controller.  MVCC controller will _populate_ the ping-cache when new nodes are generated due to index mutations.  MVCC controller will _evict_ the pong-cache as and when nodes become stale due to index mutations.  ping2Pong() happens when snapshot is flushed to disk.  pong becomes ping, and MVCC controller will _populate_ and _evict_ the newly flipped ping-cache based on commited, recycled and reclaimed node, before allowing further mutations.  Data store for btree, organised in two files, index-file and kv-file.  index-file,  kv-file,  Common functions used across test cases.  Contains necessary functions to do index writing.
Keywords: btree|disk|sorting-algorithms|storage