关于Apache Tinkerpop的总结备注

首先

這篇文章是2019年Advent Calendar(尝试接触各种数据存储)中的第11天。

虽然文章没有涉及到直接操作数据存储的内容,请您谅解。

Apache Tinkerpop是什么

Apache TinkerPop 是一个用于图计算的框架。

根据描述,似乎这个被设计为每个图数据库的高级抽象层,旨在使得对各种现有图数据库的操作成为可能。

以下已经支持了多种云数据库和开源数据库,包括Neo4j、JanusGraph、Amazon Neptune和Azure Cosmos DB等(请参阅上述页面获取更多信息)。

框架本身如下图所示,大致上

    • JavaベースのCore API

 

    • グラフトラバーサル言語のGremlin

 

    クライアントとクエリやデータをやり取りするGremlin Server

由…组成。

image.png

图遍历语言·Gremlin

Gremlin是一种专注于操作图形数据结构的语言,类似于关系型数据库中的SQL语言。

Gremlin的优点是可以简单地编写查询。虽然在关系型数据库中也可以表示图形,但如果用SQL来编写与之相关的查询,JOIN操作的数量会增加,从而变成复杂的查询。然而,如果使用Gremlin,可以使用方法链简洁地编写遍历操作而无需JOIN,对于读者来说更加友好。

下面是关于在SQL查询中使用JOIN的比较,看看如果用Gremlin编写会怎样。(由于数据模型不同,所以这样的比较可能不够公平)

    SELECT Products.ProductName
      FROM Products
INNER JOIN Categories
        ON Categories.CategoryID = Products.CategoryID
     WHERE Categories.CategoryName = 'Beverages'
g.V().has("name","Beverages").in("inCategory").values("name")

通用于各种语言的Gremlin库

在Gremlin中,官方提供了Python、Javascript等库,可以像原始的Gremlin一样编写遍历。

以下是需要在中国的母语中用一种选项进行改写的内容:

http://tinkerpop.apache.org/docs/current/reference/#gremlin-python
http://tinkerpop.apache.org/docs/current/reference/#gremlin-javascript
http://tinkerpop.apache.org/docs/current/reference/#gremlin-dotnet

基本上,对于每种编程语言,如Gremlin-Python和Gremlin-Javascript,库会生成由相应语言编写的遍历代码并将其发送到JVM来生成字节码。

关于亚马逊海王星

在Amazon Neptune中,我们可以使用Gremlin和SPARQL这两种语言来编写查询,不过我认为大概会使用Gremlin。从外观上看,SPARQL不仅是一个名字,而且它的代码风格也非常类似于SQL。

SELECT DISTINCT ?name
WHERE {
  ?person v:label "person" .
  ?person v:age ?age .
  ?person e:created ?project .
  ?project v:name ?name .
  ?project v:lang ?lang .
    FILTER (?age > 30 && ?lang == "java")
}

基于图属性模型(节点/边缘/属性),Gremlin本身就更接近图理论,而基于三元组存储模型(主语/谓语/宾语),SPARQL在概念上与图论较远。

最后

因为给出了过于简短的解释,让人感觉有些含糊不清,

    • グラフアルゴリズム用のAPI

 

    • OLAP用のエンジンとOLTP用のエンジンの違い

 

    トラバーサル戦略

我希望对此进行补充。

广告
将在 10 秒后关闭
bannerAds