It is possible to grab an id from the id-generator, but then every call to GraphDatabaseService#getRelationshipById() will throw a NotFoundException.
> From: michael.hun...@neotechnology.com > Date: Thu, 7 Jul 2011 19:09:41 +0200 > To: user@lists.neo4j.org > Subject: Re: [Neo4j] Indexed relationships > > Why can't they should.n't it be possible to grab an id from the id-generator > on creation and store it as property? > > Sent from my iBrick4 > > > Am 07.07.2011 um 16:55 schrieb Niels Hoogeveen <pd_aficion...@hotmail.com>: > > > > > Hi Michael,I realize that the implementation of IndexedRelationship can in > > fact support returning relationships, and I have a preliminary version > > running locally now.The returned relationships can support all methods of > > the Relationship interface, returning the node pointing to the treeRoot as > > the startNode, and returning the node set as the key_value as the > > endNode.All relationship properties will be stored on the KEY_VALUE > > relationship pointing to the endNode.There is one caveat to this solution, > > the returned relationships cannot support the getId() method,and will throw > > an UnsupportedOperationException when being called.IndexedRelationship will > > implement Iterable<Relationship>.With these changes, it is possible to > > create an Expander and I am working right now to implement that.Niels > > > >> From: pd_aficion...@hotmail.com > >> To: user@lists.neo4j.org > >> Date: Thu, 7 Jul 2011 14:46:35 +0200 > >> Subject: Re: [Neo4j] Indexed relationships > >> > >> > >> 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 > > > > _______________________________________________ > > 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