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.

Reply via email to