图数据库查询语言Cypher、Gremlin和SPARQL_BrotherDongDong的博客-CSDN博客_gremlin、cypher


本站和网页 https://blog.csdn.net/wzwdcld/article/details/80783782 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

图数据库查询语言Cypher、Gremlin和SPARQL_BrotherDongDong的博客-CSDN博客_gremlin、cypher
图数据库查询语言Cypher、Gremlin和SPARQL
BrotherDongDong
于 2018-06-23 15:12:21 发布
13589
收藏
20
分类专栏:
数据库
文章标签:
图数据库
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wzwdcld/article/details/80783782
版权
数据库
专栏收录该内容
7 篇文章
0 订阅
订阅专栏
写在前面:第一部分仍然是心得和胡扯相关的内容,可以直接跳过。
维基上面是这么介绍图数据库的:
A graph database is a database that uses graph structures for semantic queries with nodes, edges and properties to represent and store data.
这里有个关键词”semantic queries”,与之相对应的可能是形式语言(Formal Language)中只关心句法。最让人心碎的是:
As of 2016, no single graph query language has been universally adopted in the same way as SQL was for relational databases, and there are a wide variety of systems, most often tightly tied to one product. Some standardization efforts have occurred, leading to multi-vendor query languages like Gremlin, SPARQL, and Cypher. In addition to having query language interfaces, some graph databases are accessed through APIs.
我在这上面吃了大亏。问题的根本在于图数据库本身市场就不大而且还没有统一的查询标准,极度分裂。各自优化的目标可能不一样,一般的实现大多是聚集于自家的API,对于相对通用的Gremlin和SPARQL的支持可能只是有而已,功能支持少缺胳膊少腿,各种让人难受。
我既然能有机会在这里扯淡至少我个人是相信这一点肯定会有所改进的——文本信息抽取工具逐渐成熟和以维基百科为基础的知识库(Freebase/DBPedia等)的相继出现,会对存储及查询提出更多的要求,也会有更多的人投入到改善查询和存储效率上的。
1. SQL/Gremlin/Sparql简单对比
很多人会问一个问题是图查询能不能用SQL做,首先可以肯定这个是能做的,如果效率也非常高的话也就没有必要再多做探讨。用SQL查询是需要对表设计有一些要求的,同样的Gremlin和SPARQL两种查询标准都是对存储模式是有一定假设(或者要求)的。这篇文章只讨论查询模式上的差异,并且对每一种的查询给出相应的例子,学习学习基本的语法、做做对比即可。效率问题以及问题产生的根本需要还是再开一篇来讲好了,这篇文章还是将内容限定在对于同样的问题,数据应该如何存储与查询上。
SQL:数据以表形式存在,有比较强的schema定义,表间的数据关联以联接(join)的方式实现。这是一种事实标准,大部分人都想把其它问题也转换回SQL或类SQL的方式上来。SPARQL:面向RDF(Resource Description Framework)的三元组数据,W3C标准,无schema,在研究中应用非常广泛。SPARQL的查询与RDF是一致的,RDF是图,SPARQL查询是子图匹配。Gremlin:数据以属性图的形式存在,可以认为是上面两种的混合体,属性仍然在表中,但是联接关系是直接以链接(比如指针)的形式存在的。查询的本质是图遍历,擅长解决求图的直径、点到点之间的路径,比如刘德华连接奥巴马需要几度关系。
2. 分解示例
问题:非洲国家的首都有哪些?
2.1 SQL
首先设计两张表,洲和国家两张表。
TABLE: continentTABLE: countryididcountry_idcapitalnamename  
查询语句:
SELECT country.capital FROM continent JOIN country ON continent.country_id = country.id WHERE continent.name = 'Afica'
2.2 SPARQL
RDF本身没有schema,但是有一些推荐的RDF字典,掌握字典本身也比较麻烦。还好有schema.org这一类的标准化工作让事情变得稍微简单一点点,一般的通用字段已经给出了定义域和值域。
PREFIX ex: <http://example.com/exampleOntology#>SELECT ?capital ?countryWHERE { ?x ex:cityname ?capital ; ex:isCapitalOf ?y . ?y ex:countryname ?country ; ex:isInContinent ex:Africa . }
PREFIX相当于引入了一个字典,并且给出了字典前缀,接下来用的时候就可以把<http://example.com/exampleOntology#cityname>简写成ex:cityname了;?x问号开头的都是变量,出现在select部分的变量会用于输出;where条件中的每一行都是一个三元组(SPO, Subject/Predicate/Object),以.结束。例子中出现了复用Subject的写法。
SPARQL中最常用的当然是这类SELECT语句,还有一个比较实用的是DESCRIBE。比如:
PREFIX ex: <http://example.com/exampleOntology#>DESCRIBE ?xWHERE { ?x ex:isInContinent ex:Africa . }
就是获取非洲国家的所有直接关联信息(所有出边,不包括入边)。
2.3 Gremlin
Gremlin是由Groovy实现的图查询语言,查询过程就是图遍历的过程。
g. // 图的起点,总是这样 V().has('continent', 'name', 'Afica') // continent类的结点,并且name是Africa .out('capital') // 不再需要id外键,直接加入了一条capital边 .values('name') // 取country类结点的name字段
3. 哪一种方案更好?
这个问题没法回避,太多人只想要一个简单答案,但是事实却没有那么美好。
问题1:这些不能用SQL实现吗?
答:这里涉及到一个问题,属性值并不总是单一值(List),而SQL表是有这个假设的(比如MySQL,PostgreSQL是有Array类型的)。针对每一个多值属性都需要进行额外拆表,这对表的管理带来了巨大挑战。查询时频繁地进行多表联接对数据库性能也是个挑战。另外,也可以直接在关系型数据库中存储三元组,但是查询效率并不高。
问题2:RDF数据如何管理?
RDF本身是schema-free的,这的确给管理带来很大困难。schema.org以及国内的cnschema可以作为一个起点,尽量使用这些已经有良好定义的词典。我更倾向于在做数据的时候一类一类的数据对应分别的表,仅仅在最后面向使用时转换成RDF格式。
问题3:SPARQL与Gremlin怎么取舍?
Gremlin查询的图本质仍然是一张一张的表,处理数据、管理数据相对简单一些。我曾经选用过这种方式,但是有一个比较大的问题是各家对Gremlin的实现不一,自动生成代码比较困难,实现的效率也不一样,让人比较头疼。SPARQL是W3C标准,查询语句比较简单,自动生成语义查询也相对容易。另外RDF数据本身在数据交换上比较有优势,比如DBPedia、Freebase之类的数据都有RDF版。
问题4:Neo4j的Cypher怎么样?
也许很好,考虑到只能在Neo4j上使用,并且社区版的Neo4j只能跑在单机上,以及有无数号称速度超过Neo4j的图数据库已经出现了,个人不太想学。用Gremlin和SPARQL可以很容易地从某个数据库转到另外一个,但是Cypher就不要想了。另外,Neo4j的数据组织是属性图的。
问题5:MongoDB和ElasticSearch呢?
你要是觉得写查询不累、构造查询不麻烦,其实都行的。抽象到像SPARQL/Gremlin这种级别的查询上还是需要一些工作的,本身未必很难,但是得做。
当然了,我个人其实是有明确倾向的,图查询还是用SPARQL吧。下一篇在讲讲常见的图数据和ODBA吧,AZA-AZA。
BrotherDongDong
关注
关注
点赞
20
收藏
打赏
评论
图数据库查询语言Cypher、Gremlin和SPARQL
写在前面:第一部分仍然是心得和胡扯相关的内容,可以直接跳过。维基上面是这么介绍图数据库的:A graph database is a database that uses graph structures for semantic queries with nodes, edges and properties to represent and store data.这里有个关键词”semanti...
复制链接
扫一扫
专栏目录
图数据库:Neo4j的基本概念和应用场景
XiaoCai
10-25
3316
Neo4j的基本概念和应用场景
1. 基本概念
每个标签下可以有N个节点,每个节点代表一个对象,相当于数据表里面的一行数据
节点质检的连线代表对象质检的关系,节点和关系都可以带若干属性
1.1 标签-Label:相当于数据表
1.2 节点-Node:相当于数据表李的一行数据
1.3 关系-Relation
2. 图数据库基础 Cypher
2.1 什么是Cypher
2.1.1 背景介绍
属性图模型以及其上的Cypher查询语言最早定义于著名的图数据库系统——Neo4j。
Neo4j是由Neo4j公司开
neo4j︱Cypher 查询语言简单案例(二)
素质云笔记
04-08
1万+
图数据库常规的有:neo4j(支持超多语言)、JanusGraph/Titan(分布式)、Orientdb,google也开源了图数据库Cayley(Go语言构成)、PostgreSQL存储RDF格式数据。
—- 目前的几篇相关:—–
neo4j︱图数据库基本概念、操作罗列与整理(一)
neo4j︱Cypher 查询语言简单案例(二)
neo4j︱Cypher完整案例csv导入、关系联通、...
评论 8
您还未登录,请先
登录
后发表或查看评论
SPARQL查询语言概念及语法
最新发布
buzhidao2333shuosha的博客
10-26
207
SPARQL 从概念到使用
图数据库查询语言Cypher
创邻科技
08-10
2594
1. Cypher 简介
Cypher 是 Neo4j 提出的图查询语言,是一种声明式的图数据库查询语言,它拥有精简的语法和强大的表现力,能够精准且高效地对图数据进行查询和更新。它是一种受 SQL 启发的语言,用于使用 ASCII-Art 语法描述图中的可视模式。它允许声明想要从图数据库中选择、插入、更新或删除什么,而不需要精确地描述如何做到这一点。通过 Cypher,用户可以构建表达性强且高效的查询,处理所需的创建、读取、更新和删除功能。
1.1 Cypher 设计理念
Cypher 的设计理念是:无论是
【Neo4j】第 2 章:Cypher 查询语言
sikh_0529的博客
10-11
680
Cypher 是用于与 Neo4j 交互的语言。最初由 Neo4j 为 Neo4j 创建,它已作为 openCypher 开源,现在被其他图形数据库引擎使用,例如RedisGraph. 它也是() 协会的一部分,其目标是构建一种通用的图形数据库查询语言——就像 SQL 用于关系数据库一样。无论如何,了解如何查询图形数据库是一个很好的起点,因为它的视觉方面:节点和关系可以通过查看查询来快速识别。
图数据库初探——1. 选择一个合适的图数据库
Castlehe的博客
11-29
3485
1. 图数据库概览
Tips:
不了解一个领域的时候,先去找找这个领域的白皮书。
想做一个知识图谱,需要调研一下图数据库,就直接去找这方面的白皮书。相对权威但是不是非常实时的内容
或者直接搜索 知识图谱 图数据库 对比。不那么权威但是相对实时的内容,另外有人使用说明这个东西比较实在。
结合一下,得到的结果应该就比较靠谱了
白皮书:
知识图谱标准化白皮书(2019)
搜索博客文章:
✅图数据库排名、对比
知识图谱简介及常用图数据库Neo4j vs OrientDB
【持续更新】知识图谱相关工具平台整理
图数据语句(Gremlin和Cypher)解决两个点到同一点的问题
alim2012的博客
07-15
181
两个点到同一点的问题用Cypher可以写成。如下图所示的关系,其中name是唯一的。
Gremlin vs Cypher vs nGQL
glowd的专栏
09-14
257
图数据库是使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。
虽然和关系型数据库存储的结构不同(关系型数据库为表结构,图数据库为图结构),但不计各自的性能问题,关系型数据库可以通过递归查询或者组合其他 SQL 语句(Join)完成图查询语言查询节点关系操作。得益于 1987 年 SQL 成为国际标准化组织(ISO)标准,关系型数据库行业得到了很好的发展。同 60、70 年代的关系型数据库类似,图数据库这个领域的查询语言目前也没有统一标准,虽然 19 年 9 月经过国际 SQL 标准委员会
一文了解各大数据库查询语言(Gremlin vs Cypher vs nGQL操作篇
架构大数据双料架构师的博客
08-05
911
文章的开头我们先来看下什么是图数据库,根据维基百科的定义:图数据库是使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。
虽然和关系型数据库存储的结构不同(关系型数据库为表结构,图数据库为图结构),但不计各自的性能问题,关系型数据库可以通过递归查询或者组合其他 SQL 语句(Join)完成图查询语言查询节点关系操作。得益于 1987 年 SQL 成为国际标准化组织(ISO)标准,关系型数据库行业得到了很好的发展。同 60、70 年代的关系型数据库类似,图数据库这个领域的查询语言目前也没有
Sparql与sql的比较
Oeljeklaus的博客
03-23
5417
比较RDF和SQL数据
许多人问什么可以用SPARQL来完成这个不能用SQL完成的事情,实际上他们关心RDF中可以做什么,不能用关系数据库完成。这两种语言都使用户能够创建,组合和使用结构化数据。SQL通过访问关系数据库中的表来执行此操作,并且SPARQL通过访问关联数据的Web来完成此操作。(当然,SPARQL也可以用于访问关系数据,但它被设计为合并不同的数据源。)
关系数据由收集到表
Neo4j3.5学习笔记——Cypher查询语句
WELCOME TO AMY'S CSDN
09-05
257
跟着官网代码学习.jpg–jdk 1.8.0 & neo4j 3.5
https://neo4j.com/docs/java-reference/current/java-embedded/
1. 先建立一个database并存入点data
GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase( databaseDirectory );
try ( Transaction tx = db.
Cypher查询语言--Neo4j中的SQL(1)
yangzhiyong77
02-20
202
“Cypher”是一个描述性的图形查询语言,允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询。Cypher还在继续发展和成熟,这也就意味着有可能会出现语法的变化。同时也意味着作为组件没有经历严格的性能测试。
Cypher设计的目的是一个人类查询语言,适合于开发者和在数据库上做点对点模式(ad-hoc)查询的专业操作人员(我认为这个很重要)。它的构念是基于英语单词和灵巧的图解。
...
图查询语言——Gremlin
chenxy02的博客
07-06
1982
参考:https://blog.csdn.net/CSDN___LYY/article/details/84771820
背景:
目前图数据库领域最主流的两种查询语言为Cypher 和 Gremlin。Cypher是数据库Neo4j中实现的属性图数据查询语言。与SPARQL一样,Cypher也是一种声明式语言,即用户只需要声明“查什么”,而无须关心“怎么查”。
Gremlin是ApacheTinkerPop图计算框架提供的属性图查询语言。Apache TinkerPop被设计为访问图数据库...
Gremlin 查询语言
chenitu的博客
12-02
594
Gremlin是 JanusGraph 的查询语言,用于从图中检索数据和修改数据。Gremlin 是一种面向路径的语言,它简洁地表达了复杂的图遍历和变异操作。Gremlin 是一种函数式语言,其中遍历运算符链接在一起以形成类似路径的表达式。例如,“从 Hercules,遍历到他的父亲,然后是他父亲的父亲,然后返回祖父的名字。”
Gremlin 是Apache TinkerPop 的一个组件。它是独立于 JanusGraph 开发的,被大多数图数据库支持。通过使用 Gremlin 查询语言在 Jan...
janusgraph:cypher-for-gremlin
龙共三金的专栏
07-14
245
janusgraph:cypher-for-gremlin
cypher-for-gremlin
使用cypher语法写数据到janusgraph时遇到一些问题,我们采用先写点再写边的方式,gremlin-server配置为force-index,写点语句为
unwind %s as row merge
(s:node{obj_id:row.obj_id,ontology_id:row.ontology_id,ontology_type:row.ontology_type,obj_type:row.obj
一文了解各大图数据库查询语言(Gremlin vs Cypher vs nGQL)| 操作入门篇
weixin_44324814的博客
03-05
3824
文章的开头我们先来看下什么是图数据库,根据维基百科的定义:图数据库是使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。
虽然和关系型数据库存储的结构不同(关系型数据库为表结构,图数据库为图结构),但不计各自的性能问题,关系型数据库可以通过递归查询或者组合其他 SQL 语句(Join)完成图查询语言查询节点关系操作。得益于 1987 年 SQL 成为国际标准化组织(ISO)标准,...
Cypher查询语言--Neo4j中的SQL
恶魔猎手@生命之树
11-29
1573
Cypher查询语言--Neo4j中的SQL
转自:http://www.uml.org.cn/sjjm/201203063.asp
“Cypher”是一个描述性的图形查询语言,允许不必编写图形结构的遍历代码对图形存储有表现力和效率的查询。Cypher还在继续发展和成熟,这也就意味着有可能会出现语法的变化。
Gremlin 常用语法总结
qq_38974956的博客
03-01
5549
目录
Gremlin 查询示例
Gremlin 语法特性
Gremlin是 Apache TinkerPop 框架下的图遍历语言。Gremlin是一种函数式数据流语言,可以使得用户使用简洁的方式表述复杂的属性图(property graph)的遍历或查询。每个Gremlin遍历由一系列步骤(可能存在嵌套)组成,每一步都在数据流(data stream)上执行一个原子操作。
Gremlin 语言包括三个基本的操作:
map-step:对数据流中的对象进行转换;
filter-step:对数据流中的
图数据库-Neo4j介绍与Cypher入门
热门推荐
活的洒脱怪我咯的专栏
08-14
2万+
1、简介
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上形成图谱而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性,如:事务,索引等。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
在一个图中包含两种基本的数据类型:Nodes(节点
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:编程工作室
设计师:CSDN官方博客
返回首页
BrotherDongDong
CSDN认证博客专家
CSDN认证企业博客
码龄12年
暂无认证
86
原创
10万+
周排名
58万+
总排名
27万+
访问
等级
3585
积分
63
粉丝
91
获赞
44
评论
222
收藏
私信
关注
热门文章
离散数学-二元关系、闭包的概念
38118
算法学习-分治法-大整数乘法
22863
Neo4j服务关闭启动·常用配置·快速设定新密码
16301
图数据库查询语言Cypher、Gremlin和SPARQL
13588
Neo4j·数据导入需要注意的坑·方案对比
12669
分类专栏
Neo4j
图数据库图计算
数据结构和算法
4篇
正则表达式
1篇
设计模式
面试
招聘
Online Judge
1篇
网络
4篇
国科大24小时选课工具
数据库
7篇
数据处理
6篇
笔试面试
2篇
感想
3篇
计算机基础与理论
10篇
留念
1篇
程序人生
4篇
Java
4篇
知识图谱
5篇
图数据库
19篇
最新评论
对DBpedia各子数据集特点分析
moss flora:
可以用curl或者wget
算法学习-分治法-大整数乘法
Linux丶JJ:
不懂别这么暴躁好吗,算法领域都把log2n记为logn
算法学习-分治法-大整数乘法
a8853881029:
!!!!2的n次方和10的n次方分不清楚,写出来误人子弟!!!要不就不要写!!!!!!!!
JanusGraph·Index中文笔记
mike198300:
不错,值得学习下
Neo4j·数据导入需要注意的坑·方案对比
weixin_39249736:
请问数据中的英文需要如何处理,一直报错说找不到结束引号
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
JanusGraph Remote Server简单配置连接 入门
微软项目总结
关于百科知识图谱zhishime数据集的调研(解压后5G,支持循环多跳)
2018年65篇
2016年3篇
2015年17篇
2013年2篇
目录
目录
分类专栏
Neo4j
图数据库图计算
数据结构和算法
4篇
正则表达式
1篇
设计模式
面试
招聘
Online Judge
1篇
网络
4篇
国科大24小时选课工具
数据库
7篇
数据处理
6篇
笔试面试
2篇
感想
3篇
计算机基础与理论
10篇
留念
1篇
程序人生
4篇
Java
4篇
知识图谱
5篇
图数据库
19篇
目录
评论 8
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
BrotherDongDong
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值