Benedict created CASSANDRA-9769:
-----------------------------------

             Summary: Improve BTree
                 Key: CASSANDRA-9769
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-9769
             Project: Cassandra
          Issue Type: Improvement
          Components: Core
            Reporter: Benedict
            Assignee: Benedict
             Fix For: 3.0 beta 1


Split out from CASSANDRA-9471, after discussion there. This patch contains all 
of the btree centric changes, as well as some minimally invasive replacement of 
TreeMap around the codebase.

* Introduces "indexing" to the BTree class, permitting lookup by positional 
index, and binarySearch semantics (so inequality lookups yield the position a 
binarySearch of the equivalent array would)
** The size modulo remainder of a Leaf/Branch are flipped, so that a Branch has 
a spare slot at the end for an int[] index:
*** if missing, this occupies at most 1 bit per entry in the set (often 1/32), 
if present, it occupies at most 2.5 bits, and typically around 1 bit. Sets with 
<= 32 items incur no cost.
*** This index just contains the cumulative size of the tree preceding each 
branch key, rooted at the node in question
* Reintroduces BTreeSet, with extra methods for accessing by index*, and simple 
implementations of missing NavigableMap methods using this new functionality
* Introduces a simple BTreeSet.Builder, and replaces all suitable uses of 
TreeMap in the codebase with a BTreeSet.Builder -> BTreeSet
* Rewrites btree.Cursor to make it far easier to understand, and to introduced 
IndexedSearchIterator, exposing the new indexing
* Reintroduces LongBTreeTest, with cleaned up more exhaustive coverage of 
iterator functionality, and new NavigableMap methods

This version further cleans up a few things, and switches to always indexing a 
btree, given the costs are fairly low (which permits eliminating quite a bit of 
code that would be required if the positions of items were not known, and 
providing just one iterator implementation)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to