Abstract

Over the past few years, various indexes have been redesigned for byte-addressable persistent memory. In this work, we design and implement <i>PB</i>&#x002B;<i>tree</i> (Pivotal B&#x002B;tree) that resolves the limitations of state-of-the-art fully persistent B&#x002B;trees. First, PB&#x002B;tree reduces the number of expensive shift operations by up to half by managing two sub-arrays separated by a <i>pivot</i> key. Second, PB&#x002B;tree reads cachelines in ascending order, which makes PB&#x002B;tree benefit from hardware prefetchers and run faster than state-of-the-art persistent B&#x002B;trees that access cachelines in non-contiguous or descending order. Third, PB&#x002B;tree employs an optimistic lock-free search algorithm to avoid repeatedly visiting the same tree node. Although the optimistic lock-free search algorithm involves a risk of visiting incorrect child nodes, PB&#x002B;tree guarantees correct search results using the <i>lazy correction</i> algorithm using doubly linked sibling pointers. Our performance study shows that PB&#x002B;tree outperforms the state-of-the-art fully persistent indexes by a large margin. A search algorithm without optimistic locking risks visiting the wrong child node, but PB&#x002B;tree uses a <i>lazy correction</i> algorithm with doubly linked sibling pointers to ensure correct search results. Our performance studies show that PB&#x002B;trees outperform state-of-the-art fully persistent indexes.

Full Text
Published version (Free)

Talk to us

Join us for a 30 min session where you can share your feedback and ask us any queries you have

Schedule a call