Looking at the RavenDB structure
Originally posted at 3/15/2011
I am trying to explain how RavenDB is structured, and we finally generated the following diagram:
I was actually surprised, because I don’t generally think about it this way, but having the diagram in front of us was really helpful in explain where everything goes.
And, of course, the inevitable nitpick: OMG it takes a loooong time to layout the graph.
What software did you use to show the dependencies graph?
That looks like the architecture feature in VS2010.
@Yaron: the software used is called Visual Studio 2010, you've probably hear about that.
Specifically, the version is Ultimate, wich is the only version w/ Architecture Explorer.
@Yaron: ooops, missing smiley face :-)
Nice looking graph.
Does the arrows indicate dependencies? So Raven.Storage.Managed.Dll depends on Raven.Munin.dll?
Yes, it does
He-he. My friend in MS Research actually works on that graph drawing piece :) If you wish, I may connect you both.
Why didn't you just use ndepend?
Besides a bunch of great features tha are handy when looking at other people's code, it's dependency graph is really nice..
What does the number on each assembly indicate?
I have absolutely no idea...
The number on each shape how many items are contained by that shape. Here's more info about how to use dependency graphs to help you understand the organization of the code:
Note that most of the time is spent analyzing the assemblies to find all the dependencies that are then rolled up on the graph. The final "layout" of the graph is pretty quick, as you can see when you change the layout to "Left To Right" which I think you will find is almost instant on this sized graph even though it actually contains a rollup of 21861 nodes and 63982 links.
If you only care about assembly dependencies you can use the "Custom" dependency graph dialog to select only "Assemblies" and not "Namespaces, Types and MEthods". This graph will be much smaller and faster with only 15 nodes and 30 links, but at the cost of not being able to expand and drill down to see any details.
Remove an item from the graph (after it was already render), for example, if you don't care for a specific assembly.
It takes minutes to re-draw, on a fairly powerful machine
Ok, yes, you do have to watch out for graphs with this many hidden nodes and links. You can use the the "Custom..." dialog on the Generate Dependency Graph menu to ask for "Assemblies" only and not namespaces, classes & methods, then the graph will be vastly smaller and much easier to deal with.
PS: the number on the top left of the collapsed group node is a simple count of the number of nodes inside it. So it represents a namespace, then it is usually the number of classes inside, or if it represents a Class then it's the number of methods inside, etc. This helps give an idea of hidden complexity in your system. If the number is over 100 you might not want to think twice before expand that group, etc.