HN user

okram

368 karma

http://markorodriguez.com

Posts25
Comments64
View on HN
www.slideshare.net 6y ago

Mm-ADT: A Virtual Machine/an Economic Machine

okram
2pts0
www.slideshare.net 6y ago

Mm-ADT: A Multi-Model Abstract Datatype

okram
2pts0
rredux.com 7y ago

An Open Source Funding Solicitation (Apache TinkerPop4)

okram
3pts0
zenodo.org 7y ago

The Future of Apache TinkerPop

okram
4pts0
titandb.io 10y ago

Titan 1.0 Released (Distributed Graph Database)

okram
5pts0
github.com 10y ago

SPARQL to Gremlin Compiler

okram
2pts0
www.datastax.com 10y ago

On the Relationship Between Java and Gremlin

okram
2pts0
en.wikipedia.org 10y ago

Gremlin Graph Traversal Language (Wikipedia)

okram
3pts0
arxiv.org 10y ago

[Article] the Gremlin Graph Traversal Machine and Language

okram
1pts0
www.datastax.com 10y ago

Tales from the TinkerPop (Flatland Meets Hitchhikers Guide to the Galaxy)

okram
5pts0
www.slideshare.net 10y ago

The Gremlin Graph Traversal Language

okram
23pts14
s3.thinkaurelius.com 11y ago

Titan Distributed Graph Database 0.5.0

okram
54pts18
thinkaurelius.com 12y ago

Titan 0.4.1+ demonstrates good in-memory graph performance

okram
2pts0
thinkaurelius.com 12y ago

Native Graph Databases Do Not Exist

okram
4pts0
thinkaurelius.com 13y ago

Scalable Graph Computing ("The Contorted Graph")

okram
1pts0
thinkaurelius.com 13y ago

On Efficient Graph Traversing -- Loopy Lattices Redux

okram
1pts0
www.slideshare.net 13y ago

Faunus: Graph Analytics with Hadoop's MapReduce and TinkerPop's Gremlin

okram
2pts0
thinkaurelius.com 13y ago

Simulation of the world's universities in a single unified graph

okram
28pts7
thinkaurelius.com 13y ago

Titan: From a Single Server to a Highly Available Cluster

okram
3pts1
github.com 13y ago

Titan 0.3.0 Released: Geo, full-text, edge indexing on billion edge graphs

okram
76pts29
thinkaurelius.com 13y ago

Faunus Provides Big Graph Data Analytics

okram
2pts0
thinkaurelius.com 13y ago

Deploying the Aurelius Graph Cluster on Amazon EC2

okram
8pts1
thinkaurelius.github.com 13y ago

Faunus: Graph Computing with Hadoop

okram
14pts2
thinkaurelius.com 13y ago

Titan 0.1.0 Released -- Big Graph Data

okram
5pts2
thinkaurelius.com 13y ago

The Distributed Graph Database Titan Provides Real-Time Big Graph Data

okram
73pts19

The third wave of open source software is no software at all. It is only a matter of time before Amazon doesn't care whether it's licensed Apache2 or not. They will just take software and sell it. You have a problem with that? Have fun suing them... Year 1..2..3..oooo. you are quite the fish..4..5. broke. Out of money.

Tech is dead.

It just wasn't "the scene" at the time. RDF/SPARQL had its world -- permeated throughout academia and some enterprise deployments with quad/triple-stores like AllegroGraph. But it wasn't going to make a PoW in the software industry because they didn't ride the razor-edge well enough.

OWL was a foolish mistake. Triple is a clean and simple idea, but in practice -- reification and URI character hell becoming mind numbing. The RDF-guys did nail it with SPARQL. That is such a pretty query language. Simple, intuitive. I haven't studied the recent path expression advances. I should.

But yea, lots of ways of fugglin' with the data.

There is something really special about the graph database space. For as long as the space has been around (15 or so years), every vendor and dedicated practitioner has taken solid jabs at trying to realize "the best way" to think about graph traversals.

This behavior seems particular to the graph space (vs. document, wide-column, relational, key/value, etc.). While this speaks to the complexity of the type of problems you can solve with graphs, thinking back, I believe this was a cultural anomaly. When it was Neo4j, OrientDB, TinkerPop: the language trifurcation occurred.

I'm excited that Neo4j is continuing to take the query language seriously. In an age when software development is about making it easy for the 90% of developers out there with REST APIs, GraphQL, and overly SQL'd embeddings, ... graph is still searching for "that best way."

