Sorry meant Niels of course ;)

Sent from my iBrick4


Am 05.05.2011 um 22:35 schrieb Michael Hunger 
<michael.hun...@neotechnology.com>:

> Nils that sounds interesting do you share the type mapping code for scala 
> somewhere?
> 
> Michael
> 
> Sent from my iBrick4
> 
> 
> Am 05.05.2011 um 22:22 schrieb Niels Hoogeveen <pd_aficion...@hotmail.com>:
> 
>> 
>> 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