I would say that the same is true of a "type" on a node - it could be a significant performance optimization, depending on how properties are loaded vs the "node itself". If it saves a major step by not having to search around in property "stuff", there's an immediate advantage. Also, I suspect that many (most) people would store "type" properties as string(s) (we don't, but that's only because we've basically implemented node type as a special kind of enum, similar to relationship type), the various performance issues related to string storage/retrieval exist.
Also, the very essence of a "type" on a node creates a basic sort of atomicity in terms of knowing what a node "represents", given only its node id, with no dependencies on relationships for facilitating type identity (though we use relationships in our model as a form of "implementation inheritance" similar to Tobias' comments on the subject). I really think that there are enough potential benefits to at least consider a native "type" concept it for the future, if for no other reason that uniformity of implementation, though I suspect there will be inherent performance optimizations and new types of traversals made possible and faster. The good (great) news is that the flexibility and capability of Neo4J as it already exists allows us to model all of these scenarios today! -----Original Message----- From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org] On Behalf Of Craig Taverner Sent: Thursday, May 05, 2011 10:08 AM To: Neo4j user discussions Subject: Re: [Neo4j] First-class "type" property on relationships but not nodes; why? Another view of things would be to say that ideally there should be no first class type on either relationships or nodes, since that is a domain specific concept (as Neils says he wants two types, but Rick wants one, and some object models type nodes by relating them to a separate node representing a class). Then the addition of a type to a relationship is, in my opinion, a performance optimization for many graph algorithms since the traverser will perform well if it has 'first class' access to this information, instead of hitting the property store. I guess this is my take on Tobias point that the type is a navigational feature. Now I wonder if the traverser, and many known graph algorithms, would be possible to make faster or easier to code if the nodes also had first class types? I don't know the answer to this, but assume that if it did really help, it would have been done already ;-) On Thu, May 5, 2011 at 3:52 PM, Niels Hoogeveen <pd_aficion...@hotmail.com>wrote: > > The meta model component (though in need of some attention), already allows > the typing of a node. An important difference between the typing in the meta > model component and the suggestion made in this thread is the fact that a > node according to the meta model can have more than one type, while the > RelationshipType in kernel only allows one type per relationship. > For my modeling need, the ability to assign more than one type per node is > essential. Adding a singular type at kernel level would only make things > more confusing. > I would go further than what Tobias says and would say RelationshipType is > nothing but a name, just like various properties have names. Types would > require much more information, like cardinality, source/target constraints > etc. Those are all part of the meta model where they belong. > > > From: tobias.ivars...@neotechnology.com > > Date: Thu, 5 May 2011 15:33:04 +0200 > > To: user@lists.neo4j.org > > Subject: Re: [Neo4j] First-class "type" property on relationships but not > nodes; why? > > > > The RelationshipType isn't a type. It is a navigational feature. > > > > I've slapped this link around for a few years now, every time this > question > > has been brought up: > > http://lists.neo4j.org/pipermail/user/2008-October/000848.html > > > > The fact that RelationshipType is a navigational feature and not a type > > means that there is in fact already a corresponding thing for nodes: the > > Indexes. > > > > But I agree that there would be things we could gain by adding a Type > > concept to Nodes. Such as for example better automatic indexing. But I > don't > > know what it would look like. And I want it to be clear that such a > feature > > is very different from what RelationshipType is today. > > > > Cheers, > > Tobias > > > > On Thu, May 5, 2011 at 10:29 AM, Aseem Kishore <aseem.kish...@gmail.com > >wrote: > > > > > I've found it interesting that Neo4j has a mandatory "type" property on > > > relationships, but not nodes. Just curious, what's the reasoning behind > the > > > design having this distinction? > > > > > > If you say "you need to know what type of relationship these two nodes > > > have", I would reply, "don't you also need to know what type of nodes > they > > > are, as well?" > > > > > > Similarly, if you say "because there can be many different types of > > > relationships", I would reply, "there can also be many different types > of > > > nodes, and in both cases, there doesn't need to be". > > > > > > A perfect example is in the documentation/tutorial: movies and actors. > Just > > > the fact that we talk about the nodes in the database as "movies" and > > > "actors" -- wouldn't it be helpful for the database to support that > > > categorization first-class? > > > > > > To be precise, it's easy for us to add a "type" property to nodes > ourselves > > > (we do in our usage), but it's not a first-class property like > > > relationships, where queries and traversals can easily and naturally > > > specify > > > the type or types they expect. > > > > > > Thanks! > > > > > > Aseem > > > _______________________________________________ > > > Neo4j mailing list > > > User@lists.neo4j.org > > > https://lists.neo4j.org/mailman/listinfo/user > > > > > > > > > > > -- > > Tobias Ivarsson <tobias.ivars...@neotechnology.com> > > Hacker, Neo Technology > > www.neotechnology.com > > Cellphone: +46 706 534857 > > _______________________________________________ > > 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