AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

Amazon Neptune – 完全托管的图形数据库服务

  • 2019-11-05
  • 本文字数:2755 字

    阅读完需:约 9 分钟

Amazon Neptune – 完全托管的图形数据库服务

在我们用来支持现代生活的所有数据结构和算法中,图形不断改变着世界。各企业不断产生和获取关系复杂的丰富数据。然而,开发人员仍然不得不在传统数据库中对这些复杂关系进行建模。这导致查询极为复杂,并且成本高昂,随着关系的增加,性能也会不断下降。我们希望能简化这些越来越复杂的新式数据集、关系和模式的处理。

欢迎 Amazon Neptune

今天,我们要发布 Amazon Neptune 有限预览版,这是一个快速可靠的图形数据库服务,可供客户轻松洞悉高度连接的数据集之间的关系。Amazon Neptune 的核心是专门构建的高性能图形数据库引擎,它进行了优化,可存储数十亿关系并将图形查询延迟减至毫秒级。Amazon Neptune 作为完全托管的数据库提供,让客户能够腾出手来集中精力开发其应用程序,而不用忙于执行枯燥的重复性操作,如维护、修补、备份和恢复。该服务支持快速故障转移、时间点恢复以及多可用区部署,从而实现高可用性。它支持多达 15 个只读副本,您可以将查询吞吐量扩展到每秒数十万个查询。Amazon Neptune 在 Amazon Virtual Private Cloud 内运行,因此您可以加密静态数据,可完全控制传输中数据和静态数据的完整性。



这项服务有很多有趣的功能,不过可能很多人还不熟悉图形数据库,因此我们首先介绍一下概念。

图形数据库

图形数据库用于存储顶点 (节点) 和边缘 (关系或连接),这两种元素都可以键值对的形式存储其属性。对于连接的上下文关系驱动数据,图形数据库很有用。一些典型的应用包括社交媒体网络、推荐引擎、驾车路线、物流、诊断、欺诈检测以及基因测序。


Amazon Neptune 支持两种开放式图形描述和查询标准:


  • 使用 Gremlin 查询的 Apache TinkerPop3 样式属性图。Gremlin 是一种图形遍历语言,在这种语言中,查询是由沿着边缘到节点的离散步骤组成的遍历。通过用于 TinkerPop 的现有工具和客户端,可以快速开始使用 Neptune。

  • 使用 SPARQL 查询的资源描述框架 (RDF)。SPARQL 是一种声明式语言,它基于 W3C 的 Semantic Web 标准。它遵从“主->谓->宾”模型。具体地说,Neptune 支持以下标准:RDF 1.1、SPARQL Query 1.1、SPARQL Update 1.1 和 SPARQL Protocol 1.1。


如果现有应用程序可使用 SPARQL 或 TinkerPop,则只需更新这些应用程序所连接的终端节点,就可以开始使用 Neptune。


我们介绍一下如何启动 Amazon Neptune。

启动 Amazon Neptune

首先导航到 Neptune 控制台,然后单击“Launch Neptune”打开启动向导。



在第一个屏幕上,只需命名实例和选择实例类型。接下来配置高级选项。如果您以前启动过基于实例的 AWS 数据库服务,如 Amazon Relational Database Service (RDS)Amazon ElastiCache,现在的很多步骤您可能会觉得很熟悉。



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



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



在下一个屏幕上,我们可以启用基于 KMS 的静态加密、故障转移优先级和备份保留时间。



与 RDS 类似,数据库维护可由该服务处理。


实例配置完毕后,您可以在群集的“Details”页面上找到连接终端节点。在我这个例子中是 triton.cae1ofmxxhy7.us-east-1.rds.amazonaws.com


使用 Amazon Neptune

如上所述,Amazon Neptune 可以使用两个不同的查询引擎。


要连接到 Gremlin 终端节点,可通过 /gremlin 使用终端节点执行某些操作,如:


Bash


curl -X POST -d '{"gremlin":"g.V()"}' https://your-neptune-endpoint:8182/gremlin
复制代码


同样,可以通过 /sparql 连接到 SPARQL 终端节点


Bash


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,~idAttendee,George Harrison,george@thebeatles.com,Lead Guitarist,1Attendee,John Lennon,john@thebeatles.com,Guitarist,2Attendee,Paul McCartney,paul@thebeatles.com,Lead Vocalist,3
复制代码


边缘 CSV 看起来是这样的:


~label,~from,~to ,~idattends,2,ARC307,attends22attends,3,SRV422,attends27
复制代码


现在将一个结构类似的 CSV 加载到 Neptune 中,运行如下代码:


Bash


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"  }'
复制代码


将返回:


Json


{    "status" : "200 OK",    "payload" : {        "loadId" : "2cafaa88-5cce-43c9-89cd-c1e68f4d0f53"    }}
复制代码


我使用该返回结果,查询加载状态: curl https://neptune-endpoint:8182/loader/2cafaa88-5cce-43c9-89cd-c1e68f4d0f53


