技术开发 频道

揭秘AWS图数据库服务——Amazon Neptune

  【IT168 评论】现代生活的数据结构和算法中,图表是必不可少的一环。而企业在不断创建和提取复杂关系的丰富数据时,开发人员仍然被迫在传统数据库中来建模复杂的关系,这不仅会造成复杂查询的成本越来越高,性能却越来越差。

  Hello,Amazon Neptune

  为了能够轻松处理现代社会日益复杂的数据集,关系和模式,AWS推出了Amazon Neptune预览版,这是一个快速而可靠的图形数据库服务,可以让用户从高度连接的数据集之间的关系轻松获取洞察力。

  Amazon Neptune的核心是构建高性能图形数据库引擎,针对存储数十亿个关系进行优化,并以毫秒的延迟查询图形。作为一个完全托管的数据库,Amazon Neptune让用户更加专注于应用程序,而不是困在繁琐的无差别操作中,如维护,修补,备份和恢复。该服务支持快速故障转移,时间点恢复以及高可用性的多可用区域部署。通过支持多达15个只读副本,您可以将查询吞吐量扩展到每秒数千个查询。

  Amazon Neptune 可以运行在亚马逊虚拟私有云中,允许加密数据在休息,用户可以完全控制在传输和休息的数据完整性。

揭秘AWS图数据库服务——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 Neptune

  简单命名实例并选择一个实例类型。接下来配置高级选项。如果之前已经启动了基于实例的AWS数据库服务,那么其中有许多服务是相似的,比如Amazon Relational Database Service(RDS)或Amazon ElastiCache。

揭秘AWS图数据库服务——Amazon Neptune

  Amazon Neptune在VPC中安全运行,并可以创建自己的安全组,以便添加EC2实例便于访问。

揭秘AWS图数据库服务——Amazon Neptune

  接下来,我们可以配置一些其他选项,如参数组,端口和集群名称。

揭秘AWS图数据库服务——Amazon Neptune

  启用基于KMS的静态加密,故障转移优先级和备份保留时间。

揭秘AWS图数据库服务——Amazon Neptune

  类似RDS维护的数据库可以由服务来处理。

  一旦实例完成配置,您可以在集群的“详细信息”页面上找到连接端点。如:triton.cae1ofmxxhy7.us-east-1.rds.amazonaws.com。

揭秘AWS图数据库服务——Amazon Neptune

  使用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可以轻松地存储和查询数据。

0
相关文章