Hi Michael,

I haven't yet worked on an example. 

There are tests for the SortedTree implementation, 
but didn't add those to the IndexedRelationship class, 
which is simply a wrapper around SortedTree. 
Having a test would have caught the error 
that no relationship to the treeNode was created 
(fixed that bug and pushed it to Git) 
(note to self: always create a unit test, 
especially when code seems trivial).

There is no relationship expander that uses this. 
The RelationshipExpander has a method Iterable<Relationship> expand(Node node) 
which cannot be supported, since there is no direct relationship from startnode 
to endnode. 
Instead there is a path through the index tree. 

It's not possible to support the original relationship-traversal API 
since the IndexedRelationship class is not a wrapper around a node, 
but a wrapper around the relationships of a certain RelationshipType in the 
OUTGOING direction. 

As to the name of the class. 
It is essentially an indexed relationship, 
and not just a solution to the densely-connected-node problem. 
An indexed relationship can also be used to maintain 
a sorted set of relationships of any size, 
and can be used to guarantee unicity constraints. Niels
> From: michael.hun...@neotechnology.com
> Date: Thu, 7 Jul 2011 13:27:00 +0200
> To: user@lists.neo4j.org
> Subject: Re: [Neo4j] Indexed relationships
> 
> Good work,
> 
> do you have an example ready (and/or some tests that show how it works/is 
> used) ?
> 
> In creation, manual traversal and automatic traversal (i.e. is there a 
> RelationshipExpander that uses it).
> 
> And in the constructor if there is no relationship to the treeNode, you 
> create a new one, but that new treeNode is not connected to the actual node?
> 
> I'm not sure if it should support the original relationship-traversal API / 
> methods (getRelationships(Dir,type), etc).
> 
> Perhaps that IndexedRelationship should rather be just a wrapper around a 
> SuperNode ? So probably rename it to "SuperNode(Wrapper) or 
> HeavilyConnectedNode(Wrapper) ?)
> 
> Cheers
> 
> Michael
> 
> Am 07.07.2011 um 12:51 schrieb Niels Hoogeveen:
> 
> > 
> > Finished the implementation of indexed relationships. The graph collections 
> > component now contains the package 
> > https://github.com/peterneubauer/graph-collections/tree/master/src/main/java/org/neo4j/collections/indexedrelationship,
> >  containing the IndexedRelationship class.
> > This class can be used instead of regular relationships when:relationships 
> > need to be stored in a particular sort ordera unicity constraint needs to 
> > be guaranteed nodes become densely populated with relationships.
> > The implementation is traverser friendly. Given a start nodes all end nodes 
> > can be found by following four relationships types in outgoing direction. 
> > Given an end node the start node can be found by following these four 
> > relationship types in incoming direction. Of course this functionality is 
> > also covered in the API.
> > Niels
> > 
> >> From: pd_aficion...@hotmail.com
> >> To: user@lists.neo4j.org
> >> Date: Thu, 7 Jul 2011 02:36:29 +0200
> >> Subject: Re: [Neo4j] Indexed relationships
> >> 
> >> 
> >> Pushed SortedTree to Git after adding a unit test and doing some debugging.
> >> TODO:Add API for indexed relationships using SortedTree as the 
> >> implementation.Make SortedTree thread safe.
> >> With regard to the latter issue. I am considering the following solution. 
> >> Acquire a lock (delete a non existent property) on the node that points to 
> >> the root of the tree at the start of AddNode, RemoveNode and Delete. No 
> >> other node in the SortedTree is really stable, even the rootnode may be 
> >> moved down, turning another node into the new rootnode, while after a 
> >> couple of remove actions the original rootnode may even be deleted. 
> >> Locking the node pointing to the rootnode, prevents all other 
> >> threads/transactions from updating the tree. This may seem restrictive, 
> >> but a single new entry or a single removal may in fact have impact on much 
> >> of the tree, due to balancing. More selective locking would require a 
> >> prebalancing tree walk, determining the affected subtrees, lock them and 
> >> once every affected subtree is locked, perform the actual balancing. 
> >> Please let me hear if there are any objections to locking the node 
> >> pointing to the tree as the a solution to make SortedTree thread safe.
> >> Niels
> >> 
> >>> Date: Tue, 5 Jul 2011 08:27:57 +0200
> >>> From: neubauer.pe...@gmail.com
> >>> To: user@lists.neo4j.org
> >>> Subject: Re: [Neo4j] Indexed relationships
> >>> 
> >>> Great work Nils!
> >>> 
> >>> /peter
> >>> 
> >>> Sent from my phone.
> >>> On Jul 4, 2011 11:39 PM, "Niels Hoogeveen" <pd_aficion...@hotmail.com>
> >>> wrote:
> >>>> 
> >>>> Made some more changes to the SortedTree implementation. Previously
> >>> SortedTree would throw an exception if a duplicate entry was being added.
> >>>> I changed SortedTree to allow a key to point to more than one node, 
> >>>> unless
> >>> the SortedTree is created as a unique index, in which case an exception is
> >>> raised when an attempt is made to add a node to an existing key entry.
> >>>> A SortedTree once defined as unique can not be changed to a non-unique
> >>> index or vice-versa.
> >>>> SortedTrees now have a name, which is stored in the a property of the
> >>> TREE_ROOT relationship and in the KEY_VALUE relationship (a new 
> >>> relationship
> >>> that points from the SortedTree to the Node inserted in the SortedTree). 
> >>> The
> >>> name of a SortedTree can not be changed.
> >>>> SortedTrees now store the class of the Comparator, so a SortedTree, once
> >>> created, can not be used with a different Comparator.
> >>>> SortedTree is now an Iterable, making it possible to use it in a
> >>> foreach-loop.
> >>>> Since there are as of yet, no unit tests for SortedTree, I will create
> >>> those first before pushing my changes to Git. Preliminary results so far 
> >>> are
> >>> good. I integrated the changes in my own application and it seems to work
> >>> fine.
> >>>> Todo:
> >>>> Decide on an API for indexed relationships. (Community input still
> >>> welcome).Write unit tests.Make SortedTree thread safe (Community help 
> >>> still
> >>> welcome).
> >>>> Niels
> >>>> 
> >>>>> From: pd_aficion...@hotmail.com
> >>>>> To: user@lists.neo4j.org
> >>>>> Date: Mon, 4 Jul 2011 15:49:45 +0200
> >>>>> Subject: Re: [Neo4j] Indexed relationships
> >>>>> 
> >>>>> 
> >>>>> I forgot to add another recurrent issue that can be solved with indexed
> >>> relationships: guaranteed unicity constraints.
> >>>>>> From: pd_aficion...@hotmail.com
> >>>>>> To: user@lists.neo4j.org
> >>>>>> Date: Mon, 4 Jul 2011 01:55:08 +0200
> >>>>>> Subject: [Neo4j] Indexed relationships
> >>>>>> 
> >>>>>> 
> >>>>>> In the thread [Neo4j] traversing densely populated nodes we discussed
> >>> the problems arising when large numbers of relationships are added to the
> >>> same node.
> >>>>>> Over the weekend, I have worked on a solution for the
> >>> dense-relationship-nodes using SortedTree in the neo-graph-collections
> >>> component. After some minor tweaks to the implementation of SortedTree, I
> >>> have managed to get a workable solution, where two nodes are not directly
> >>> linked by a relationship, but by means of a BTree (entirely stored in the
> >>> graph).
> >>>>>> Before continuing this work, I'd like to have a discussion about
> >>> features, since what we have now is not just a solution for the dense
> >>> populated node issue, but is actually a full fledges indexed relationship,
> >>> which makes it suitable for other purposes too.
> >>>>>> An indexed relationship can for example be used to maintain a sorted
> >>> set of relationships in the graph, that is not necessarily huge, but large
> >>> enough to make sorting on internal memory too expensive an operation, or
> >>> situations where only one out of a large number of relationships is 
> >>> actually
> >>> traversed in most cases.
> >>>>>> There are probably more use cases for in-graph indexed relationships,
> >>> so I'd like to know what features are desirable and what API would Neo4J
> >>> users appreciate.
> >>>>>> P.S. I still think it would be good to consider, if technically
> >>> possible, partitioning the relationship store per relationship type and 
> >>> per
> >>> direction. The indexed relationship solution works, but is of course 
> >>> slower
> >>> than a direct relationship, both with respect to insert time and traversal
> >>> time. If dense relationships are never traversed going out of the dense
> >>> node, the extra structure maintained by the BTree is only extra burden.
> >>>>>> P.P.S. If there are people with experience to make an implementation
> >>> thread safe, please volunteer to help make the implementation production
> >>> proof.
> >>>>>> Niels
> >>>>>> _______________________________________________
> >>>>>> Neo4j mailing list
> >>>>>> User@lists.neo4j.org
> >>>>>> https://lists.neo4j.org/mailman/listinfo/user
> >>>>> 
> >>>>> _______________________________________________
> >>>>> Neo4j mailing list
> >>>>> User@lists.neo4j.org
> >>>>> https://lists.neo4j.org/mailman/listinfo/user
> >>>> 
> >>>> _______________________________________________
> >>>> Neo4j mailing list
> >>>> User@lists.neo4j.org
> >>>> https://lists.neo4j.org/mailman/listinfo/user
> >>> _______________________________________________
> >>> Neo4j mailing list
> >>> User@lists.neo4j.org
> >>> https://lists.neo4j.org/mailman/listinfo/user
> >>                                      
> >> _______________________________________________
> >> Neo4j mailing list
> >> User@lists.neo4j.org
> >> https://lists.neo4j.org/mailman/listinfo/user
> >                                       
> > _______________________________________________
> > Neo4j mailing list
> > User@lists.neo4j.org
> > https://lists.neo4j.org/mailman/listinfo/user
> 
> _______________________________________________
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
                                          
_______________________________________________
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to