Niels, on the query language side, I think that is both an advantage and a disadvantage. Advantage in that you get programmatic access to the storage engine like with the Java API or Gremlin, disadvantage in that you are essentially forced to script and optimize yourself.
I concur with you the SQL is not the way to go since it can't express the type of data structures and queries used in NOSQL, but I believe that declarative languages are MUCH easier to learn for users in 90% of the cases - and they are constant regardless of the surrounding software language used. Also, they open up for query optimizers and distribution and auto-indexing, which are things we want to explore with Cypher later on. 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://startupbootcamp.org/ - Öresund - Innovation happens HERE. http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party. On Sat, Oct 15, 2011 at 2:05 AM, Niels Hoogeveen <[email protected]> wrote: > > I concur. In my opinion Neo4j is more a storage engine with certain storage > features than a database management system. This is already exemplified by > the absence of a query language as primary interface. > The author is therefore wrong in his assessment that there is no separation > of logical model and physical model. There is no logical model, so the > separation is complete, any logical model can be bolted onto the physical > model, or can be stored in a separate repository. > In general, I think, NOSQL databases are more storage engine than database > management system. It's exactly the control over storage that forms the niche > NOSQL database operate in. Distributed key value lookup and tree/graph > traversals are typical application domains where SQL engines don't provide > the hooks to efficiently or scalably process certain questions or actions. > Niels > >> Date: Sat, 15 Oct 2011 01:12:58 +0200 >> From: [email protected] >> To: [email protected] >> Subject: Re: [Neo4j] Article: "The Coming SQL Collapse" >> >> My 2 cents: >> >> The Neo4j API is clean, open, and sort-of low level by intention. It is >> neither ugly, smelly, nor it does it violate anything. >> >> Neo4j in general is very stable. But, of course, if you try the latest >> snapshot, it may have bugs (as any software has). >> >> Since May 2010, we're developing a CMS based on Neo4j (structr) and do >> some graph-related projects. >> >> Coming from the Oracle world, I can only say that working with Neo4j is >> a revelation. >> >> Axel >> >> >> Am 14.10.2011 14:48, schrieb Tobias Ivarsson: >> > We had an interesting discussion about this internally at Neo Technology >> > today. We thought it might be of interest to the broader community. I don't >> > think the discussion is over, so it would be interesting to continue it on >> > the public mailing list. >> > >> > It regards the initial paragraphs of an article posted to dzone recently: >> > http://www.dzone.com/links/rss/the_coming_sql_collapse.html >> > It mentions Neo4j and how the author dislikes a common way of using Neo4j >> > for building applications. >> > >> > It would be interesting to hear suggestions on how to improve this. >> > >> > Forwarded conversation follows: >> > >> > On Fri, Oct 14, 2011 at 10:13 AM, Tobias Ivarsson< >> > [email protected]> wrote: >> > >> >> I found this while reading feeds in bed last night: >> >> >> >> *The Coming SQL Collapse* >> >> http://www.dzone.com/links/rss/the_coming_sql_collapse.html >> >> >> >> (Sent from Flipboard<http://flipboard.com>) >> >> >> >> >> >> The things he say about SQL vs NOSQL is not very interesting, but I'd like >> >> to raise what he says about Neo4j: >> >> >> >> I looked at neo4j briefly the other day, and quite predictably thought >> >>> ‘wow, this looks like a serious tinkertoy: 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. On the plus side, as I started to look at it >> >>> more, I realized that it was the perfect way to implement a backend for a >> >>> bayesian inference engine (more on that later). Why? Because inference >> >>> doesn‘t care particularly about all the droll requirements that are >> >>> settled >> >>> for you by SQL, and there are no real set operations to speak of. >> >> >> >> 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. >> >> >> >> -- >> >> Tobias Ivarsson<[email protected]> >> >> >> > On Fri, Oct 14, 2011 at 10:32 AM, Rickard Öberg< >> > [email protected]> wrote: >> >> >> >> Well, I'd tend to agree with the author. Mixing persistence details with >> >> the domain model itself is really a bad idea. Infrastructure details >> >> should >> >> not pollute the domain logic as it does with the currently "suggested" >> >> usage >> >> of Neo4j. But I think both Spring Data Graph and the Qi4j usage model >> >> fixes >> >> this, as it allows you to keep many of those things outside of the domain >> >> code. >> >> >> >> /Rickard >> > >> > On Fri, Oct 14, 2011 at 11:45 AM, Tobias Ivarsson<tobias.ivarsson@ >> > neotechnology.com> wrote: >> > >> >> On Fri, Oct 14, 2011 at 11:21 AM, Rickard Öberg< >> >> [email protected]> wrote: >> >> >> >>> On 10/14/11 17:16 , Tobias Ivarsson wrote: >> >>> >> >>>> I was hoping for a bit more elaboration, of why it is a bad idea. >> >>>> >> >>>> Spring Data Neo4j operates mainly in the same way (at least it did when >> >>>> I was part of the design process), it just hides the details of it. >> >>>> >> >>>> The model we suggest is not to mix infrastructure details (nodes, >> >>>> relationships, traversals) with the domain logic. We suggest the domain >> >>>> logic be a separate layer, acting on domain data objects (defined as a >> >>>> set of interfaces). What we do suggest though is for those domain data >> >>>> objects to be implemented as wrappers of nodes and relationships. >> >>>> >> >>> That sounds like "transaction script+anemic domain model", which is an >> >>> anti-pattern as well. >> >> >> >> I'm guessing the anemic domain model is what you are pointing out as the >> >> anti-pattern. I can see how transaction scripts are and ADM usually come >> >> together though. >> >> >> >> References: >> >> >> >> http://martinfowler.com/eaaCatalog/transactionScript.html >> >> http://martinfowler.com/bliki/AnemicDomainModel.html >> >> >> >> >> >> >> >>> Domain logic should be in the domain objects, and so splitting them into >> >>> several layers confuse things more than it helps. >> >> >> >> I agree with you, SDN "solves" this, and does so well. >> >> >> >> >> >>> So is the bad part of it just the part of having the implementation of >> >>>> your domain data objects deal with the Neo4j API, instead of having DTOs >> >>>> and DAOs that you load from the database, operate on in memory, then >> >>>> store back to the db at explicit points? Or are there deeper issues than >> >>>> that? >> >>>> >> >>> It relates to testability (you should be able to test domain objects >> >>> without infrastructure), code cohesion (put domain logic in domain >> >>> objects), >> >>> and as the article author points out, separation of concerns in general. >> >> >> >> The testability aspect is interesting and important. I don't have enough >> >> SDN experience to know how it fares in that regard. >> >> >> >> "separation of concerns in general" - anything else to this? or would this >> >> (normally) be achieved when testability without infrastructure is >> >> achieved? >> >> >> > On Fri, Oct 14, 2011 at 11:49 AM, Rickard Öberg<rickard.oberg@ >> > neotechnology.com> wrote: >> > >> >> On 10/14/11 17:45 , Tobias Ivarsson wrote: >> >> >> >>> I'm guessing the anemic domain model is what you are pointing out as the >> >>> anti-pattern. I can see how transaction scripts are and ADM usually come >> >>> together though. >> >>> >> >> Yeah, it's when you use the two together (very common in Hibernate world >> >> as >> >> well) that you run into problems, if you do anything but cruddy stuff. >> >> >> >> >> >> The testability aspect is interesting and important. I don't have enough >> >>> SDN experience to know how it fares in that regard. >> >>> >> >>> "separation of concerns in general" - anything else to this? or would >> >>> this (normally) be achieved when testability without infrastructure is >> >>> achieved? >> >>> >> >> I suggest that you read up on SOLID: >> >> http://en.wikipedia.org/wiki/**SOLID_%28object-oriented_**design%29<http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29> >> >> >> >> And in particular SRP: >> >> http://en.wikipedia.org/wiki/**Single_responsibility_**principle<http://en.wikipedia.org/wiki/Single_responsibility_principle> >> >> >> >> Separating the domain objects from the infrastructure is a good start >> >> ("required but not enough"). >> >> >> >> >> >> /Rickard >> >> >> >> _______________________________________________ >> Neo4j mailing list >> [email protected] >> https://lists.neo4j.org/mailman/listinfo/user > > _______________________________________________ > Neo4j mailing list > [email protected] > https://lists.neo4j.org/mailman/listinfo/user > _______________________________________________ Neo4j mailing list [email protected] https://lists.neo4j.org/mailman/listinfo/user

