Hi ! I fnally found some time in the train those last two days (nothing beats 7 hours in a train when it comes to code isolated from life and its contengencies ;-) to complete what I was working for. Here is a quick status : o we now have two BTree, in-memory and managed o the keys and values are stored in Holders (KeyHolder and ValueHolder) which store the raw representaion (ie, as byte[]). This save a hell lot of time when we just load a page, read one value and discard the page from the cache o a cache is now used to store Nodes and Leaves o when we have multiple values for a key, we store them as an array of values if we have less than a given number (the threshold), then we switch to a sub-btree o currently, we switch to sub-btrees when we have more than 8 values
It works, I was able to use it in ApacheDS, and I was able to inject 100 000 entries in the server in around 30 mins (around 55 addition per second). There is room for improvements though : o when we switch to sub-btree, we inject all the array's values one by one, and the sub-btree is written on disk as many times as we have values. This is sub-optimal o the findPos(K) method is called too many times (twice more than needed) o the sub-btree are not cleaned when we don't need them anymore o we need more tests, especially performance tests o the code needs a bit of cleanup, so does the Javadoc I will commit what I was working on in the last 3 weeks, and we may cut a 0.2 just after. -- Regards, Cordialement, Emmanuel Lécharny www.iktek.com
