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

Reply via email to