Issues with get_range_split_points returning chunks of very uneven size

I adding support for fdb_transaction_get_range_split_points to the .NET binding, and when doing some basic testing, I am getting a list of split points that seem very unevenly distributed, and with a lot of variation between chunks (multiple orders of magnitude from smallest to largest).

My test runs on a 7.1.24 multi-process cluster that is mostly empty (used for testing). I insert a set of 50k keys, all with 50-byte random values (~2.5 MB of data).

I then get the list of split points with a chunk size of 12,500 bytes (I’m expecting ~200 chunks in return), and query the keys between each points to count the number of keys and size. This gives me 109 chunks as small as 200 bytes (4 keys!) and as large as 150KB, with average 23 KB, and almost none that match the request chunk size (see below for the dump of the keys).

The very small chunks are probably the extra bits that are the result of splitting shards into chunks, but I’m more surprised by the un-even-ness of the other chunks, with some more than 10x the expected size.

I tried changing the chunk size, and the number of split points almost never change, I also tried waiting several minutes between inserting the data and querying, and the behavior is mostly the same.

Changing the parameters (number of items, size of the values, chunk size, etc…) and the result are always the same: the actual size of the split points is all over the place.

Is this something that other are seeing as well? Am I doing something wrong? Are my expectations of this API too strong? All the keys returned are valid keys, they all are contained within the range that I specified at the start, the first and last key match the bounds of the range, etc…

I looked at the implementation in StorageMetrics.actor.cpp method getSplitPoints() , and I see that it is probing the bytesample index to get an approximate set of keys that are roughly spaced by chunkSize bytes appart. Could this be because of a very uneven sampling of the keys by this actor ?

Here is the result of getting the split points with chunk size 12500 in a range of 50K keys with 50 bytes values:

