[PATCH 2/2] vinyl: optimize mem iterator for frequently updated keys
vdavydov.dev at gmail.com
Thu Feb 28 14:09:24 MSK 2019
On Thu, Feb 28, 2019 at 12:37:20AM +0300, Vladimir Davydov wrote:
> If a key is frequently updated, iteration to the next key stored in the
> memory level can take quite a while, because:
> - In case of GE/GT iterator, vy_mem_iterator_next_key will have to
> iterate the tree from left to right to skip older key versions.
> - In case of LE/LT iterator, vy_mem_iterator_find_lsn will have to
> iterate the tree from right to left to find the newest key version
> visible in the read view.
> To avoid that, let's fall back on key lookup if we failed to find an
> appropriate statement after one iteration, because in this case there's
> a good chance that there's more statements for this key. This should be
> fine since a lookup in a memory tree is pretty cheap.
> src/box/vy_mem.c | 80 ++++++++++++++++++++++++++++++++++++++++----------------
> 1 file changed, 57 insertions(+), 23 deletions(-)
Pushed to 2.1. Will backport to 1.10 once stability test passes.
More information about the Tarantool-patches