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