B ϵ -tree.

B ϵ -tree.

Source publication
Article
Full-text available
The Bϵ-tree [Brodal and Fagerberg 2003] is a simple I/O-efficient external-memory-model data structure that supports updates orders of magnitude faster than B-tree with a query performance comparable to the B-tree: for any positive constant ϵ < 1 insertions and deletions take O(B11-ϵ logB N) time (rather than O(logB N) time for the classic B-tree),...

Context in source publication

Context 1
... Figure 1. A B ϵ -tree is just a standard B-tree where internal nodes have Θ(B ϵ ) children and an additional buffer of size B which stores updates that are destined to the subtree of the node; leaves store Θ(B) keys. ...

Citations

... ‡ assumes M = Ω(B log B N ); and * assumes M = Ω B 1−ε log 2 (maxv Nv) . For both queries and updates in [7,15], we include the multiplicative dependency on 1 ε (that can be omitted when treating ε as a constant), allowing, for example, setting ε = 1 log 2 B . All ephemeral results use space linear in N and all partial persistence results use space linear in the total number of updates. ...
... This was later generalized by the B ε -tree [10] which for ε ≈ 0 corresponds to the Buffered Repository Tree and for ε ≈ 1 to the standard B-tree. The amortized performance of the B ε -tree was improved to high-probability [7] and worst-case [15] I/O bounds using stronger assumptions on the size of B and M (see Table 1). ...
... In Section 3 we describe how to convert the amortized I/O bounds of Theorem 1 to worst-case bounds under the assumption that M = Ω B 1−ε log 2 (max v N v ) (Theorem 2), a weaker or equal assumption on the memory size than used in [7] and [15] for highprobability and worst-case bounds for B ε -trees, respectively. Under the weakest assumption that M ≥ 2B, we achieve the worst-case bounds in Theorem 3 with an additional term of at most O sort B 1−ε log 2 N v I/Os, where B 1−ε log 2 N v is an upper bound on the number of buffered updates on a root-to-leaf path that should be flushed to the leaf, and ...
Preprint
We present an optimal partially-persistent external-memory search tree with amortized I/O bounds matching those achieved by the non-persistent BεB^{\varepsilon}-tree by Brodal and Fagerberg [SODA 2003]. In a partially-persistent data structure each update creates a new version of the data structure, where all past versions can be queried, but only the current version can be updated. All operations should be efficient with respect to the size NvN_v of the accessed version v. For any parameter 0<ε<10<\varepsilon<1, our data structure supports insertions and deletions in amortized O ⁣(1εB1εlogBNv)O\!\left(\frac{1}{\varepsilon B^{1-\varepsilon}}\log_B N_v\right) I/Os, where B is the external-memory block size. It also supports successor and range reporting queries in amortized O ⁣(1εlogBNv+K/B)O\!\left(\frac{1}{\varepsilon}\log_B N_v+K/B\right) I/Os, where K is the number of values reported. The space usage of the data structure is linear in the total number of updates. We make the standard and minimal assumption that the internal memory has size M2BM \geq 2B. The previous state-of-the-art external-memory partially-persistent search tree by Arge, Danner and Teh [JEA 2003] supports all operations in worst-case O ⁣(logBNv+K/B)O\!\left(\log_B N_v+K/B\right) I/Os, matching the bounds achieved by the classical B-tree by Bayer and McCreight [Acta Informatica 1972]. Our data structure successfully combines buffering updates with partial persistence. The I/O bounds can also be achieved in the worst-case sense, by slightly modifying our data structure and under the requirement that the memory size M=Ω ⁣(B1εlog2(maxvNv))M = \Omega\!\left(B^{1-\varepsilon}\log_2(\max_v N_v)\right). The worst-case result slightly improves the memory requirement over the previous ephemeral external-memory dictionary by Das, Iacono, and Nekrich (ISAAC 2022), who achieved matching worst-case I/O bounds but required M=Ω ⁣(BlogBN)M=\Omega\!\left(B\log_B N\right).