Lets say i have this:
{
"generations" : [ {
"generation" : 0,
"members" : [ 650, 651, 652, 653, 654 ]
}, {
"generation" : 1,
"members" : [ 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648 ]
}, {
"generation" : 2,
"members" : [ 566, 575, 576, 578, 579, 580, 582, 583, 584, 586,
587, 588, 590, 591, 592, 593, 595, 596, 597, 599, 600, 601, 603, 604,
605, 607, 608, 609, 611, 612, 613, 615, 616, 617, 618, 620, 621, 622, 623 ]
If i understand leveldb design documents correctly then key can be in
any lvl0 sstable (standard bloom filters will be used) but for lvl1+ its
enough to check only sstable containing key range because they do not
overlap.
So we need to check/merge all L0 tables + one from L1 + one from L2.
Because number of sstables needed to check is low It should not be more
performance heavy than checking similar number of sstables (all L0 + 2
levels) with old compactor.
This is probably not done yet because my current read performance is
3-4x slower than expected. because i have currently 60 sstables in
lvl0-2 and read latency 48.4ms on 7200 rpm drive which is about 5.3
seeks per read.