Ayende @ Rahien

Hi!
My name is Oren Eini
Founder of Hibernating Rhinos LTD and RavenDB.
You can reach me by phone or email:

ayende@ayende.com

+972 52-548-6969

, @ Q c

Posts: 5,971 | Comments: 44,508

filter by tags archive

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:

image

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.


Comments

Yaron Wittenstein

What software did you use to show the dependencies graph?

Colin

That looks like the architecture feature in VS2010.

njy
njy

@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.

njy
njy

@Yaron: ooops, missing smiley face :-)

ctx
ctx

Nice looking graph.

Does the arrows indicate dependencies? So Raven.Storage.Managed.Dll depends on Raven.Munin.dll?

Vadim Kantorov

He-he. My friend in MS Research actually works on that graph drawing piece :) If you wish, I may connect you both.

Daniel Hoelbling

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..

Ayende Rahien

I have absolutely no idea...

Chris Lovett

"OMG it takes a loooong time to layout the graph"

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.

Ayende Rahien

Chris,

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

Chris Lovett

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.

Comment preview

Comments have been closed on this topic.

FUTURE POSTS

  1. Paying the rent online - 3 days from now

There are posts all the way to Aug 03, 2015

RECENT SERIES

  1. Production postmortem (5):
    29 Jul 2015 - The evil licensing code
  2. Career planning (6):
    24 Jul 2015 - The immortal choices aren't
  3. API Design (7):
    20 Jul 2015 - We’ll let the users sort it out
  4. What is new in RavenDB 3.5 (3):
    15 Jul 2015 - Exploring data in the dark
  5. The RavenDB Comic Strip (3):
    28 May 2015 - Part III – High availability & sleeping soundly
View all series

Syndication

Main feed Feed Stats
Comments feed   Comments Feed Stats