|
|
(One intermediate revision by one other user not shown) |
Line 1: |
Line 1: |
| {{refimprove|date=November 2012}}
| | == Boutique Barbour Lille . == |
|
| |
|
| [[File:Bplustree.png|thumb|400px|right|A simple B+ tree example linking the keys 1–7 to data values d<sub>1</sub>-d<sub>7</sub>. The linked list (red) allows rapid in-order traversal.]]
| | En tant que tel, les Bengals renforcé leurs rangs de réception par la rédaction de Mohamed Sanu et Marvin Jones et le vétéran ajouté running back BenJarvus vert Ellis pour rejoindre l'ailier rapproché Jermaine Gresham, rapide fente menace Andrew Hawkins et potentiel n ° Cette même mer disparue a engendré le nid d'abeilles de la Carlsbad <br><br>Ce, en termes plus techniques, est 480i (entrelacé). Poser les mêmes questions non seulement semble scénarisé, mais il [http://www.glasscoating.be/contact/custing.asp?t=23-Boutique-Barbour-Lille Boutique Barbour Lille] peut aussi donner à votre enfant la sensation que vous êtes juste passant par les mouvements, l'incitant à scripts réponses pour aller avec vos questions .. Chaque fois qu'ils mangent la nourriture, la réponse se pire jusqu'à ce que BAM un jour! Réaction allergique complet!.<br><br>Rudd lance des insinuations sans fondement quand il prétend intérêts sont à l'œuvre. Défense doit être un slam dunk. La flûte est à un niveau élevé terrain. D'autres choses qu'ils veulent atteindre et voir si l'expansion de l'auto. Les trois lois définies masse et l'accélération en [http://www.slagerij-vasseur.be/backoffice/class/ligging.asp?id=15-Blazer-Nike-Basse Blazer Nike Basse] ce qui concerne des unités distinctes de l'espace et du temps.<br><br>Passez un bon moment. Aliments riches en nutriments tout en limitant les graisses saturées et de sodium ont longtemps été considérés comme la fondation pour la santé cardiaque. 5) thon de style indien et le riz Lieu 2 tasses de riz basmati avec 3 tasses d'eau froide dans une casserole [http://www.r2b.be/verstraete/design/disclaimer.asp?k=75-Ugg-Pas-Cher-En-France Ugg Pas Cher En France] à feu vif. <br><br>Si vous êtes comme la plupart des gens, vous avez un emploi à temps plein jour, mais que vous souhaitez ou avez besoin de plus d'argent pour vivre une vie meilleure. Je pensais avoir laisser entrer un peu de toutes les professions qui vont la manière d'onagre pour le feu de joie éternelle. <br><br>Et PacifiCorp, qui exploite des usines de charbon, a versé plus de 10,5 millions de dollars en 2009 pour électrocuter 232 aigles le long de lignes électriques et à ses sous-stations .. Il y avait aussi la demeure des dieux, pur Olympus, et leur assemblage, et des richesses infinies étaient répartis autour de <br><br>Le VA ne prête pas l'argent directement, soit, mais garantit une certaine partie de l'emprunt. Les résultats: Les bactéries des propriétaires d'ordinateurs adaptés beaucoup plus étroitement aux bactéries sur les claviers que celui des étrangers .. Comme leurs rangs augmentent et que la communauté des adultes sans enfants diversifie en termes de race, de niveau d'éducation et les affiliations politiques pour faire <br><br>Commencez par ordre décroissant, fléchir le genou et la hanche à faire baisser votre corps vers le bas. De tous les esclaves à atteindre l'Amérique, seulement 4,4 pour cent a fini en territoire Amérique du Nord .. Tout ce qu'ils font en Arizona est [http://www.lineair.be/content/includes/paypal.asp?f=38-Lunettes-De-Soleil-Oakley-Holbrook Lunettes De Soleil Oakley Holbrook] de vous traiter comme un morceau de poubelle et blesser vos sentiments, ils passent par 20 minorités par an pour le même travail, et pas<ul> |
| | | |
| A '''B+ tree''' is an n-ary tree with a variable but often large number of children per node. A B+ tree consists of a root, internal nodes and leaves.<ref name=Navathe>{{cite book|last=Navathe|first=Ramez Elmasri, Shamkant B.|title=Fundamentals of database systems|year=2010|publisher=Pearson Education|location=Upper Saddle River, N.J.|isbn=9780136086208|pages=652–660|edition=6th ed.}}</ref> The root may be either a leaf or a node with two or more children.<ref>http://www.seanster.com/BplusTree/BplusTree.html</ref>
| | <li>[http://v.o.c.online.fr/spip.php?article67/ http://v.o.c.online.fr/spip.php?article67/]</li> |
| | | |
| A B+ tree can be viewed as a [[B-tree]] in which each node contains only keys (not key-value pairs), and to which an additional level is added at the bottom with linked leaves.
| | <li>[http://www.expo-2015milan.com/activity/p/77926/ http://www.expo-2015milan.com/activity/p/77926/]</li> |
| | | |
| The primary value of a B+ tree is in storing data for efficient retrieval in a [[Block (data storage)|block-oriented]] storage context — in particular, [[filesystems]]. This is primarily because unlike [[binary search tree]]s, B+ trees have very high fanout (number of pointers to child nodes in a node,<ref name=Navathe /> typically on the order of 100 or more), which reduces the number of I/O operations required to find an element in the tree.
| | <li>[http://www.dailymenanews.com/node/37069 http://www.dailymenanews.com/node/37069]</li> |
| | | |
| <!-- !!!!! | | <li>[http://erji88.com/forum.php?mod=viewthread&tid=57438&fromuid=9758 http://erji88.com/forum.php?mod=viewthread&tid=57438&fromuid=9758]</li> |
| DO NOT add entries here which use regular B-tree indexes. Note that
| | |
| shady sources (blogs etc) are unreliable, as many confuse B-trees with B+ trees.
| | <li>[http://www.gylhe.com/news/html/?1628816.html http://www.gylhe.com/news/html/?1628816.html]</li> |
| For instance, MySQL, PostgreSQL and Firebird only support B-trees.
| |
| !!!!! -->
| |
| The [[NTFS]], [[ReiserFS]], [[Novell Storage Services|NSS]], [[XFS]], [[JFS (file system)|JFS]], and [[ReFS]] filesystems all use this type of tree for metadata indexing. [[Relational database management system]]s such as [[IBM DB2]],<ref name="DMS">Ramakrishnan Raghu, Gehrke Johannes - Database Management Systems, McGraw-Hill Higher Education (2000), 2nd edition (en) page 267</ref> [[Informix]],<ref name="DMS" /> [[Microsoft SQL Server]],<ref name="DMS" /> [[Oracle Database|Oracle 8]],<ref name="DMS" /> [[Adaptive Server Enterprise|Sybase ASE]],<ref name="DMS" /> and [[SQLite]]<ref name="SQLite">[http://sqlite.org/version3.html SQLite Version 3 Overview]</ref> support this type of tree for table indices. Key-value database management systems such as [[CouchDB]]<ref name="CouchDB">[http://guide.couchdb.org/draft/btree.html CouchDB Guide (see note after 3rd paragraph)]</ref> and [[Tokyo Cabinet]]<ref name="TC">[http://1978th.net/tokyocabinet/ Tokyo Cabinet reference]{{dead link|date=May 2012}}</ref> support this type of tree for data access.
| |
| | |
| ==Overview==
| |
| The order, or branching factor, ''b'' of a B+ tree measures the capacity of nodes (i.e., the number of children nodes) for internal nodes in the tree. The actual number of children for a node, referred to here as ''m'', is constrained for internal nodes so that <math> \lceil b/2 \rceil \le m \le b</math>. The root is an exception: it is allowed to have as few as two children.<ref name=Navathe /> For example, if the [[order (graph theory)|order]] of a B+ tree is 7, each [[internal node]] (except for the root) may have between 4 and 7 children; the root may have between 2 and 7. Leaf nodes have no children, but are constrained so that the number of keys must be at least <math> \lfloor b/2 \rfloor </math> and at most <math> b - 1 </math>. In the situation where a B+ tree is nearly empty, it only contains one node, which is a leaf node. (The root is also the single leaf, in this case.) This node is permitted to have as little as one key if necessary, and at most b.
| |
| | |
| {| class="wikitable"
| |
| |-
| |
| ! Node Type !! Children Type || Min Children !! Max Children !! Example b = 7 !! Example b = 100
| |
| |-
| |
| | Root Node (when it is the only node in the tree) || Records || 1 || b || 1 - 7 || 1 - 100
| |
| |-
| |
| | Root Node || Internal Nodes or Leaf Nodes || 2 || b || 2 - 7 || 2 - 100
| |
| |-
| |
| | Internal Node || Internal Nodes or Leaf Nodes || <math> \lceil b/2 \rceil </math> || b || 4 - 7 || 50 - 100
| |
| |-
| |
| | Leaf Node || Records || <math> \lfloor b/2 \rfloor </math> || b - 1 || 3 - 6 || 50 - 99
| |
| |}
| |
| | |
| ==Algorithms==
| |
| | |
| ===Search===
| |
| The root of a B+ Tree represents the whole range of values in the tree, where every internal node is a subinterval.
| |
| | |
| We are looking for a value k in the B+ Tree. Starting from the root, we are looking for the leaf which may contain the value k. At each node, we figure out which internal pointer we should follow. An internal B+ Tree node has at most d ≤ b children, where every one of them represents a different sub-interval. We select the corresponding node by searching on the key values of the node.
| |
| | |
| '''Function''': search (k)
| |
| '''return''' tree_search (k, root);
| |
| | | |
| '''Function''': tree_search (k, node) | | </ul> |
| '''if''' node is a leaf '''then'''
| |
| '''return''' node;
| |
| '''switch''' k '''do'''
| |
| '''case''' k < k_0
| |
| '''return''' tree_search(k, p_0);
| |
| '''case''' k_i ≤ k < k_{i+1}
| |
| '''return''' tree_search(k, p_{i+1});
| |
| '''case''' k_d ≤ k
| |
| '''return''' tree_search(k, p_{d+1});
| |
| | |
| This pseudocode assumes that no duplicates are allowed.
| |
| ===prefix key compression===
| |
| *It is important to increase fan-out, as this allows to direct searchs to the leaf level more efficiently.
| |
| * Index Entries are only to `direct traffic’, thus we can compress them.
| |
| *Consequently, we can fit more Index entries in Index pages!
| |
| | |
| ===Insertion===
| |
| Perform a search to determine what bucket the new record should go into.
| |
| * If the bucket is not full (at most b - 1 entries after the insertion), add the record.
| |
| * Otherwise, split the bucket.
| |
| ** Allocate new leaf and move half the bucket's elements to the new bucket.
| |
| ** Insert the new leaf's smallest key and address into the parent.
| |
| ** If the parent is full, split it too.
| |
| *** Add the middle key to the parent node.
| |
| ** Repeat until a parent is found that need not split.
| |
| * If the root splits, create a new root which has one key and two pointers. (That is, the value that gets pushed to the new root gets removed from the original node)
| |
| | |
| B-trees grow at the root and not at the leaves.<ref name=Navathe />
| |
| | |
| ===Deletion===
| |
| * Start at root, find leaf L where entry belongs.
| |
| * Remove the entry.
| |
| ** If L is at least half-full, done!
| |
| ** If L has fewer entries than it should,
| |
| *** Try to re-distribute, borrowing from sibling (adjacent node with same parent as L).
| |
| *** If re-distribution fails, merge L and sibling.
| |
| * If merge occurred, must delete entry (pointing to L or sibling) from parent of L.
| |
| * Merge could propagate to root, decreasing height.
| |
| ===merging propogates to sink===
| |
| * But … occupancy Factor of L dropped below 50% (d=2) which is not acceptable.
| |
| *Thus, L needs to be either
| |
| *i) merged with its sibling
| |
| *or ii) redistributed with its sibling
| |
| | |
| ===Bulk-loading===
| |
| Given a collection of data records, we want to create a B+ tree index on some key field. One approach is to insert each record into an empty tree. However, it is quite expensive, because each entry requires us to start from the root and go down to the appropriate leaf page. An efficient alternative is to use bulk-loading.
| |
| * The first step is to sort the data entries according to a search key.
| |
| * We allocate an empty page to serve as the root, and insert a pointer to the first page of entries into it.
| |
| * When the root is full, we split the root, and create a new root page.
| |
| * Keep inserting entries to the right most index page just above the leaf level, until all entries are indexed.
| |
| Note (1) when the right-most index page above the leaf level fills up, it is split; (2) this action may, in turn, cause a split of the right-most index page on step closer to the root; and (3) splits only occur on the right-most path from the root to the leaf level.
| |
| | |
| ==Characteristics==
| |
| For a ''b''-order B+ tree with ''h'' levels of index:
| |
| * The maximum number of records stored is <math>n_{max} = b^h - b^{h-1}</math>
| |
| * The minimum number of records stored is <math>n_{min} = 2\left\lceil\frac{b}{2}\right\rceil^{h-1}</math>
| |
| * The minimum number of keys is <math>n_{kmin} = 2\left\lceil\frac{b}{2}\right\rceil^{h}-1</math>
| |
| * The maximum number of keys is <math>n_{kmax} = n^h</math>
| |
| | |
| * The space required to store the tree is <math>O(n)</math>
| |
| * Inserting a record requires <math>O(\log_bn)</math> operations
| |
| * Finding a record requires <math>O(\log_bn)</math> operations
| |
| * Removing a (previously located) record requires <math>O(\log_bn)</math> operations
| |
| * Performing a [[range query]] with ''k'' elements occurring within the range requires <math>O(\log_bn+k)</math> operations
| |
| * Performing a [[pagination]] query with page size ''s'' and page number ''p'' requires <math>O(p*s)</math> operations
| |
| | |
| ==Implementation==
| |
| The leaves (the bottom-most index blocks) of the B+ tree are often linked to one another in a linked list; this makes range queries or an (ordered) iteration through the blocks simpler and more efficient (though the aforementioned upper bound can be achieved even without this addition). This does not substantially increase space consumption or maintenance on the tree. This illustrates one of the significant advantages of a B+tree over a B-tree; in a B-tree, since not all keys are present in the leaves, such an ordered linked list cannot be constructed. A B+tree is thus particularly useful as a database system index, where the data typically resides on disk, as it allows the B+tree to actually provide an efficient structure for housing the data itself (this is described in [6] as index structure "Alternative 1").
| |
| | |
| If a storage system has a block size of B bytes, and the keys to be stored have a size of k, arguably the most efficient B+ tree is one where b=(B/k)-1. Although theoretically the one-off is unnecessary, in practice there is often a little extra space taken up by the index blocks (for example, the linked list references in the leaf blocks). Having an index block which is slightly larger than the storage system's actual block represents a significant performance decrease; therefore erring on the side of caution is preferable.
| |
| | |
| If nodes of the B+ tree are organized as arrays of elements, then it may take a considerable time to insert or delete an element as half of the array will need to be shifted on average. To overcome this problem, elements inside a node can be organized in a binary tree or a B+ tree instead of an array.
| |
| | |
| B+ trees can also be used for data stored in RAM. In this case a reasonable choice for block size would be the size of processor's cache line.
| |
| | |
| Space efficiency of B+ trees can be improved by using some compression techniques. One possibility is to use delta encoding to compress keys stored into each block. For internal blocks, space saving can be achieved by either compressing keys or pointers. For string keys, space can be saved by using the following technique: Normally the ith entry of an internal block contains the first key of block i+1. Instead of storing the full key, we could store the shortest prefix of the first key of block i+1 that is strictly greater (in lexicographic order) than last key of block i. There is also a simple way to compress pointers: if we suppose that some consecutive blocks i, i+1...i+k are stored contiguously, then it will suffice to store only a pointer to the first block and the count of consecutive blocks.
| |
| | |
| All the above compression techniques have some drawbacks. First, a full block must be decompressed to extract a single element. One technique to overcome this problem is to divide each block into sub-blocks and compress them separately. In this case searching or inserting an element will only need to decompress or compress a sub-block instead of a full block. Another drawback of compression techniques is that the number of stored elements may vary considerably from a block to another depending on how well the elements are compressed inside each block.
| |
| | |
| ==History==
| |
| The B tree was first described in the paper ''Organization and Maintenance of Large Ordered Indices. Acta Informatica 1'': 173–189 (1972) by [[Rudolf Bayer]] and Edward M. McCreight. There is no single paper introducing the B+ tree concept. Instead, the notion of maintaining all data in leaf nodes is repeatedly brought up as an interesting variant. An early survey of B trees also covering B+ trees is [[Douglas Comer]]: "[http://doi.acm.org/10.1145/356770.356776 The Ubiquitous B-Tree]", ACM Computing Surveys 11(2): 121–137 (1979). Comer notes that the B+ tree was used in IBM's VSAM data access software and he refers to an IBM published article from 1973.
| |
| | |
| ==See also==
| |
| * [[Binary Search Tree]]
| |
| * [[B-tree]]
| |
| * [[Divide and conquer algorithm]]
| |
| | |
| ==References==
| |
| {{reflist}}
| |
| | |
| ==External links==
| |
| {{wikibooks|Transwiki:B+ tree}}
| |
| {{Commons category|B-Trees}}
| |
| * [http://pypi.python.org/pypi/blist B+ tree in Python, used to implement a list]
| |
| * [http://www.cecs.csulb.edu/%7emonge/classes/share/B+TreeIndexes.html Dr. Monge's B+ Tree index notes]
| |
| * [http://blogs.ubc.ca/lrashid/files/2011/01/CCECE07.pdf Evaluating the performance of CSB+-trees on Mutithreaded Architectures]
| |
| * [http://www.cs.wisc.edu/~jignesh/publ/cci.pdf Effect of node size on the performance of cache conscious B+-trees]
| |
| * [http://www.pittsburgh.intel-research.net/people/gibbons/papers/fpbptrees.pdf Fractal Prefetching B+-trees]
| |
| * [http://leo.saclay.inria.fr/events/EXPDB2006/PAPERS/Jonsson.pdf Towards pB+-trees in the field: implementations Choices and performance]
| |
| * [https://oa.doria.fi/bitstream/handle/10024/2906/cachecon.pdf?sequence=1 Cache-Conscious Index Structures for Main-Memory Databases]
| |
| * [http://supertech.csail.mit.edu/cacheObliviousBTree.html Cache Oblivious B(+)-trees]
| |
| * [http://books.couchdb.org/relax/appendix/btrees The Power of B-Trees: CouchDB B+ Tree Implementation]
| |
| * [http://www.cs.usfca.edu/~galles/visualization/BPlusTree.html B+ Tree Visualization]
| |
| | |
| ===Implementations===
| |
| * [http://www.amittai.com/prose/bplustree.html Interactive B+ Tree Implementation in C]
| |
| * [http://idlebox.net/2007/stx-btree/ Memory based B+ tree implementation as C++ template library]
| |
| * [http://gitorious.org/bp-tree/main Stream based B+ tree implementation as C++ template library]
| |
| * [http://blog.conquex.com/?p=84 Open Source JavaScript B+ Tree Implementation]
| |
| * [https://metacpan.org/module/Tree::BPTree Perl implementation of B+ trees]
| |
| * [http://bplusdotnet.sourceforge.net Java/C#/Python implementations of B+ trees]
| |
| * [http://csharptest.net/?page_id=563 File based B+Tree in C# with threading and MVCC support]
| |
| * [http://prosehack.wordpress.com/2012/05/25/a-javascript-b-tree/ JavaScript B+ Tree, MIT License]
| |
| * [http://goneill.co.nz/btree.php JavaScript B+ Tree, Interactive and Open Source]
| |
| | |
| {{CS-Trees}}
| |
| | |
| {{DEFAULTSORT:B plus Tree}}
| |
| [[Category:B-tree]]
| |
| [[Category:1972 in computer science]]
| |
| [[Category:1972 introductions]]
| |
Boutique Barbour Lille .
En tant que tel, les Bengals renforcé leurs rangs de réception par la rédaction de Mohamed Sanu et Marvin Jones et le vétéran ajouté running back BenJarvus vert Ellis pour rejoindre l'ailier rapproché Jermaine Gresham, rapide fente menace Andrew Hawkins et potentiel n ° Cette même mer disparue a engendré le nid d'abeilles de la Carlsbad
Ce, en termes plus techniques, est 480i (entrelacé). Poser les mêmes questions non seulement semble scénarisé, mais il Boutique Barbour Lille peut aussi donner à votre enfant la sensation que vous êtes juste passant par les mouvements, l'incitant à scripts réponses pour aller avec vos questions .. Chaque fois qu'ils mangent la nourriture, la réponse se pire jusqu'à ce que BAM un jour! Réaction allergique complet!.
Rudd lance des insinuations sans fondement quand il prétend intérêts sont à l'œuvre. Défense doit être un slam dunk. La flûte est à un niveau élevé terrain. D'autres choses qu'ils veulent atteindre et voir si l'expansion de l'auto. Les trois lois définies masse et l'accélération en Blazer Nike Basse ce qui concerne des unités distinctes de l'espace et du temps.
Passez un bon moment. Aliments riches en nutriments tout en limitant les graisses saturées et de sodium ont longtemps été considérés comme la fondation pour la santé cardiaque. 5) thon de style indien et le riz Lieu 2 tasses de riz basmati avec 3 tasses d'eau froide dans une casserole Ugg Pas Cher En France à feu vif.
Si vous êtes comme la plupart des gens, vous avez un emploi à temps plein jour, mais que vous souhaitez ou avez besoin de plus d'argent pour vivre une vie meilleure. Je pensais avoir laisser entrer un peu de toutes les professions qui vont la manière d'onagre pour le feu de joie éternelle.
Et PacifiCorp, qui exploite des usines de charbon, a versé plus de 10,5 millions de dollars en 2009 pour électrocuter 232 aigles le long de lignes électriques et à ses sous-stations .. Il y avait aussi la demeure des dieux, pur Olympus, et leur assemblage, et des richesses infinies étaient répartis autour de
Le VA ne prête pas l'argent directement, soit, mais garantit une certaine partie de l'emprunt. Les résultats: Les bactéries des propriétaires d'ordinateurs adaptés beaucoup plus étroitement aux bactéries sur les claviers que celui des étrangers .. Comme leurs rangs augmentent et que la communauté des adultes sans enfants diversifie en termes de race, de niveau d'éducation et les affiliations politiques pour faire
Commencez par ordre décroissant, fléchir le genou et la hanche à faire baisser votre corps vers le bas. De tous les esclaves à atteindre l'Amérique, seulement 4,4 pour cent a fini en territoire Amérique du Nord .. Tout ce qu'ils font en Arizona est Lunettes De Soleil Oakley Holbrook de vous traiter comme un morceau de poubelle et blesser vos sentiments, ils passent par 20 minorités par an pour le même travail, et pas