Json


{    "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 以图形遍历形式编写查询。我是 Paul McCartney 的忠实粉丝,我需要查找他将举行的所有演唱会:


g.V().has("name","Paul McCartney").out("attends").id()


这样就定义了一个图形遍历,它查找属性“name”的值为“Paul McCartney”的所有节点 (只有一个!)。接下来,它从该节点沿所有类型为“attends”的边缘查找,获取结果节点的 ID。


==>ENT332==>SRV422==>DVC201==>GPSBUS216==>ENT323
复制代码


Paul 看起来很忙。


希望这个例子能让您简要了解图形数据库的功能。图形数据库为很多客户带来了各种全新可能,而 Amazon Neptune 让大规模存储和查询数据变得更简单。我很高兴看到我们的客户构建出精彩的新产品。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/amazon-neptune-a-fully-managed-graph-database-service/


2019-11-05 08:00935

评论

发布
暂无评论
发现更多内容

火山引擎云原生数据仓库ByteHouse技术白皮书V1.0 (Ⅲ)

字节跳动数据平台

数据仓库 云原生 白皮书 数据仓库服务 企业号 4 月 PK 榜

从零学习SDK(7)如何打包SDK

MobTech袤博科技

4 月 22 日丨【云数据库技术沙龙】技术进化,让数据更智能

NineData

MySQL 数据库 程序员 开发者 Clickhouse

GitHub上线重量级分布式架构原理设计笔记,开源的东西看着就是爽

Java你猿哥

架构 分布式 分布式架构

【架构与设计】常见微服务分层架构的区别和落地实践

京东科技开发者

架构 微服务 DDD 分层架构 企业号 4 月 PK 榜

Gradio:快速构建你的webApp

AIWeker

Python 三周年连更 Gradio

挑战 30 天学完 Python:Day9 条件语句

MegaQi

Python 挑战30天学完Python 三周年连更

阅读完synchronized和ReentrantLock的源码后,我竟发现其完全相似

Java 源码 synchronized ReentrantLock

带你一同认识和使用JPA框架进行开发你的应用服务

Java你猿哥

Java SSM框架 jpa Java工程师

Scrum敏捷研发和项目管理

顿顿顿

Scrum 敏捷开发 敏捷开发流程 leangoo 敏捷开发管理工具

全量通过,华为云GaussDB首批完成信通院全密态数据库评测

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

安装Zookeeper和Kafka集群

Java你猿哥

Java kafka zookeeper SSM框架 Java工程师

接口设计文档的12个注意点

Java 后端开发 接口设计

从源码角度深入解析Callable接口

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号 4 月 PK 榜

字节面试官:你没有高并发、性能调优经验,为什么录取你?

Java 高并发 性能调优

华为云新一代iPaaS全域融合集成平台全新升级

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

Kurator v0.3.0版本发布!助力企业实现多云异构管理

华为云开发者联盟

开源 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

Linux:管道命令与文本处理三剑客(grep、sed、awk)

会踢球的程序源

Java Linux

【堡垒机小知识】堡垒机能记录操作时间、操作数据等等吗?

行云管家

网络安全 堡垒机

面试了个985毕业的大佬,回答“性能调优”题时表情令我毕生难忘

Java 性能优化 性能调优

Apifox 更新 | WebSocket 接口调试功能上线!

Apifox

程序员 开发工具 Apifox API 接口工具

如何用scrum敏捷工具做迭代规划及迭代执行。

顿顿顿

Scrum Sprint 敏捷开发管理工具 敏捷工具 迭代规划

阅读完synchronized和ReentrantLock的源码后,竟发现其完全相似

Java你猿哥

并发编程 并发 synchronized SSM框架 ReentrantLock

女朋友要我讲解@Controller注解的原理,真是难为我了

Java你猿哥

Java spring Spring 配置解析

清单推荐:常见的研发效能度量指标(科学管理版)

LigaAI

研发管理 技术管理 效能度量 研发效能度量 企业号 4 月 PK 榜

Kubernetes集群调度增强之超容量扩容

京东科技开发者

Kubernetes k8s 集群 企业号 4 月 PK 榜 超容量扩容

热榜!Alibaba最新发布「10亿级并发系统设计文档」Git狂揽9000星

Java你猿哥

数据库 架构 分布式 架构设计 并发系统

Java中线程的6种状态详解(NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED)

共饮一杯无

Java 线程 线程状态 三周年连更

“淄”味当道,工赋十足

Openlab_cosmoplat

开源社区 双碳

火山引擎DataTester:让企业“无代码”也能用起来的A/B实验平台

字节跳动数据平台

AB testing实战 无代码 A/B 测试 企业号 4 月 PK 榜 企业增长

火山引擎 DataLeap下Notebook系列文章一:技术选型之路

字节跳动数据平台

notebook 数据研发 企业号 4 月 PK 榜

Amazon Neptune – 完全托管的图形数据库服务_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章