没有合适的资源?快使用搜索试试~ 我知道了~
2021-08分享_Pasca_知识图谱_图数据库简介1
需积分: 0 0 下载量 143 浏览量
2022-08-03
21:16:43
上传
评论
收藏 410KB PDF 举报
温馨提示
试读
1页
1. 术语对: 2. 插数据: 3. 删除数据:
资源详情
资源评论
资源推荐
知识图谱:图数据库简介
分享⼈:Pasca
知识图谱技术是⼈⼯智能技术的重要组成部分,其建⽴的具有语义处理能⼒与开放互联能⼒的知识库,可在智能搜索、智能问答、个性化推荐等智能信
息服务中产⽣应⽤价值。
百度百科中关于知识图谱的定义:
知识图谱(Knowledge Graph),在图书情报界称为知识域可视化或知识领域映射地图,是显示知识发展进程与结构关系的⼀系列各种不同的图
形,⽤ 可视化技术描述知识资源及其载体,挖掘、分析、 构建、绘制和显示知识及它们之间的相互联系。 知识图谱是通过将应⽤数学、 图形
学、信息可视化技术、 信息科学等学科的理论与⽅法与计量学引⽂分析、共现分析等⽅法结合,并利⽤可视化的图谱形象地展示学科的核⼼结
构、发展历史、 前沿领域以及整体知识架构达到多学科融合⽬的的现代理论。它能为学科研究提供切实的、有价值的参考。
简单说来,知识图谱就是通过不同知识的关联性形成⼀个⽹状的知识结构,⽽这个知识结构,恰好就是⼈⼯智能AI的基⽯。当前AI领域热⻔的计算机图
像、语⾳识别、NLP,其实都是AI的感知能⼒,真正AI的认知能⼒,就要靠知识图谱。
知识图谱的应⽤场景很多,其构建、使⽤过程中所涉及到的技术⼗分⼴泛,包括但不限于:实体识别、关系抽取、实体链接、语义相似等等。
其中,知识图谱的数据存储也是其中极为重要的⼀项,在知识图谱的应⽤中,效果、执⾏效率等很⼤程度上依赖于知识图谱的存储。
知识图谱的存储有主要有两种⽅式——⼀种是基于 RDF 的存储;另⼀种是基于图数据库的存储。RDF⼀个重要的设计原则是数据的易发布以及共享,
图数据库则把重点放在了⾼效的图查询和搜索上。其次,RDF以三元组的⽅式来存储数据⽽且不包含属性信息,但图数据库⼀般以属性图为基本的表示
形式,所以实体和关系可以包含属性,这就意味着更容易表达现实的业务场景。⽬前较为流⾏的存储⽅式为图数据库,下⾯主要介绍⼀下图数据库相关
的基础内容。
图数据库
图数据库是图数据库管理系统的简称,使⽤图形化的模型进⾏查询的数据库,通过节点、边和属性等⽅式来表示和存储数据,⽀持增删改查(CRUD)
等操作。
现在较为知名的图数据库主要是基于属性图,更确切得说是带标签的属性图(Labeled-Property Graph),属性图由顶点(圆圈)、边(箭头)、属
性(key:value)和标签组成,顶点和边可以有标签,⽐如顶点的标签是User,边的标签是FOLLOWS。图中标签为User的顶点有name属性,属性值为
Johan或Peter或Emil。边表示了他们的关注关系。图中标签为FOLLOWS的边是单向边,如果是相互关注了,那么需要2条边表示。
Neo4j
Neo4J最主流的图数据库之⼀,相⽐其他数据库更加成熟,Neo4J使⽤Java开发。Neo4j的每个版本均有社区版和企业版,其中社区版是免费版,但局
限于单机部署,功能受限。企业版包括了Neo4J所有功能,包括主从复制⽤于⾼可⽤和读写分离,可视化管理⼯具等,但增加了商业协议,需付费使
⽤。Neo4J不是分布式数据库,扩展性不是其优势。但它是⼀种原⽣的图数据库,同时也具备了图分析引擎的能⼒。应该说Neo4J是⽬前使⽤最为⼴泛
的图数据库,⼤量介绍图数据库的书籍都是以Neo4J为基础来介绍的。
Neo4J使⽤Cypher作为图数据库查询语⾔,也⽀持Gremlin查询
Nebula
Nebula Graph是⼀款开源的、分布式的、易扩展的原⽣图数据库,能够承载数千亿个点和数万亿条边的超⼤规模数据集,并且提供毫秒级查询。
相⽐于Neo4j,Nebula更年轻,增⻓速度更快
其github地址为:https://github.com/vesoft-inc/nebula?utm_source=tsecurity_article01
其官⽅⽂档地址:https://docs.nebula-graph.com.cn/2.0.1/
Nebula主要使⽤的是nGQL查询语⾔。
图数据库查询语⾔
Cypher
Cypher 是⼀个描述性的图形查询语⾔,允许不必编写图形结构的遍历代码对图形存储有表现⼒和效率的查询,和 SQL 很相似,Cypher 语⾔的关键字
不区分⼤⼩写,但是属性值,标签,关系类型和变量是区分⼤⼩写的。⽀持图数据库: Neo4j、RedisGraph、AgensGraph
Cypher借鉴了sql语句,其基本的语法介绍如下:
"MATCH":匹配图模式,从图中获取数据的常⻅⽅式
"WHERE":不是独⽴的语句,⽽是MATCH,OPTION MATCH 和 WITH 的⼀部分,⽤于给模式添加约束或者过滤传递给WITH的中间结果
"CREATE"和"DELETE":创建和删除节点关系
"SET"和"REMOVE":使⽤SET设置属性值和给节点添加标签,使⽤REMOVE移除他们
"MERGE":匹配已经存在的或者创建新节点和模式,对于有唯⼀性约束的时候⾮常有⽤
"RETURN": 定义返回的结果
Cypher的基础语法涉及节点和关系两部分:
Cypher采⽤⼀对()来表示节点.
():匿名节点,匹配所有的节点,如果想要操作匹配到的节点,需要加变量(matrix)
(matrix):赋有变量的节点,matrix将包含匹配到的所有节点,通过matrix变量可以对它们进⾏操作
(matrix:Movie): 指定了标签的节点,只会匹配标签为Moive的节点
(matrix:Movie {title:"Haha"}):指定了标签和属性的节点,只有节点标签是Movie,标题为Haha的节点会被匹配
-- :表示⽆⽅向关系
-->:有⽅向关系
-[rale]->:给关系赋予⼀个变量,⽅便对其操作
-[rale:friend]->:匹配关系类型为friend类型的关系,并赋予rale变量接收
-[rale:friend {long_time:2}]->:给关系加条件,匹配friend类型的关系且属性long_time为2
同时如果想要关系语法不想重复写,想要多个语句写的时候减少重复写,可以将关系语法赋予⼀个变量
acted_in = (people:Person)-[:acted_in]->(movie:Movie)
这样acted_in 就可以写到多个查询语句中,减少重复编写
以上⾯的图来举例⼦(找出所有Johan所关注的⼈所关注的⼈,该⼈也是Johan关注的⼈):
MATCH (a:Person {name:'Johan'})-[:FOLLOWS]->(b)-[:FOLLOWS]->(c), (a)-[:FOLLOWS]->(c) RETURN b, c
关于更多Cypher语法的扩展内容可以参看博客:https://zhuanlan.zhihu.com/p/88745411
Gremlin
Gremlin是 Apache TinkerPop 框架下的图遍历语⾔。Gremlin是⼀种函数式数据流语⾔,可以使得⽤户使⽤简洁的⽅式表述复杂的属性图(property
graph)的遍历或查询。每个Gremlin遍历由⼀系列步骤(可能存在嵌套)组成,每⼀步都在数据流(data stream)上执⾏⼀个原⼦操作。
详细的Gremlin语法说明,请参看:https://ittang.com/2018/11/15/gremlin_traversal_language/
nGQL
nGQL是为开发和运维⼈员设计的类SQL查询语⾔,是⼀种声明式图查询语⾔,⽀持灵活⾼效的图模式。nGQL 同样是关键词⼤⼩写不敏感的查询语
⾔,⽬前⽀持模式匹配、聚合运算、图计算,可⽆嵌⼊组合语句
三种语⾔的对⽐
https://cloud.tencent.com/developer/news/592567
1. 术语对⽐:
2. 插⼊数据:
# 插⼊点
## nGQL
nebula> INSERT VERTEX character(name, age, type) VALUES hash("saturn"):("saturn", 10000, "titan"),
hash("jupiter"):("jupiter", 5000, "god");
## Gremlin
gremlin> saturn = g.addV("character").property(T.id, 1).property('name', 'saturn').property('age',
10000).property('type', 'titan').next();
==>v[1]
gremlin> jupiter = g.addV("character").property(T.id, 2).property('name', 'jupiter').property('age',
5000).property('type', 'god').next();
==>v[2]
gremlin> prometheus = g.addV("character").property(T.id, 31).property('name', 'prometheus').property('age',
1000).property('type', 'god').next();
==>v[31]
gremlin> jesus = g.addV("character").property(T.id, 32).property('name', 'jesus').property('age',
5000).property('type', 'god').next();
==>v[32]
## Cypher
cypher> CREATE (src:character {name:"saturn", age: 10000, type:"titan"})
cypher> CREATE (dst:character {name:"jupiter", age: 5000, type:"god"})
# 插⼊边
## nGQL
nebula> INSERT EDGE father() VALUES hash("jupiter")->hash("saturn"):();
## Gremlin
gremlin> g.addE("father").from(jupiter).to(saturn).property(T.id, 13);
==>e[13][2-father->1]
## Cypher
cypher> CREATE (src)-[rel:father]->(dst)
在数据插⼊这块,我们可以看到 nGQL 使⽤ INSERT VERTEX 插⼊点,⽽ Gremlin 直接使⽤类函数的 g.addV() 来插⼊点,Cypher 使⽤ CREATE 这
个 SQL 常⻅关键词来创建插⼊的点。
在点对应的属性值⽅⾯,nGQL 通过 VALUES 关键词来赋值,Gremlin 则通过操作 .property() 进⾏对应属性的赋值,Cypher 更直观直接在对应的属
性值后⾯跟上想对应的值。
在边插⼊⽅⾯,可以看到和点的使⽤语法类似,只不过在 Cypher 和 nGQL 中分别使⽤ -[]-> 和 -> 来表示关系,⽽ Gremlin 则⽤ to() 关键词来标识
指向关系,在使⽤这 3 种图查询语⾔的图数据库中的边均为有向边,下图左边为有向边,右边为⽆向边。
3. 删除数据:
# nGQL
nebula> DELETE VERTEX hash("prometheus");
# Gremlin
gremlin> g.V(prometheus).drop();
# Cypher
cypher> MATCH (n:character {name:"prometheus"}) DETACH DELETE n
这⾥,我们可以看到⼤家的删除关键词都是类似的:Delete 和 Drop,不过这⾥需要注意的是上⾯术语篇中提过 nGQL 中删除操作对应单词有 Delete
和 Drop ,在 nGQL 中 Delete ⼀般⽤于点边,Drop ⽤于 Schema 删除,这点和 SQL 的设计思路是⼀样的。
4. 更新数据:
# nGQL
nebula> UPDATE VERTEX hash("jesus") SET character.type = 'titan';
# Gremlin
gremlin> g.V(jesus).property('age', 6000);
==>v[32]
# Cypher
cypher> MATCH (n:character {name:"jesus"}) SET n.type = 'titan';
可以看到 Cypher 和 nGQL 都使⽤ SET 关键词来设置点对应的类型值,只不过 nGQL 中多了 UPDATE 关键词来标识操作,Gremlin 的操作和查看点
操作类似,只不过增加了变更 property 值操作,这⾥我们注意到的是,Cypher 中常⻅的⼀个关键词便是 MATCH,顾名思义,它是⼀个查询关键词,
它会去选择匹配对应条件下的点边,再进⾏下⼀步操作。
5.查询数据:
# nGQL
nebula> FETCH PROP ON character hash("saturn");
===================================================
| character.name | character.age | character.type |
===================================================
| saturn | 10000 | titan |
---------------------------------------------------
# Gremlin
gremlin> g.V(saturn).valueMap();
==>[name:[saturn],type:[titan],age:[10000]]
# Cypher
cypher> MATCH (n:character {name:"saturn"}) RETURN properties(n)
╒════════════════════════════════════════════╕
│"properties(n)" │
╞════════════════════════════════════════════╡
│{"name":"saturn","type":"titan","age":10000}│
└────────────────────────────────────────────┘
在查看数据这块,Gremlin 通过调取 valueMap() 获得对应的属性值,⽽ Cypher 正如上⾯更新数据所说,依旧是 MATCH 关键词来进⾏对应的匹配查
询再通过 RETURN 返回对应的数值,⽽ nGQL 则使⽤FETCH PROP。
参考资料
1. 《知识图谱综述》——徐增林、盛泳潘等
2. https://zhuanlan.zhihu.com/p/50171330
3. https://zhuanlan.zhihu.com/p/88745411
4. https://cloud.tencent.com/developer/news/592567
节点的语法:
关系的语法:
半清斋
- 粉丝: 55
- 资源: 322
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 设计1.ms14
- vscode-1.64.1.tar源码文件
- vscode-1.64.0.tar源码文件
- vscode-1.52.0.tar源码文件
- Music-Player +PlayerActivity+ rockplayer+ SeeJoPlayer 播放器JAVA源码
- vscode-1.46.0.tar源码文件
- 最近很火植物大战僵尸杂交版2.08苹果+安卓+PC+防闪退工具V2+修改工具+高清工具+通关存档整合包更新
- 超级好用的截图工具PixPin,可录制Gif图
- Screenshot_2024-05-21-17-06-42-64_2332cb9b27b851b548ba47a91682926c.jpg
- 毕业设计参考 - 基于树莓派、OpenCV及Python的人脸识别
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0