Thomas,

I did not introduce this feature or looked at the code. But from a Hashing 
standpoint, average-case of a properly implemented Hash map should be O(1). If 
HashMap<FullPath, Node> is statistically slower than HashMap<name, Node> it 
means the hasing algorithm used for the type FullPath is inefficient, causing 
inefficiency. The solution would be to analyze FullPath to see how hashCode() 
is implemented. In a perfect hashing scenario there are no collisions which 
means it becomes a simple index lookup. When hashes start colliding it requires 
an extra steps in a bucket to determine the correct object to return, through 
equals(). You can imagine this is horribly inefficient. 

Run your tests again with a modified FullPath that returns a hashCode() that is 
simple to compute hash that is cached until data is changed and a equals() 
method to appropriately compute equality. 

Andrew

On Sep 8, 2011, at 11:35 AM, Thomas Koch wrote:

> Hi,
> 
> I'm studying the ZK DataTree and wondered, whether the code overhead of a 
> lookup HashMap for the nodes provides the expected speed benefit.
> 
> Therefor I found japex[1], a microbenchmarking tool and wrote two different 
> "tree" implementations: A simple "HashMap<FullPath, Node>" and a real tree 
> where each Node contains "HashMap<name, Node> children".
> 
> I ran benchmarks to lookup random nodes with trees of different depth ("l" = 
> levels) and children count for each node. (see attachment, 
> tps=transactions/sec) The benchmark was executed single threaded on my 
> laptop. 
> I don't dare to say, that it's accurate, but it may be good enough to make 
> one 
> wonder.
> 
> So the HashMap based lookup seems to be faster for all configurations, but at 
> most twice as fast. On the other hand the code is made more complicated, the 
> memory consumption of every path in the DataTree is doubled and the lookup 
> time may hardly be a bottleneck at all in a network application.
> 
> I scanned the VCS logs of ZK to find informations when the HashMap lookup was 
> introduced and how it was motivated, but it was already there when the 
> project 
> came out of Yahoo.
> 
> Could sbd. please give more information, why the HashMap lookup has been 
> introduced and whether benchmarks were made at that time?
> 
> A slightly related topic: Does anybody run regulary benchmarks against ZK? Is 
> there a benchmark suite? Would you recommend a tool to build benchmarks for 
> ZK?
> 
> [1] http://japex.java.net
> 
> Thank you,
> 
> Thomas Koch, http://www.koch.ro

Reply via email to