Fork me on GitHub

benchmarking the sones GraphDB

Since we’re at it – we not only took the new Mono garbage col­lec­tor through it’s paces regard­ing lin­ear scal­ing but we also made some inter­est­ing mea­sure­ments when it comes to query per­for­mance on the two .NET plat­form alternatives.

The same data was used as in the last arti­cle about the Mono GC. It’s basi­cally a set of 200.000 nodes which hold between 15 to 25 edges to instances of another type of nodes. One INSERT oper­a­tion means that the start­ing node and all edges + con­nected nodes are inserted at once.

We did not use any bulk load­ing opti­miza­tions – we just fed the sones GraphDB with the INSERT queries. We tested on two plat­forms – on Win­dows x64 we used the Microsoft .NET Frame­work and on Linux x64 we used a cur­rent Mono 2.7 build which soon will be replaced by the 2.8 release.

After the import was done we started the bench­mark­ing runs. Every run was given a spec­i­fied time to com­plete it’s job. The num­ber of queries that were exe­cuted within this time win­dow was logged. Each run uti­lized 10 simul­ta­ne­ously query­ing clients. Each client exe­cuted ran­domly gen­er­ated queries with pre-specified complexity.

The Import

Not sur­pris­ingly both plat­forms are almost head-to-head in aver­age import times. While Mono starts way faster than .NET the .NET plat­form is faster at the end with a larger dataset. We also mea­sured the ram con­sump­tion on each plat­form and it turns out that while Mono takes 17 kbyte per com­plex insert oper­a­tion on aver­age the Microsoft .NET Frame­work only seems to take 11 kbyte per com­plex insert oper­a­tion.

The Bench­mark

Let the charts speak for them­selves first:

mononet

click to enlarge

benchmark-mono-sgen
click on the pic­ture to enlarge

benchmark-dotnet
click on the pic­ture to enlarge

As you can see on both plat­forms the sones GraphDB is able to work through more than 2.000 queries per sec­ond on aver­age. For the longest run­ning bench­mark (1800 sec­onds) with all the data imported .NET allows us to answer 2.339 queries per sec­ond while Mono allows us to answer 1.980 queries per second.

The Con­clu­sion

With the new gen­er­a­tional garbage col­lec­tor Mono surely made a great leap for­ward. It’s impres­sive to see the progress the Mono team was able to make in the last months regard­ing per­for­mance and mem­ory con­sump­tion. We’re already con­sid­er­ing Mono an impor­tant part of our plat­form strat­egy – this new garbage col­lec­tor and bench­mark results are show­ing us that it’s the right thing to do!

UPDATE: There was a mishap in the “import objects per sec­ond” row of the above table.

9 comments zu “benchmarking the sones GraphDB”

write a new comment

*