Add a few paragraphs to B-tree README explaining L&Y algorithm.

This gives an overview of what Lehman & Yao's paper is all about, so that
you can understand the rest of the README without having to read the paper.

Per discussion with Peter Geoghegan and others.
This commit is contained in:
Heikki Linnakangas 2014-11-24 13:41:47 +02:00
parent 0bd624d63b
commit 49b86fb1c9
1 changed files with 19 additions and 2 deletions

View File

@ -11,8 +11,25 @@ use a simplified version of the deletion logic described in Lanin and
Shasha (V. Lanin and D. Shasha, A Symmetric Concurrent B-Tree Algorithm,
Proceedings of 1986 Fall Joint Computer Conference, pp 380-389).
The Lehman and Yao Algorithm and Insertions
-------------------------------------------
The basic Lehman & Yao Algorithm
--------------------------------
Compared to a classic B-tree, L&Y adds a right-link pointer to each page,
to the page's right sibling. It also adds a "high key" to each page, which
is an upper bound on the keys that are allowed on that page. These two
additions make it possible detect a concurrent page split, which allows the
tree to be searched without holding any read locks (except to keep a single
page from being modified while reading it).
When a search follows a downlink to a child page, it compares the page's
high key with the search key. If the search key is greater than the high
key, the page must've been split concurrently, and you must follow the
right-link to find the new page containing the key range you're looking
for. This might need to be repeated, if the page has been split more than
once.
Differences to the Lehman & Yao algorithm
-----------------------------------------
We have made the following changes in order to incorporate the L&Y algorithm
into Postgres: