368 karma · joined August 6, 2010
http://tinkerpop.incubator.apache.org/docs/3.0.0-incubating/...
Gremlin has a natural compilation to the common distributed vertex-centric computing model (bulk synchronous parallel for graphs). Thus, Gremlin works for both OLTP (graph databases) and OLAP (graph processors). The Apache distribution provides OLAP connectivity to Apache Hadoop, Spark, and Giraph.
Gremlin supports both imperative path expressions and declarative pattern matching.
Gremlin can be embedded in any host language. No "fat string" with result set. The user's database query code and data manipulation code are in the same language. There exists Gremlin-Java8, Gremlin-Groovy, Gremlin-Scala, Gremlin-Clojure, Gremlin-PHP, etc.
Gremlin is Turing Complete. Most any complex enough language is. However, Gremlin is related to a Turing Machine by a very simply mapping.
See http://arxiv.org/abs/1508.03843 for detailed specifics of the aforementioned benefits.
http://thinkaurelius.com/2013/11/24/boutique-graph-data-with... (good in-memory performance -- like Neo4j)
http://thinkaurelius.com/2013/03/30/titan-server-from-a-sing... (if you do grow, its easy to add more machine)
http://thinkaurelius.com/2013/05/13/educating-the-planet-wit... (cluster-sized graphs OLTP)
http://thinkaurelius.com/2012/11/11/faunus-provides-big-grap... (OLAP engine)
http://thinkaurelius.com/2013/11/24/boutique-graph-data-with... (single-machine sized graphs OLTP)
Furthermore, please have a look at "On Graph Computing" for a break down of 3 different categories of graph computing systems -- toolkit, database, analytics. http://markorodriguez.com/2013/01/09/on-graph-computing/
Finally, yes -- there is no theoretical expressivity gains between RDBMS and property graphs (and, RDF graphs). Nor is SQL (Turing Complete versions) any less expressive than Gremlin (Turing Complete path recognition). The only argument you can make is that graphs are more (or less) effective in terms of conciseness of expression and speed of execution at particular problems. Typically (as expected), its the difference between problem datasets that look like networks (graphs) and those that look like spreadsheets (tables).
Many of the algorithms were are working with them go into the arena of computationally supporting education.
"If you want to understand X, given your personal knowledge graph, you will first need to understand Y."
"The graph is detecting that student A is struggling with X concept."
"Teacher, given the knowledge of your incoming students, you should focus more on Y concept."
"Teacher, no tests needed, here is a ranking of all your students based on their comprehension of the material."
... hopefully the 80£ (and 80 lbs) textbook will be a thing of the past.
We are a distributed team across the country and work from home completely through online tools.
If this sounds interesting, please contact us at info[at]thinkaurelius.com.
1. Difficult to deal with clusters: while you can run Titan single machine (and that is easy to deal with), handling a multi-machine cluster can be frustrating and requires some DevOps skills. Pull in Faunus/Hadoop and you are in a world unto its own.
2. Lots of options: with Titan there are numerous configurations and you get into this "n choose m" scenario. However, I typically just run Titan/CassandraEmbedded + (now) Elastic Search. For instance, I gave up on Titan/BerkeleyDB. Decided that Titan/CassandraEmbedded was sufficient for most needs and thats that.
3. Lots of access points into Titan/TinkerPop: You can run Blueprints Java native, Gremlin, Rexster RexPro, Rexster REST, ... Unfortunately, depending on your situation, one approach is better than another. I typically do Rexster Extensions + Gremlin. In the future though, with RexPro (haven't gotten into it personally), I will probably just use RexPro as I can send Gremlin in and get results out.
4. There are so many bodies of code: Titan is Apache2. This is good. It feeds on alot of excellent open source projects -- HBase, Cassandra, Lucene, ElasticSearch, Gremlin, Blueprints, Rexster, Frames, ... There is no one source of documentation. I'm either reading TinkerPop documentation or Titan documentation. Then when there are issues, Googling the Cassandra mailing list. Luckily, I'm an expert in TinkerPop and since Titan is native TinkerPop my knowledge transfers. However, there are lots of peculiarities (Titan typing, configurations, exceptions, cluster setup etc.) that I have to learn and master.
I am fortunate enough to work on projects that use Titan/TinkerPop and thus, as I see these pain points I continually work to solve them. Over time, we will see much of these complexities hidden. Right now, Titan is a young project and some good packaging polish will happen with good time.
https://github.com/tinkerpop/blueprints/wiki/Sail-Ouplementation http://thinkaurelius.com/2012/10/25/a-solution-to-the-supernode-problem/
Next, if you decide to scale horizontally, then you can simply change the storage.backend=cassandra and thats that (of course, you need to do a bulk data transfer from BerkeleyDB to Cassandra).http://thinkaurelius.github.com/titan/
Here are the biggest improvements:
1. Enhanced robustness due to community involvement, stress testing, and benchmarking. - http://thinkaurelius.github.com/titan/doc/titan-stress-poste... - http://thinkaurelius.com/2012/08/06/titan-provides-real-time... 2. Nicer integration with Rexster. - https://github.com/thinkaurelius/titan/wiki/Rexster-Graph-Se... 3. Titan manual has been extended to better support and train developers. - https://github.com/thinkaurelius/titan/wiki 4. Numerous nick-nack features and enhancements. 5. Development <dependency/> distributed through Apache Maven Central Repository - http://search.maven.org/#artifactdetails%7Ccom.thinkaurelius...