I, personally, have moved on from language-level. However, our new work is going to help my fellow data system colleagues get there languages exposed to as many developers as possible regardless of data model. It is important to me that people can come to respect the numerous ways in which we think about data and has the language we use is so important. The difference between living in Plato's Cave or not.

In an effort to support query languages in general, I'll be working on mm-ADT designing a new cluster-oriented virtual machine architecture for storage, processing, and query language developers. I see a veritable Tower of Babel on the horizon!

Congrats Neo4j on reaping the benefits of your hard work. I hope our work will converge in for a positive collaboration in 2020.

I read the article you recommended. It is interesting in that the authors include feedback to simulate loops and have explicit split and merge operators, where their + operator is used to create tuples in the stream. The text is dense so I haven't fully grocked their purpose, but it is nice to see the same concepts presented in a different formalism. If you have other links, please send them along.

I wrote the article on a boat with only an abstract algebra book, a LISP book, and a few articles that I had printed before I left. Thus, my references are my references. To then go back and back fill with references would not be an accurate representation of what I was truly referencing at the time.

But yes, there is a lot of related work out there. Hopefully, my approach and introduced novelties can inspire in a way others have not.

There are many Turing Complete languages. There are many stream-based languages. Moreover, there are many Turing Complete stream-based languages. These are instances of the presented stream ring algebra. I wanted to understand the foundation of such languages so as to have the algebraic toolkit to generate more instances.

A colleague of mine who gets confused by "all the symbols" said that they appreciated the verbose stream notation that I build throughout the article. I would recommend giving the article a earnest try up through to page 5. Then after that, jump to page 17 and read Section 5C on Set Operations. See if the standard concepts of union, intersection, difference, etc. mixed with the verbose stream notation gives you insight and ultimately, the confidence to keep trying to tackle the work.

I wrote the paper for technically savvy individuals who are not versed in abstract algebra. While writing the first 5 pages, I constantly asked myself: "Will my mom be able to follow what I'm saying?" Fortunately, after reading it, she said: "I get the general idea."

At page 5, the stream ring is defined as a product of the coefficient ring and the function ring and from there, the notation gets heavy and there was little I could do. Hopefully by building confidence in the reader up to page 5, they would have the patience to forge ahead because the true nuggets of value are in the latter parts of the article.

Finally, to the "Captain" comment -- this article was written while in the Sea of Cortez aboard the S/V Red Herring: http://svredherring.com and https://twitter.com/SV_RedHerring.

Your last sentence is perfect. Each chosen internal representation has time/space-tradeoffs its making. Users needs to pick a graph database based on the tradeoffs they can live with for their application.

Huh. That is a good point. In Gremlin you can chain steps together (e.g. out("knows").out("mother").out("worksFor")) and you can match patterns. So, to be clearer, I should have represented the chain as a one-liner or as a two liner with an indent.

  out("knows").aggregate("friends").out("knows").where(not(within("friends")))
OR
  out("knows").aggregate("friends").
    out("knows").where(not(within("friends")))
Note the "." concatenation that ties the two lines together into a chain. When nesting parallel traversals (e.g. match()), the traversal patterns are delineated by ",".
  . = AND
  , = OR
Ha. Thats a generally neat way to think of "." and "," in computing. mult and + ...the algebra.

This is an exact replica in Gremlin3:

  g.V().has("name","Charlie Sheen").
    as("person").out("actedIn").as("movie").
      select("movie")
However, this can be expressed in a much simpler form as you don't need all the variables. Simply do:
  g.V().has("name","Charlie Sheen").out("actedIn")

Ah, thats better as you don't need all the unbound variables. However, you still don't need "graphs" unless for the English reading of the promotion.

In Gremlin3, the above is:

  g.V().match(
    as("openCypher").out("makesAvailable").hasLabel("QueryLanguage").as("cypher").out("queries").as("graphs"),
    as("user").out("uses").as("cypher"),
      where("user", within(["Oracle","Apache Spark", "Tableau", "Structr"])),
        select("cypher").by("attributes")

In Apache TinkerPop's Gremlin3.

  g.V().match(
    as("cypher").hasLabel("QueryLanguage").out("queries").as("graphs"),
    as("user").out("uses").as("cypher"),
      where("user", within(["Oracle","Apache Spark", "Tableau", "Structr"])),
    as("openCypher").out('makesAvailable").as("cypher")).
      select("cypher").by("attributes")
The original query is sort of an odd query as you don't don't need all the unbound variables...

And if you want to use SPARQL over TinkerPop, just use a SPARQL->Gremlin Virtual Machine compiler. https://github.com/dkuppitz/sparql-gremlin