[Neo4j] IndexedRelationship some observations and questions

Peter Neubauer peter.neubauer at neotechnology.com
Fri Sep 2 08:55:58 CEST 2011


On Fri, Sep 2, 2011 at 1:44 AM, Bryce <brycenz at gmail.com> wrote:

> Hi,
> I have been looking at performance options for Neo4j as presently I have
> been observing a number of performance issues.  I am still investigating
> the
> way to get the best performance out of what I am doing, and one thing it
> might be are longer running transactions stopping other work going on (but
> thats an aside to what this message is about).
> One of the things that I investigated using was the IndexedRelationship
> work
> by Niels.  Thought I would give a bit of feedback, although I haven't quite
> got this implemented at present.
> 1) I had to change the IndexedRelationshipExpander to be a public class in
> order to use it outside the package its in.
> Maybe you can fork the project and add your fix there?

> 2) IndexedRelationship assumes only one tree root per node, whereas the
> expander allows for multiple (IndexedRelationship uses
> getSingleRelationship
> vs expander using getRelationships then matching on tree name).  Having
> multiple would obviously be good as it means you could have two types of
> relationships covered by IndexedRelationship's.
> 3) Might pay to make it clear in the Javadocs for IndexedRelationship that
> the comparator can't be an anonymous inner class.
> See above, sounds like a good contribution!

> Then I have some questions about usage of this.  First a little background
> of the model I have, from reading a few things it seems quite standard.
>  There are a lot of "document" nodes each of which have a relationship with
> multiple "tag" nodes.  Documents generally have in the order of 10-20 tags,
> and tags can have as few as 1 document and sometimes tens of thousands.
>  When tags are viewed through the UI they are almost always displayed with
> a
> descending date ordered list of documents.  Seemed to be to fit quite well
> with IndexedRelationship.
> 1) I was thinking of having a switch over point at say around 500 documents
> for a given node where I will switch from using normal relationships to an
> IndexedRelationship as I was thinking at small numbers of relationships
> normal relationships would be quicker.  Would that be correct, or not worth
> it?
> 2) On the tag end (which is the incoming end of the document-tag
> relationship) I was going to use a IndexedRelationshipExpander which would
> cover the case of whether the relationship was done through normal
> relationships, or through an IndexedRelationship.  I also need to get a set
> of tags from the document end where their may be both normal relationships,
> and relationships coming from multiple IndexedRelationship's.  From looking
> at it IndexedRelationshipExpander doesn't cover the reverse direction, but
> I
> would imagine using a relationship expander here would be correct.  What
> would the best way of doing this be?
> As an aside it may be a good idea to note in the configuration settings
> page:
> http://wiki.neo4j.org/content/Configuration_Settings#Optimizing_for_traversals_example
> that -XX:+UseNUMA
> only works when using the Parallel Scavenger garbage collector (default
> or -XX:+UseParallelGC) not the concurrent mark and sweep one.  Based on

Changed in the Wiki, see
Thanks for the hint! We should get this page into the manual.


> Cheers
> Bryce
> _______________________________________________
> Neo4j mailing list
> User at lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user

More information about the User mailing list