Creating 50,000 keys (50 bytes per key) with 2,500,000 total bytes
Get split points for chunks of 12,500 bytes...
Found 109 split points
> (0,) .. (60,):		    60 results, size(values) =   3,000 bytes, ratio =     24%
> (60,) .. (520,):		   460 results, size(values) =  23,000 bytes, ratio =    184%
> (520,) .. (622,):		   102 results, size(values) =   5,100 bytes, ratio =     41%
> (622,) .. (687,):		    65 results, size(values) =   3,250 bytes, ratio =     26%
> (687,) .. (897,):		   210 results, size(values) =  10,500 bytes, ratio =     84%
> (897,) .. (1346,):	   449 results, size(values) =  22,450 bytes, ratio =    180%
> (1346,) .. (1351,):	     5 results, size(values) =     250 bytes, ratio =      2%
> (1351,) .. (2456,):	 1,105 results, size(values) =  55,250 bytes, ratio =    442%
> (2456,) .. (2805,):	   349 results, size(values) =  17,450 bytes, ratio =    140%
> (2805,) .. (3559,):	   754 results, size(values) =  37,700 bytes, ratio =    302%
> (3559,) .. (4274,):	   715 results, size(values) =  35,750 bytes, ratio =    286%
> (4274,) .. (5977,):	 1,703 results, size(values) =  85,150 bytes, ratio =    681%
> (5977,) .. (6094,):	   117 results, size(values) =   5,850 bytes, ratio =     47%
> (6094,) .. (6693,):	   599 results, size(values) =  29,950 bytes, ratio =    240%
> (6693,) .. (6708,):	    15 results, size(values) =     750 bytes, ratio =      6%
> (6708,) .. (6819,):	   111 results, size(values) =   5,550 bytes, ratio =     44%
> (6819,) .. (6868,):	    49 results, size(values) =   2,450 bytes, ratio =     20%
> (6868,) .. (9922,):	 3,054 results, size(values) = 152,700 bytes, ratio =  1,222%
> (9922,) .. (11082,):	 1,160 results, size(values) =  58,000 bytes, ratio =    464%
> (11082,) .. (12572,):	 1,490 results, size(values) =  74,500 bytes, ratio =    596%
> (12572,) .. (13086,):	   514 results, size(values) =  25,700 bytes, ratio =    206%
> (13086,) .. (13299,):	   213 results, size(values) =  10,650 bytes, ratio =     85%
> (13299,) .. (13815,):	   516 results, size(values) =  25,800 bytes, ratio =    206%
> (13815,) .. (13839,):	    24 results, size(values) =   1,200 bytes, ratio =     10%
> (13839,) .. (14022,):	   183 results, size(values) =   9,150 bytes, ratio =     73%
> (14022,) .. (14179,):	   157 results, size(values) =   7,850 bytes, ratio =     63%
> (14179,) .. (14233,):	    54 results, size(values) =   2,700 bytes, ratio =     22%
> (14233,) .. (14646,):	   413 results, size(values) =  20,650 bytes, ratio =    165%
> (14646,) .. (15661,):	 1,015 results, size(values) =  50,750 bytes, ratio =    406%
> (15661,) .. (15986,):	   325 results, size(values) =  16,250 bytes, ratio =    130%
> (15986,) .. (16112,):	   126 results, size(values) =   6,300 bytes, ratio =     50%
> (16112,) .. (18461,):	 2,349 results, size(values) = 117,450 bytes, ratio =    940%
> (18461,) .. (19400,):	   939 results, size(values) =  46,950 bytes, ratio =    376%
> (19400,) .. (19629,):	   229 results, size(values) =  11,450 bytes, ratio =     92%
> (19629,) .. (20873,):	 1,244 results, size(values) =  62,200 bytes, ratio =    498%
> (20873,) .. (21241,):	   368 results, size(values) =  18,400 bytes, ratio =    147%
> (21241,) .. (21784,):	   543 results, size(values) =  27,150 bytes, ratio =    217%
> (21784,) .. (21989,):	   205 results, size(values) =  10,250 bytes, ratio =     82%
> (21989,) .. (22076,):	    87 results, size(values) =   4,350 bytes, ratio =     35%
> (22076,) .. (22237,):	   161 results, size(values) =   8,050 bytes, ratio =     64%
> (22237,) .. (22281,):	    44 results, size(values) =   2,200 bytes, ratio =     18%
> (22281,) .. (23339,):	 1,058 results, size(values) =  52,900 bytes, ratio =    423%
> (23339,) .. (23416,):	    77 results, size(values) =   3,850 bytes, ratio =     31%
> (23416,) .. (23515,):	    99 results, size(values) =   4,950 bytes, ratio =     40%
> (23515,) .. (25773,):	 2,258 results, size(values) = 112,900 bytes, ratio =    903%
> (25773,) .. (25901,):	   128 results, size(values) =   6,400 bytes, ratio =     51%
> (25901,) .. (26070,):	   169 results, size(values) =   8,450 bytes, ratio =     68%
> (26070,) .. (26161,):	    91 results, size(values) =   4,550 bytes, ratio =     36%
> (26161,) .. (26261,):	   100 results, size(values) =   5,000 bytes, ratio =     40%
> (26261,) .. (26857,):	   596 results, size(values) =  29,800 bytes, ratio =    238%
> (26857,) .. (27342,):	   485 results, size(values) =  24,250 bytes, ratio =    194%
> (27342,) .. (27390,):	    48 results, size(values) =   2,400 bytes, ratio =     19%
> (27390,) .. (27479,):	    89 results, size(values) =   4,450 bytes, ratio =     36%
> (27479,) .. (27540,):	    61 results, size(values) =   3,050 bytes, ratio =     24%
> (27540,) .. (28001,):	   461 results, size(values) =  23,050 bytes, ratio =    184%
> (28001,) .. (28129,):	   128 results, size(values) =   6,400 bytes, ratio =     51%
> (28129,) .. (29549,):	 1,420 results, size(values) =  71,000 bytes, ratio =    568%
> (29549,) .. (29810,):	   261 results, size(values) =  13,050 bytes, ratio =    104%
> (29810,) .. (31272,):	 1,462 results, size(values) =  73,100 bytes, ratio =    585%
> (31272,) .. (31301,):	    29 results, size(values) =   1,450 bytes, ratio =     12%
> (31301,) .. (33260,):	 1,959 results, size(values) =  97,950 bytes, ratio =    784%
> (33260,) .. (33264,):	     4 results, size(values) =     200 bytes, ratio =      2%
> (33264,) .. (33698,):	   434 results, size(values) =  21,700 bytes, ratio =    174%
> (33698,) .. (34110,):	   412 results, size(values) =  20,600 bytes, ratio =    165%
> (34110,) .. (34274,):	   164 results, size(values) =   8,200 bytes, ratio =     66%
> (34274,) .. (34600,):	   326 results, size(values) =  16,300 bytes, ratio =    130%
> (34600,) .. (35616,):	 1,016 results, size(values) =  50,800 bytes, ratio =    406%
> (35616,) .. (35927,):	   311 results, size(values) =  15,550 bytes, ratio =    124%
> (35927,) .. (36060,):	   133 results, size(values) =   6,650 bytes, ratio =     53%
> (36060,) .. (36339,):	   279 results, size(values) =  13,950 bytes, ratio =    112%
> (36339,) .. (36355,):	    16 results, size(values) =     800 bytes, ratio =      6%
> (36355,) .. (37135,):	   780 results, size(values) =  39,000 bytes, ratio =    312%
> (37135,) .. (37705,):	   570 results, size(values) =  28,500 bytes, ratio =    228%
> (37705,) .. (38056,):	   351 results, size(values) =  17,550 bytes, ratio =    140%
> (38056,) .. (38527,):	   471 results, size(values) =  23,550 bytes, ratio =    188%
> (38527,) .. (39289,):	   762 results, size(values) =  38,100 bytes, ratio =    305%
> (39289,) .. (39381,):	    92 results, size(values) =   4,600 bytes, ratio =     37%
> (39381,) .. (39793,):	   412 results, size(values) =  20,600 bytes, ratio =    165%
> (39793,) .. (39882,):	    89 results, size(values) =   4,450 bytes, ratio =     36%
> (39882,) .. (40029,):	   147 results, size(values) =   7,350 bytes, ratio =     59%
> (40029,) .. (40266,):	   237 results, size(values) =  11,850 bytes, ratio =     95%
> (40266,) .. (41001,):	   735 results, size(values) =  36,750 bytes, ratio =    294%
> (41001,) .. (41222,):	   221 results, size(values) =  11,050 bytes, ratio =     88%
> (41222,) .. (41233,):	    11 results, size(values) =     550 bytes, ratio =      4%
> (41233,) .. (41361,):	   128 results, size(values) =   6,400 bytes, ratio =     51%
> (41361,) .. (41521,):	   160 results, size(values) =   8,000 bytes, ratio =     64%
> (41521,) .. (41846,):	   325 results, size(values) =  16,250 bytes, ratio =    130%
> (41846,) .. (42649,):	   803 results, size(values) =  40,150 bytes, ratio =    321%
> (42649,) .. (42745,):	    96 results, size(values) =   4,800 bytes, ratio =     38%
> (42745,) .. (43556,):	   811 results, size(values) =  40,550 bytes, ratio =    324%
> (43556,) .. (43731,):	   175 results, size(values) =   8,750 bytes, ratio =     70%
> (43731,) .. (43881,):	   150 results, size(values) =   7,500 bytes, ratio =     60%
> (43881,) .. (44189,):	   308 results, size(values) =  15,400 bytes, ratio =    123%
> (44189,) .. (44468,):	   279 results, size(values) =  13,950 bytes, ratio =    112%
> (44468,) .. (44504,):	    36 results, size(values) =   1,800 bytes, ratio =     14%
> (44504,) .. (44633,):	   129 results, size(values) =   6,450 bytes, ratio =     52%
> (44633,) .. (44643,):	    10 results, size(values) =     500 bytes, ratio =      4%
> (44643,) .. (44836,):	   193 results, size(values) =   9,650 bytes, ratio =     77%
> (44836,) .. (45380,):	   544 results, size(values) =  27,200 bytes, ratio =    218%
> (45380,) .. (45596,):	   216 results, size(values) =  10,800 bytes, ratio =     86%
> (45596,) .. (45721,):	   125 results, size(values) =   6,250 bytes, ratio =     50%
> (45721,) .. (45916,):	   195 results, size(values) =   9,750 bytes, ratio =     78%
> (45916,) .. (45964,):	    48 results, size(values) =   2,400 bytes, ratio =     19%
> (45964,) .. (46728,):	   764 results, size(values) =  38,200 bytes, ratio =    306%
> (46728,) .. (48372,):	 1,644 results, size(values) =  82,200 bytes, ratio =    658%
> (48372,) .. (48826,):	   454 results, size(values) =  22,700 bytes, ratio =    182%
> (48826,) .. (48873,):	    47 results, size(values) =   2,350 bytes, ratio =     19%
> (48873,) .. (50000,):	 1,127 results, size(values) =  56,350 bytes, ratio =    451%
Statistics: smallest = 200 bytes, largest = 152,700 bytes, average = 23,148 bytes

