I solved the node typing problem using
http://wiki.neo4j.org/content/Design_Guide#Subreferences . This worked out
well for starting traversals over all nodes of a particular type. Many of my
traversal problems can be solved easily with a Pathfinder initialized with
two subreference nodes to get all paths between two types. For cases in
which I need a particular node of a particular type, I hit a node index.

~/Bobby


On Thu, May 5, 2011 at 3:22 PM, Niels Hoogeveen
<pd_aficion...@hotmail.com>wrote:

>
> I agree it can be valuable to assign a type to a node. In my own work I do
> that, but we may have very different needs with regards to typing. In the
> application I have built, I use relationships to make nodes an instance of
> one or more  types, while node types can be subtype of one or more other
> node type. This does not lead to a singular type, but in fact to a
> type-forest. Each type can have an associated trait (I am working in Scala)
> that will be mixed in when creating an instance.
> On runtime the type-forest is flattened and a signature for the instance is
> generated based on this list of type names. Based on this signature a class
> for the instance is dynamically created by means of the Scala interpreter
> (unless the same class has already been created, in which case it is simply
> looked up in the classloader), where all defined traits are mixed into the
> instance.
> Having a fixed singular type doesn't solve my modeling needs. First of all
> each instance may be an instance of more than one type, but furthermore, due
> to the subtyping relations in my type system, a node may have a different
> type signature, because someone made some modification somewhere in the type
> hierarchy. It would be most unpleasant if all instances of a type need to be
> updated because somewhere a super type was added or removed.
> It is precisely the decoupling of data store and schema that makes neo4j
> such a powerful platform. My typing needs may be very different from yours,
> and i can imagine scenarios where one would even prefer the use of an
> inference engine (using eg. Pellet, Drools, Jena or Prolog) to determine the
> type of a node based on a possibly complex set of rules.
> In such a scenario things can become even more complicated because the type
> of a node may depend on the value of a property, the existence of a
> relationship or even the value of a property of a related node or a
> relationship defined on such a node (eg. someone becomes a grand parent when
> a child begets a child). Having static types would entail updating type
> information of possibly many nodes, simply because the value of a property
> changes or a relationship somewhere in the graph is removed or added.
> It is not possible to accommodate all those needs within the neo4j kernel,
> so it's better to leave it out altogether.
> For your application it may be nice to have a type label attached to a
> node. In my application it would be just ballast, because the only
> reasonable label I can think of would be "node", something that doesn't add
> any information.
>
> > From: rick.bullo...@thingworx.com
> > To: user@lists.neo4j.org
> > Date: Thu, 5 May 2011 10:25:58 -0700
> > Subject: Re: [Neo4j] First-class "type" property on relationships but not
> nodes; why?
> >
> > Respectfully disagree.  In many domains, it is valuable to know the
> "type" of the domain object a node represents "in situ" with no knowledge
> whatsoever of its place in the graph relative to other nodes.
> >
> > -----Original Message-----
> > From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org]
> On Behalf Of Niels Hoogeveen
> > Sent: Thursday, May 05, 2011 1:22 PM
> > To: user@lists.neo4j.org
> > Subject: Re: [Neo4j] First-class "type" property on relationships but not
> nodes; why?
> >
> >
> > I think the basic confusion surrounding this issue stems from the term
> RelationshipType. It is not a type, but just a key to the relationships
> value store (resulting in nodes).
> > When you consider a node as a consisting of two maps, one from property
> keys to property values and one from the tuple (RelationshipType, Direction)
> to a node, you see there is actually no type there, only keys. From a
> navigational point of view there is no need for a name for a node, because
> each node already has a name relative to the node pointing to it (the name
> of the relationship, unfortunately labeled RelationshipType).
> > When you work in Java or any other language supporting maps, you can add
> entries to map keys to maps (this is essentially what a relationship does,
> it maps a key (name + direction) to a list of maps). In those scenarios you
> don't care about a name for that map either. It is accessible through the
> keys which can be assigned specifically for each entry, making it much more
> flexible than using a fixed singular name.
> > The addition of type labels for nodes doesn't make the implementation
> more consistent, since there is no way to directly navigate from a node to
> another node (you always need a relationship for that). A property key is
> there to find a property relative to a node. A relationship label
> (unfortunately named RelationshipType) is there to find a node relative to
> another node. For consistency reasons there is no need for additional
> labels, keys or names.
> > > From: rick.bullo...@thingworx.com
> > > To: user@lists.neo4j.org
> > > Date: Thu, 5 May 2011 08:51:59 -0700
> > > Subject: Re: [Neo4j] First-class "type" property on relationships but
> not nodes; why?
> > >
> > > 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
> >
> > _______________________________________________
> > 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