Hello,

> I've created a small version of the web graph. I'm going to apply different 
> graph algorithms (components, paths, distances,...) to know this graph better 
> and better for future investigations. It seems that I have two options:
> 1. Using the graph algorithm package: 
> http://components.neo4j.org/neo4j-graph-algo/
> 2. Using the Gremlin and leverage the algorithms of different graph 
> libraries: 
> http://wiki.github.com/tinkerpop/gremlin/working-with-jung-algorithms -
> 
> I don't have complete information about the last option. Would you please 
> familiar us with it?
> Let me know if there are any other option (or library other than JUNG) for 
> this purpose.


If you have a "small version of a web graph," I would just load the graph up in 
iGraph, JUNG, NetworkX, etc. and make use of all their standard, graph-analysis 
algorithm implementations---these implementations are blazing fast, in memory, 
and have been developed by many people for many years. However, if you start to 
deal with multi-relational graphs---e.g. webpage--href-->webpage, 
webpage--contains-->image, person--authored-->webpage, then you can't use these 
packages as they are not meant for multi-relational graphs. See---(at least 
read the abstract and introduction to understand the problem):

http://arxiv.org/abs/0806.2274

What Gremlin is good for is defining abstract paths through a graph---something 
that Neo4j algorithms package can not handle. Again, I've said in many emails 
before---Neo4j is a multi-relational graph (as a data model), but 
unfortunately, the Neo4j graph algorithm and traverser toolkit do not make 
sufficient use of this fact. As such, they do not allow for fully expressive, 
multi-relational graph analysis algorithms. However, unfortunately, the way 
Gremlin is implemented currently, it is not optimized for speed. With it only 
being in version 0.2.2, its still very much a "work in progress." By version 
1.0, Gremlin's core engine will be rewritten to be orders of magnitude faster. 
On a positive note, what you get with Gremlin is the ability to calculate the 
near limitless types of PageRanks/geodesics/eigenvectors/etc. that exist within 
a multi-relational graph---Lets isolate PageRank ---- e.g. PageRank for all 
webpages that have greater than 10 outgoing edges, the PageRank of al
 l webpages where my friends are the authors and there are more than 10 images 
in the webpage, PageRank for all WebPages that are most two degrees away from 
Google, PageRank over two steps --- not one. 

When you start dealing with multi-relational graphs you have to deal with "what 
do you mean by adjacency?" When you deal with the various ways in which two 
vertices can be related through long, winding, typed paths through the graph, 
then you have another problem on your hand that is not solved by standard graph 
analysis toolkits. See the slide show below for more information on Gremlin and 
its use cases:

http://markorodriguez.com/Lectures_files/cnls-gremlin-2010.pdf

In short:

1. use an in-memory graph analysis framework for graphs under ~250 (give or 
take based on your machine) million elements.
2. use Neo4j graph algos if you have a large graph and you don't require 
multi-relational graph analysis algorithms.
3. use Gremlin if you have a small graph or are doing a local analysis 
algorithm that requires Turing-complete path descriptions.

Take care,
Marko.

http://markorodriguez.com

_______________________________________________
Neo mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to