<p>Regarding new-ish and interesting algorithms, this is by no means exhaustive or state of the art, but these are the first places I would look:</p>

<p><em>Specific Algorithm</em>: <a href="http://scholar.google.se/scholar?cluster=3057194774950103339&amp;hl=en&amp;as_sdt=0,5">DiDiC (Distributed Diffusive Clustering)</a> - I used it once in my thesis (<a href="http://arxiv.org/abs/1301.5121">Partitioning Graph Databases</a>)</p>

<ul>
<li>You iterate over all nodes, then for each node retrieve all neighbors, in order to spread some of "some unit" to all your neighbors</li>
<li>Easy to implement. </li>
<li>Can be made deterministic</li>
<li>Iterative - as it's based on iterations (like Super Steps in Pregel) you can stop it at any time. The longer you leave it the better the result, in theory (though in some cases, on certain graph shapes it can be unstable)</li>
<li>When we implemented this we ran it for 100 iterations on a machine with ~30GB RAM, for up to ~4 million nodes - it took no more than two days to complete.</li>
</ul>

<p><em>Specific Algorithm</em>: <a href="http://scholar.google.se/scholar?cluster=16072457052181015857&amp;hl=en&amp;as_sdt=0,5">EvoCut "Finding sparse cuts locally using evolving sets"</a> - local probabilistic algorithm from Microsoft - <a href="http://scholar.google.se/scholar?q=related%3aMa34jojWDN8J%3ascholar.google.com/&amp;hl=en&amp;as_sdt=0,5">related to these papers</a></p>

<ul>
<li>Difficult to implement</li>
<li>Local algorithm - BFS-like access patterns (random walks)</li>
<li>It's been a while since i read that paper, but i remember it was built on clean abstractions:
<ul>
<li>EvoNibble (pluggable - decides how much of neighborhood to add to the current cluster</li>
<li>EvoCut (calls EvoNibble multiple times to find the local cluster)</li>
<li>EvoPartition (calls EvoCut repeatedly to partition entire graph)</li>
</ul></li>
<li>Not deterministic</li>
</ul>

<p><em>General Algorithm Family</em>: <a href="http://scholar.google.se/scholar?as_ylo=2009&amp;q=hierarchical%20graph%20clustering&amp;hl=en&amp;as_sdt=0,5">Hierarchical Graph Clustering</a></p>

<p>From a high level:</p>

<ul>
<li>Coarsen the graph by collapsing nodes into aggregate nodes
<ul>
<li>coarsening strategy is selectable</li>
</ul></li>
<li>Find clusters in the coarsened/smaller graph
<ul>
<li>clustering strategy is selectable</li>
</ul></li>
<li>Incrementally decoarsen the graph, refining at the clustering at each step
<ul>
<li>refining strategy is selectable</li>
</ul></li>
</ul>

<p>Notes:</p>

<ul>
<li>If the graph changes slowly (or results don't need to be right up to date) it may be possible to coarsen once (or infrequently) then work with the coarsened graph - to save computation</li>
<li>I don't know of a specific algorithm to recommend</li>
</ul>

<p><strong>General limitations</strong> - the things few clustering algorithms do:</p>

<ul>
<li>Node types not acknowledged - i.e., all nodes treated equally</li>
<li>Relationship types not acknowledged - i.e., all relationships treated equally</li>
<li>Relationship direction not acknowledged - i.e., relationships treated as undirected</li>
</ul>
Graph partition algo with Neo4j graph database
<p>I know there has some famous graph partition algo tools like METIS which is implemented by karypis Lab (<a href="http://glaros.dtc.umn.edu/gkhome/metis/metis/overview" rel="noreferrer">http://glaros.dtc.umn.edu/gkhome/metis/metis/overview</a>)</p>

<p>but I wanna know is there any method to partition graph stored in Neo4j?
or I have to dump the Neo4j's data and transform the node and edge format manually to fit the METIS input format?</p>