【IT168 评论】现代生活的数据结构和算法中,图表是必不可少的一环。而企业在不断创建和提取复杂关系的丰富数据时,开发人员仍然被迫在传统数据库中来建模复杂的关系,这不仅会造成复杂查询的成本越来越高,性能却越来越差。
Hello,Amazon Neptune
为了能够轻松处理现代社会日益复杂的数据集,关系和模式,AWS推出了Amazon Neptune预览版,这是一个快速而可靠的图形数据库服务,可以让用户从高度连接的数据集之间的关系轻松获取洞察力。
Amazon Neptune的核心是构建高性能图形数据库引擎,针对存储数十亿个关系进行优化,并以毫秒的延迟查询图形。作为一个完全托管的数据库,Amazon Neptune让用户更加专注于应用程序,而不是困在繁琐的无差别操作中,如维护,修补,备份和恢复。该服务支持快速故障转移,时间点恢复以及高可用性的多可用区域部署。通过支持多达15个只读副本,您可以将查询吞吐量扩展到每秒数千个查询。
Amazon Neptune 可以运行在亚马逊虚拟私有云中,允许加密数据在休息,用户可以完全控制在传输和休息的数据完整性。
这项服务中有很多有趣的功能,但图形数据库可能是你们许多人不熟悉的话题,所以我们要确保使用相同的词汇。
图数据库
图形数据库是顶点(节点)和边缘(关系或连接)的存储,它们都可以具有作为键值对存储的属性。图表数据库对连接的、上下文关系驱动的数据非常有用。比较典型的应用程序示例包括社交媒体网络,推荐引擎,驾驶指导,后勤,诊断,欺诈检测和基因组测序等等。
Amazon Neptune支持两种开放标准来描述和查询你的图表:
用Gremlin查询Apache TinkerPop3样式属性图。Gremlin是一种图遍历语言,其中查询是遍历节点边缘之后离散步骤构成的遍历。现有的工具和设计用于TinkerPop的客户端可以让您快速入门Neptune。
资源描述框架(RDF)用SPARQL查询。SPARQL是一种基于W3C 语义Web标准的声明性语言。它遵循主题- >谓词- >对象模型。特别是Neptune支持以下标准:RDF 1.1,SPARQL查询1.1,SPARQL更新1.1和SPARQL协议1.1。
如果现有的应用程序支持SPARQL或TinkerPop,用户可以通过更新应用程序连接到端点来开始使用Neptune。
下面我们正式开始使用Amazon Neptune
首先导航到海王星控制台,然后单击“启动Neptune”启动启动向导。
简单命名实例并选择一个实例类型。接下来配置高级选项。如果之前已经启动了基于实例的AWS数据库服务,那么其中有许多服务是相似的,比如Amazon Relational Database Service(RDS)或Amazon ElastiCache。
Amazon Neptune在VPC中安全运行,并可以创建自己的安全组,以便添加EC2实例便于访问。
接下来,我们可以配置一些其他选项,如参数组,端口和集群名称。
启用基于KMS的静态加密,故障转移优先级和备份保留时间。
类似RDS维护的数据库可以由服务来处理。
一旦实例完成配置,您可以在集群的“详细信息”页面上找到连接端点。如:triton.cae1ofmxxhy7.us-east-1.rds.amazonaws.com。
使用Amazon Neptune
如上所述,用户可以选择两种不同的查询引擎与Amazon Neptune一起使用。
要连接到gremlin端点,可以使用端点/gremlin来执行如下操作:
curl -X POST -d '{"gremlin":"g.V()"}' https://your-neptune-endpoint:8182/gremlin
使用类似的方式连接到SPARQL端点 /sparql
curl -G https://your-neptune-endpoint:8182/sparql --data-urlencode 'query=select ?s ?p ?o where {?s ?p ?o}'
在查询数据之前,我们需要填充数据库。假设我们正在对AWS re:Invent进行建模,并使用批量加载API来插入一些数据。
对于“属性图”,Neptune支持存储在Amazon Simple Storage Service(S3)中的 CSV 以加载节点,节点属性,边和边属性。
顶点的典型CSV如下所示:
~label,name,email,title,~id
Attendee,George Harrison,george@thebeatles.com,Lead Guitarist,1
Attendee,John Lennon,john@thebeatles.com,Guitarist,2
Attendee,Paul McCartney,paul@thebeatles.com,Lead Vocalist,3
边缘CSV:
~label,~from,~to ,~id
attends,2,ARC307,attends22
attends,3,SRV422,attends27
把一个类似结构的CSV加载到Neptune中:
curl -H 'Content-Type: application/json' \
https://neptune-endpoint:8182/loader -d '
{
"source": "s3://super-secret-reinvent-data/vertex.csv",
"format": "csv",
"region": "us-east-1",
"accessKey": "AKIATHESEARENOTREAL",
"secretKey": "ThEseARE+AlsoNotRea1K3YSl0l1234coVFefE12"
}'
返回:
{
"status" : "200 OK",
"payload" : {
"loadId" : "2cafaa88-5cce-43c9-89cd-c1e68f4d0f53"
}
}
把这个结果和查询加载状态:
curl https://neptune-endpoint:8182/loader/2cafaa88-5cce-43c9-89cd-c1e68f4d0f53
{
"status" : "200 OK",
"payload" : {
"feedCount" : [{"LOAD_COMPLETED" : 1}],
"overallStatus" : {
"fullUri" : "s3://super-secret-reinvent-data/stuff.csv",
"runNumber" : 1,
"retryNumber" : 0,
"status" : "LOAD_COMPLETED",
"totalTimeSpent" : 1,
"totalRecords" : 987,
"totalDuplicates" : 0,
"parsingErrors" : 0,
"datatypeMismatchErrors" : 0,
"insertErrors" : 0
}
}
}
对于特定的数据序列化格式,重复加载过程。
对于RDF,Neptune支持四种序列化:Turtle,N-Triples,N-Quads和RDF / XML,可以通过相同的加载API加载所有。
现在,数据库中已经有了数据,可以运行一些查询。在Gremlin中,我们将查询写为图遍历:
g.V().has("name","Paul McCartney").out("attends").id()
定义一个遍历图,找到所有具有值“Paul McCartney”的属性“name”的节点(只有一个!)。接下来,它跟随来自该节点的所有“出席”类型的边,并获得结果节点的ID。
==>ENT332
==>SRV422
==>DVC201
==>GPSBUS216
==>ENT323
以上就是图数据库能力的简要概述,图数据库为许多客户开辟了一系列新的可能性,Amazon Neptune可以轻松地存储和查询数据。