关于Apache Tinkerpop的总结备注
首先
這篇文章是2019年Advent Calendar(尝试接触各种数据存储)中的第11天。
虽然文章没有涉及到直接操作数据存储的内容,请您谅解。
Apache Tinkerpop是什么
Apache TinkerPop 是一个用于图计算的框架。
根据描述,似乎这个被设计为每个图数据库的高级抽象层,旨在使得对各种现有图数据库的操作成为可能。
以下已经支持了多种云数据库和开源数据库,包括Neo4j、JanusGraph、Amazon Neptune和Azure Cosmos DB等(请参阅上述页面获取更多信息)。
框架本身如下图所示,大致上
-
- JavaベースのCore API
-
- グラフトラバーサル言語のGremlin
- クライアントとクエリやデータをやり取りするGremlin Server
由…组成。
图遍历语言·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用のエンジンの違い
- トラバーサル戦略
我希望对此进行补充。