[Neo4j] Article: "The Coming SQL Collapse"

Michael Hunger michael.hunger at neotechnology.com
Fri Oct 14 19:10:28 CEST 2011


Am 14.10.2011 um 18:47 schrieb Marko Rodriguez:
> 
>  This is not conducive to Baysian-based reasoning, evidential reasoning, other forms of logics (classical and non-classical) .... 

How would you model those to a suitable domain model?
Can you give a good example?
Michael

> 
> On Oct 14, 2011, at 10:32 AM, Thad Guidry wrote:
> 
>> I should further say after looking more at Spring Data Neo4j ... that it
>> allows an easy Type system layer on top of Neo4j.  Is that correct ?  The
>> same kind of Type system that Freebase.com has had always.
>> 
>> In fact, Micheal, I would say even say that with Spring Data Neo4j
>> installed, you could almost point users to the Freebase Data modeling style
>> guide as a good reference :
>> http://wiki.freebase.com/wiki/Data_modeling_style_guide
>> 
>> On Fri, Oct 14, 2011 at 11:26 AM, Thad Guidry <thadguidry at gmail.com> wrote:
>> 
>>> From your quick example, it looks like Spring Data Neo4j is what most folks
>>> really expect out of the box with Neo4j.  I know I certainly did when I
>>> installed Neo4j for the first time, last year.  Spring Data seems to meet
>>> with my expectation (based on my bottom-up Schema-evolving work on
>>> Freebase.com)
>>> 
>>> 
>>> On Fri, Oct 14, 2011 at 11:15 AM, Michael Hunger <
>>> michael.hunger at neotechnology.com> wrote:
>>> 
>>>> With spring data neo4j you are able to use any domain entity with any
>>>> node, so it is for instance
>>>> possible to project an entity to another when used in a different context.
>>>> 
>>>> Otherwise the Spring Data Neo4j config less invasive and more concise than
>>>> the existing model
>>>> but uses the same approach behind the scenes (fields are mapped to
>>>> properties and relationships - 1:1 or 1:n are mapped to relationships).
>>>> 
>>>> @NodeEntity
>>>> class Movie {
>>>> String title;
>>>> Set<Actor> actors;
>>>> }
>>>> 
>>>> a more elaborate example.
>>>> @NodeEntity
>>>> class Movie {
>>>> @GraphId Long id;
>>>> @Indexed(fulltext=true, indexName="movies") String title;
>>>> @RelatedToVia(type="ACTS_IN", direction=Direction.INCOMING)
>>>> Iterable<Role> roles;
>>>> Person director;
>>>> }
>>>> 
>>>> @RelationshipEntity
>>>> class Role {
>>>> @Indexed String title;
>>>> @StartNode Actor actor;
>>>> @EndNode Movie movie;
>>>> }
>>>> 
>>>> @NodeEntity
>>>> class Actor {
>>>> String name;
>>>> Gender gender;
>>>> Date birthday;
>>>> public Role actsIn(Movie movie, String role) {
>>>>    return relateTo(movie,"ACTS_IN",Role.class).withTitle(role);
>>>> }
>>>> @RelatedTo(type="ACTS_IN")
>>>> Set<Movie> movies;
>>>> }
>>>> 
>>>> 
>>>> Am 14.10.2011 um 16:14 schrieb Thad Guidry:
>>>> 
>>>>> I would suggest breaking down his statement further and fill in the
>>>> blanks
>>>>> to gain even better insight into his conjecture.
>>>>> 
>>>>> "it‘s basically a bunch of nodes where you just blob your attributes.‘
>>>>> Worse than that, to wrap objects around it, you have to have them
>>>> explicitly
>>>>> incorporate their node class, which is ugly, smelly, violates every law
>>>> of
>>>>> separation of concerns and logical vs. physical models."
>>>>> 
>>>>> 
>>>>> "it's" - Neo4j
>>>>> 
>>>>> "to wrap objects around IT" - what is the IT that he is referring to ?
>>>>> 
>>>>> "you have to have THEM explicitly incorporate THEIR node class" - what
>>>> is
>>>>> THEM / THEIR really mean for Neo4j here ?
>>>>> 
>>>>> "law of separation of concerns" - what and where are we JOINING that
>>>> should
>>>>> be SEPARATING , is it only the Domain objects ?
>>>>> 
>>>>> 
>>>>> From outside looking in, I have seen others not complete their Domain
>>>> Model
>>>>> as needed with Neo4j, and also make it entirely TOO SIMPLE.  Why ?
>>>> Because
>>>>> they might be new to graph databases, or their Domain Model really IS
>>>> NOT
>>>>> complete yet and they need help from others to assist with putting
>>>> together
>>>>> an elegant Domain Model to begin with.  Being able to easily wire up a
>>>>> Domain Model is the primary reason they were attracted to graph
>>>> databases in
>>>>> the first place !... to build it out without resorting to defining a
>>>> rigid
>>>>> schema (a SQL table mantra).  But many need help in contorting their
>>>> Domain
>>>>> Model over time.  To me, Neo4j is already wide open enough to handle
>>>> that
>>>>> contortion and the beauty of Neo4j & graph databases in general.
>>>>> 
>>>>> Folks just need better much more detailed Domain Model examples than
>>>> what is
>>>>> available, that would help incredibly so, since many folks have a
>>>> complex
>>>>> Domain Model to begin with (they just do not realize it yet) and they
>>>> are
>>>>> hoping Neo4j will help them quickly wire it up, stretch it out when
>>>> needed,
>>>>> and analyze the hell out of it when the time comes, and stretch it out
>>>> even
>>>>> more as they continue to fill it up and expand their Domain Model.  A
>>>> bottom
>>>>> up approach (and I mean really BOTTOM) is the best practice, but it does
>>>>> take thought and research in finding where that generic bottom is at.  A
>>>>> "Friend" - what is a Friend, what attributes does a Friend have ? Which
>>>> ones
>>>>> do I care about now and can worry about later ?  A "Stock Issuing
>>>> Company",
>>>>> do I need to think of my relationships first for those, or should I
>>>> start
>>>>> with attributes ?  Will those attributes be shared with others ?  Do I
>>>> care
>>>>> about it now at this early beginning of my Domain Model, or can I wait
>>>> on
>>>>> this ?  Should I start with attributes (properties) always, and leave
>>>>> relationships alone until the very end, when I build a Domain Model ?
>>>> (the
>>>>> answer to that last question is YES, because Neo4j actually DOES allow
>>>> you
>>>>> to)
>>>>> 
>>>>>> He attacks our pattern of building domain models with Neo4j, calling it
>>>>>>> "ugly", "smelly" and "in violation of every law of separation of
>>>> concerns
>>>>>>> and logical vs. physical models". Is he right? My feeling is that he
>>>> is
>>>>>>> brain washed with too many so called "best practices", but Neo4j has
>>>> been
>>>>>> my
>>>>>>> main model for a long time now, my perspective is likely skewed. I'd
>>>> like
>>>>>> to
>>>>>>> hear your thoughts.
>>>>>> 
>>>>> 
>>>>> Your main model IS NOT Neo4j.  That is your main database that "holds"
>>>> your
>>>>> Domain Model.  And if Neo4j is not really doing this from top to bottom,
>>>>> then I would agree with Richard that the Neo4j infrastructure is not in
>>>> the
>>>>> best place right now and might need more work.
>>>>> 
>>>>> --
>>>>> -Thad
>>>>> http://www.freebase.com/view/en/thad_guidry
>>>>> _______________________________________________
>>>>> Neo4j mailing list
>>>>> User at lists.neo4j.org
>>>>> https://lists.neo4j.org/mailman/listinfo/user
>>>> 
>>>> _______________________________________________
>>>> Neo4j mailing list
>>>> User at lists.neo4j.org
>>>> https://lists.neo4j.org/mailman/listinfo/user
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> -Thad
>>> http://www.freebase.com/view/en/thad_guidry
>>> 
>> 
>> 
>> 
>> -- 
>> -Thad
>> http://www.freebase.com/view/en/thad_guidry
>> _______________________________________________
>> Neo4j mailing list
>> User at lists.neo4j.org
>> https://lists.neo4j.org/mailman/listinfo/user
> 
> _______________________________________________
> Neo4j mailing list
> User at lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user



More information about the User mailing list