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

Reply via email to