In some way,
something similar is happening already in Neo4j Spatial. There is the
domain dataset that e.g. could be created using the JRuby or Spring
Data bindings, using the one-node-per-object approach. For the
exposure of Polygons, Layers, LinesStrings and Points onto a GIS view,
there are the GeometryEncoders/Decoders that tell how to fish out the
information our of the graph via traversals, so that I see them as a
projection, backing a class with an arbitrary amount of traversal and
subgraphs.

Being able to extend the projection model to include these "projected"
use cases would make for a very cool generic mapping layer, I guess it
could even do a decent work mapping different approaches onto the dame
graph (like serving a JRuby binding and at the same time being
compliant with Spring Data and some higher order mappings like Spatial
constructs).

Very cool.

Cheers,

/peter neubauer

GTalk:      neubauer.peter
Skype       peter.neubauer
Phone       +46 704 106975
LinkedIn   http://www.linkedin.com/in/neubauer
Twitter      http://twitter.com/peterneubauer

http://www.neo4j.org               - Your high performance graph database.
http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party.



On Thu, Jan 20, 2011 at 12:49 AM, Michael Hunger
<[email protected]> wrote:
> It was you David, who asked for the stricter checking against the type 
> hierarchy stored in the graph :)
>
> It does imply (right now) one node per class but not one class per node. As 
> this one node gives the instance its identity. It is also very similar to the
> Qi4j state mixins where the id was the only fixed thing around.
>
> But the thought that we started with the cross-store could apply here as 
> well, as long we have an id (and perhaps an id-store-mapping) we can also 
> have multiple stores contributing to the
> current projection.
>
> Cheers
>
> Michael
>
>
> Am 19.01.2011 um 19:50 schrieb David Montag:
>
>> Hi,
>>
>> I think that's a good idea. It makes good use of the schema-free nature of
>> the graph database, and also decouples the data from the interpretation of
>> the data. I'm not sure it has to be two different modes. Maybe you just use
>> one "projection" of the data if that's all you need. Or you use multiple.
>>
>> Does this still imply one node per class (projection)? Are you aiming to
>> change that too?
>>
>> David
>>
>> On Wed, Jan 19, 2011 at 3:40 AM, Michael Hunger <
>> [email protected]> wrote:
>>
>>> Today Andreas Kollegger and I had an interesting discussion about the
>>> prevalence of class based mapping of entities to a graph store.
>>>
>>> One of the strengths of a graph store is that you don't need a strict
>>> schema for your data and you can use lots of different projections to work
>>> with it.
>>>
>>> Spring Data Graph currently focuses on a single projection of a node to an
>>> entity instance (1:1) that traditional ORMs focused on.
>>>
>>> But we could do more. We can project the node to many different classes, as
>>> long as the properties that are part of the class are there, we can sensibly
>>> work with the node.
>>> Even if the projection class is not part of the type hierarchy that was
>>> originally used to create and populate the node it can be used to access it.
>>>
>>> That makes room for some interesting things like:
>>> * new domain concepts can be used on top of existing data
>>> * get rid of inheritance hierarchies
>>> * traverse over a lot of nodes that support some basic properties that form
>>> a concept (e.g. Person) using that simple concept during the traversal and
>>> from there project those nodes to more concrete concepts as needed (e.g.
>>> Employee, Customer)
>>> * data/schema evolution / versioning
>>>
>>> We can run DATAGRAPH in a strict mode (not default) where it checks that
>>> the node requested always fit to the domain class specified (according to
>>> the type hierarchy stored in the graph). But we can (and should promote)
>>> running it in a more loosely
>>> coupled way where this free projection is possible.
>>>
>>> I would like to introduce a <T> T NodeBacked.projectTo(Class<T>) method to
>>> the aspect so that this projection is easily available.
>>>
>>> Looking for feedback on that.
>>>
>>> Cheers
>>>
>>> Michael
>>> _______________________________________________
>>> Neo4j mailing list
>>> [email protected]
>>> https://lists.neo4j.org/mailman/listinfo/user
>>>
>>
>>
>>
>> --
>> David Montag
>> Neo Technology, www.neotechnology.com
>> Cell: 650.556.4411
>> [email protected]
>> _______________________________________________
>> Neo4j mailing list
>> [email protected]
>> https://lists.neo4j.org/mailman/listinfo/user
>
> _______________________________________________
> spring-neo mailing list
> [email protected]
> https://lists.springsource.com/listmanager/listinfo/spring-neo
>
_______________________________________________
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to