I added support for fdb_get_estimated_range_size_bytes() as well, and running a similar test, the values returned are a lot less “random”: the estimated size is a lot closer to the actual values (if I count the size of the key and values combined). Only a very few ranges return 0 which could be expected (if it falls between two sampled keys)

From the same cluster as above:

Get estimated ranges size...
> (12,295 .. 47,116): estimated = 2,268,750 bytes, exact(key+value) = 1,845,513 bytes, ratio =  122.9%
> (    29 .. 46,616): estimated = 2,904,000 bytes, exact(key+value) = 2,468,884 bytes, ratio =  117.6%
> ( 4,178 .. 42,548): estimated = 2,389,750 bytes, exact(key+value) = 2,033,610 bytes, ratio =  117.5%
> ( 1,441 .. 19,812): estimated = 1,179,750 bytes, exact(key+value) =   973,663 bytes, ratio =  121.2%
> (35,957 .. 40,191): estimated =   211,750 bytes, exact(key+value) =   224,402 bytes, ratio =   94.4%
> ( 6,140 .. 41,101): estimated = 2,268,750 bytes, exact(key+value) = 1,852,933 bytes, ratio =  122.4%
> ( 6,074 .. 36,519): estimated = 1,936,000 bytes, exact(key+value) = 1,613,585 bytes, ratio =  120.0%
> (30,186 .. 39,220): estimated =   605,000 bytes, exact(key+value) =   478,802 bytes, ratio =  126.4%
> (24,372 .. 30,789): estimated =   393,250 bytes, exact(key+value) =   340,101 bytes, ratio =  115.6%
> (18,989 .. 47,952): estimated = 1,905,750 bytes, exact(key+value) = 1,535,039 bytes, ratio =  124.1%
> ( 1,019 .. 10,664): estimated =   574,750 bytes, exact(key+value) =   511,185 bytes, ratio =  112.4%
> ( 6,698 .. 31,605): estimated = 1,512,500 bytes, exact(key+value) = 1,320,071 bytes, ratio =  114.6%
> ( 3,708 .. 46,378): estimated = 2,783,000 bytes, exact(key+value) = 2,261,510 bytes, ratio =  123.1%
> (23,276 .. 45,438): estimated = 1,452,000 bytes, exact(key+value) = 1,174,586 bytes, ratio =  123.6%
> ( 4,330 ..  6,747): estimated =   151,250 bytes, exact(key+value) =   128,101 bytes, ratio =  118.1%
> (21,174 .. 29,904): estimated =   423,500 bytes, exact(key+value) =   462,690 bytes, ratio =   91.5%
> (20,870 .. 29,821): estimated =   423,500 bytes, exact(key+value) =   474,403 bytes, ratio =   89.3%
> (44,970 .. 45,813): estimated =    30,250 bytes, exact(key+value) =    44,679 bytes, ratio =   67.7%
> ( 3,309 .. 35,273): estimated = 2,026,750 bytes, exact(key+value) = 1,694,092 bytes, ratio =  119.6%
> (32,551 .. 44,985): estimated =   847,000 bytes, exact(key+value) =   659,002 bytes, ratio =  128.5%
> ( 7,638 .. 11,921): estimated =   332,750 bytes, exact(key+value) =   226,999 bytes, ratio =  146.6%
> (24,517 .. 25,982): estimated =    60,500 bytes, exact(key+value) =    77,645 bytes, ratio =   77.9%
> ( 6,762 .. 47,282): estimated = 2,692,250 bytes, exact(key+value) = 2,147,560 bytes, ratio =  125.4%
> (10,521 .. 27,037): estimated =   937,750 bytes, exact(key+value) =   875,348 bytes, ratio =  107.1%
> (32,231 .. 38,835): estimated =   514,250 bytes, exact(key+value) =   350,012 bytes, ratio =  146.9%
> (19,680 .. 35,887): estimated =   937,750 bytes, exact(key+value) =   858,971 bytes, ratio =  109.2%
> (   776 .. 14,430): estimated =   847,000 bytes, exact(key+value) =   723,662 bytes, ratio =  117.0%
> (46,097 .. 49,589): estimated =   302,500 bytes, exact(key+value) =   185,076 bytes, ratio =  163.4%
> ( 5,597 .. 15,011): estimated =   695,750 bytes, exact(key+value) =   498,942 bytes, ratio =  139.4%
> (46,170 .. 46,321): estimated =         0 bytes, exact(key+value) =     8,003 bytes, ratio =    0.0%
> ( 8,740 .. 46,536): estimated = 2,329,250 bytes, exact(key+value) = 2,003,188 bytes, ratio =  116.3%
> (29,209 .. 47,111): estimated = 1,361,250 bytes, exact(key+value) =   948,806 bytes, ratio =  143.5%
> (10,287 .. 19,926): estimated =   635,250 bytes, exact(key+value) =   510,867 bytes, ratio =  124.3%
> (26,253 .. 35,270): estimated =   665,500 bytes, exact(key+value) =   477,901 bytes, ratio =  139.3%
> (34,372 .. 41,549): estimated =   514,250 bytes, exact(key+value) =   380,381 bytes, ratio =  135.2%
> ( 3,947 .. 21,063): estimated = 1,179,750 bytes, exact(key+value) =   907,148 bytes, ratio =  130.1%
> (35,804 .. 36,437): estimated =    30,250 bytes, exact(key+value) =    33,549 bytes, ratio =   90.2%
> (40,314 .. 48,743): estimated =   756,250 bytes, exact(key+value) =   446,737 bytes, ratio =  169.3%
> (25,037 .. 32,180): estimated =   393,250 bytes, exact(key+value) =   378,579 bytes, ratio =  103.9%
> ( 6,425 .. 24,843): estimated = 1,119,250 bytes, exact(key+value) =   976,154 bytes, ratio =  114.7%
> (18,401 .. 35,856): estimated = 1,028,500 bytes, exact(key+value) =   925,115 bytes, ratio =  111.2%
> (22,099 .. 34,440): estimated =   786,500 bytes, exact(key+value) =   654,073 bytes, ratio =  120.2%
> (10,224 .. 20,860): estimated =   665,500 bytes, exact(key+value) =   563,708 bytes, ratio =  118.1%
> ( 6,440 .. 20,398): estimated =   968,000 bytes, exact(key+value) =   739,774 bytes, ratio =  130.9%
> (30,232 .. 48,873): estimated = 1,361,250 bytes, exact(key+value) =   987,973 bytes, ratio =  137.8%
> (20,261 .. 40,215): estimated = 1,119,250 bytes, exact(key+value) = 1,057,562 bytes, ratio =  105.8%
> ( 6,987 .. 48,815): estimated = 2,783,000 bytes, exact(key+value) = 2,216,884 bytes, ratio =  125.5%
> (11,102 .. 23,811): estimated =   695,750 bytes, exact(key+value) =   673,577 bytes, ratio =  103.3%
> (14,809 .. 46,772): estimated = 2,026,750 bytes, exact(key+value) = 1,694,039 bytes, ratio =  119.6%
> (14,230 .. 36,835): estimated = 1,361,250 bytes, exact(key+value) = 1,198,065 bytes, ratio =  113.6%
> (12,012 .. 34,268): estimated = 1,300,750 bytes, exact(key+value) = 1,179,568 bytes, ratio =  110.3%
> ( 4,462 .. 35,487): estimated = 1,966,250 bytes, exact(key+value) = 1,644,325 bytes, ratio =  119.6%
> (14,824 .. 28,283): estimated =   756,250 bytes, exact(key+value) =   713,327 bytes, ratio =  106.0%
> (14,338 .. 33,875): estimated = 1,179,750 bytes, exact(key+value) = 1,035,461 bytes, ratio =  113.9%
> (   846 .. 24,116): estimated = 1,331,000 bytes, exact(key+value) = 1,233,310 bytes, ratio =  107.9%
> (21,060 .. 23,417): estimated =    60,500 bytes, exact(key+value) =   124,921 bytes, ratio =   48.4%
> (39,896 .. 40,167): estimated =         0 bytes, exact(key+value) =    14,363 bytes, ratio =    0.0%
> (10,313 .. 40,338): estimated = 1,754,500 bytes, exact(key+value) = 1,591,325 bytes, ratio =  110.3%
> (12,095 .. 25,011): estimated =   726,000 bytes, exact(key+value) =   684,548 bytes, ratio =  106.1%
> (    62 ..  8,349): estimated =   544,500 bytes, exact(key+value) =   439,017 bytes, ratio =  124.0%
> (28,830 .. 49,528): estimated = 1,512,500 bytes, exact(key+value) = 1,096,994 bytes, ratio =  137.9%
> (42,675 .. 46,020): estimated =   302,500 bytes, exact(key+value) =   177,285 bytes, ratio =  170.6%
> (33,685 .. 44,157): estimated =   726,000 bytes, exact(key+value) =   555,016 bytes, ratio =  130.8%
> (14,075 .. 36,989): estimated = 1,361,250 bytes, exact(key+value) = 1,214,442 bytes, ratio =  112.1%
> (12,626 .. 29,211): estimated =   907,500 bytes, exact(key+value) =   879,005 bytes, ratio =  103.2%
> (28,264 .. 33,933): estimated =   363,000 bytes, exact(key+value) =   300,457 bytes, ratio =  120.8%
> (17,950 .. 38,008): estimated = 1,149,500 bytes, exact(key+value) = 1,063,074 bytes, ratio =  108.1%
> ( 1,587 .. 44,412): estimated = 2,692,250 bytes, exact(key+value) = 2,269,725 bytes, ratio =  118.6%
> (29,978 .. 32,913): estimated =   211,750 bytes, exact(key+value) =   155,555 bytes, ratio =  136.1%
> ( 6,036 .. 43,815): estimated = 2,420,000 bytes, exact(key+value) = 2,002,287 bytes, ratio =  120.9%
> ( 6,059 .. 26,348): estimated = 1,210,000 bytes, exact(key+value) = 1,075,317 bytes, ratio =  112.5%
> (29,385 .. 32,323): estimated =   211,750 bytes, exact(key+value) =   155,714 bytes, ratio =  136.0%
> (16,798 .. 27,813): estimated =   574,750 bytes, exact(key+value) =   583,795 bytes, ratio =   98.5%
> (17,090 .. 30,094): estimated =   695,750 bytes, exact(key+value) =   689,212 bytes, ratio =  100.9%
> (33,472 .. 38,501): estimated =   363,000 bytes, exact(key+value) =   266,537 bytes, ratio =  136.2%
> (39,797 .. 49,007): estimated =   756,250 bytes, exact(key+value) =   488,130 bytes, ratio =  154.9%
> (14,167 .. 38,423): estimated = 1,512,500 bytes, exact(key+value) = 1,285,568 bytes, ratio =  117.7%
> (33,182 .. 37,306): estimated =   211,750 bytes, exact(key+value) =   218,572 bytes, ratio =   96.9%
> (38,247 .. 42,811): estimated =   302,500 bytes, exact(key+value) =   241,892 bytes, ratio =  125.1%
> (10,305 .. 44,597): estimated = 2,147,750 bytes, exact(key+value) = 1,817,476 bytes, ratio =  118.2%
> (   748 .. 46,886): estimated = 2,873,750 bytes, exact(key+value) = 2,445,314 bytes, ratio =  117.5%
> ( 1,711 .. 44,905): estimated = 2,692,250 bytes, exact(key+value) = 2,289,282 bytes, ratio =  117.6%
> (16,912 .. 42,795): estimated = 1,573,000 bytes, exact(key+value) = 1,371,799 bytes, ratio =  114.7%
> ( 2,158 ..  5,466): estimated =   151,250 bytes, exact(key+value) =   175,324 bytes, ratio =   86.3%
> ( 8,725 .. 45,484): estimated = 2,268,750 bytes, exact(key+value) = 1,948,227 bytes, ratio =  116.5%
> ( 7,425 .. 32,117): estimated = 1,452,000 bytes, exact(key+value) = 1,308,676 bytes, ratio =  111.0%
> ( 2,312 .. 31,195): estimated = 1,754,500 bytes, exact(key+value) = 1,530,799 bytes, ratio =  114.6%
> (23,713 .. 43,468): estimated = 1,300,750 bytes, exact(key+value) = 1,047,015 bytes, ratio =  124.2%
> (16,635 .. 46,506): estimated = 1,875,500 bytes, exact(key+value) = 1,583,163 bytes, ratio =  118.5%
> (14,862 .. 27,358): estimated =   695,750 bytes, exact(key+value) =   662,288 bytes, ratio =  105.1%
> ( 3,591 .. 46,984): estimated = 2,873,750 bytes, exact(key+value) = 2,299,829 bytes, ratio =  125.0%
> (29,154 .. 48,487): estimated = 1,421,750 bytes, exact(key+value) = 1,024,649 bytes, ratio =  138.8%
> (30,204 .. 44,135): estimated =   968,000 bytes, exact(key+value) =   738,343 bytes, ratio =  131.1%
> ( 3,783 .. 39,840): estimated = 2,268,750 bytes, exact(key+value) = 1,911,021 bytes, ratio =  118.7%
> (   702 .. 11,229): estimated =   635,250 bytes, exact(key+value) =   557,931 bytes, ratio =  113.9%
> (13,340 .. 40,101): estimated = 1,603,250 bytes, exact(key+value) = 1,418,333 bytes, ratio =  113.0%
> (19,672 .. 49,218): estimated = 1,905,750 bytes, exact(key+value) = 1,565,938 bytes, ratio =  121.7%
> ( 5,288 .. 29,462): estimated = 1,452,000 bytes, exact(key+value) = 1,281,222 bytes, ratio =  113.3%
> ( 4,348 .. 37,418): estimated = 2,026,750 bytes, exact(key+value) = 1,752,710 bytes, ratio =  115.6%
> (12,473 .. 35,017): estimated = 1,361,250 bytes, exact(key+value) = 1,194,832 bytes, ratio =  113.9%