目录
- 图数据库
- 为什么使用图数据库
- Amazon Neptune
- 实践
- 登陆
- 创建 S3 存储桶
- notebook
- 图神经网络快速构建
- 加载数据
- 配置端点
- Gremlin 查询
- 删除环境
- 删除 S3 存储桶
- 总结
图数据库
图数据库是一种专门用于存储和处理图形数据结构的数据库管理系统。图形数据结构由节点(Node)和边(Edge)组成,节点代表实体,边代表实体之间的关系。
图形数据库经过优化,可以存储和查询数据项之间的关系。它们将数据项本身存储为图的顶点,将它们之间的关系存储为边。每条边都有一种类型,并且从一个顶点(起点)指向另一个顶点(终点)。关系可以称为谓词,也可以称为边,顶点有时也称为节点。在所谓的属性图中,顶点和边都可以具有 与之关联的其他属性。比如下图是一个表示社交网络中的朋友和爱好的图表:
为什么使用图数据库
在当今互联网飞速发展的背景下,传统的关系型数据库在处理复杂关系操作时显得力不从心。然而,图数据库通过存储数据和其相互关系,大大提升了对数据节点和关系操作的效率。图数据库能够在线性时间复杂度内访问数据节点和关系,甚至可以在一秒钟内遍历数百万级的关系边,表现出显著的性能优势。所以图数据库的优势越发明显,在开发过程中扮演着重要角色。
Amazon Neptune
亚马逊云科技产品Amazon Neptune
数据库是一个无服务器图形数据库,旨在实现卓越的可扩展性和可用性。Neptune
数据库提供内置安全性、持续备份以及与其他 AWS 服务的集成。Neptune
全球数据库为全球分布式应用程序提供跨区域数据复制,以实现低延迟读写、灾难恢复和可扩展性。其中Neptune
具有优势极其显著,具体如下:
-
Neptune
支持图形用例,例如推荐引擎、欺诈检测、知识图谱、药物发现和网络安全。 -
Neptune
数据库具有高可用性,具有只读副本、时间点恢复、持续备份到 Amazon S3 以及跨可用区复制等功能。 -
Neptune
提供数据安全功能,支持静态和动态加密。 -
Neptune
是完全托管的,因此您不再需要担心数据库管理任务,例如硬件配置、软件修补、设置、配置或备份。
实践
接下来我们来体验一波!
登陆
首先需要打开亚马逊云科技官网,注册登录。
创建 S3 存储桶
控制台搜索cloudshell
然后切换一下节点,随便选择一个
接下来就可以创建 S3 存储桶了
cheetah-qing
为自己的桶名,需要自定义。创建完成之后需要创建堆栈
aws cloudformation create-stack --stack-name get-started-neptune-ml --template-url https://s3.amazonaws.com/ee-assets-prod-us-east-1/modules/4f0f18a83e6148e895b10d87d4d89068/v1/gcr-buildon-selfpace/gcr-buildon-neptune-ml-nested-stack.json --capabilities CAPABILITY_IAM --region us-east-1 --disable-rollback
然后就需要等待服务启动。
notebook
在搜索栏输入neptune
,点击进入,导航栏选择“笔记本”
紧接着点击右侧的“查看笔记本文档”。
注意:倘若没有 notebook
,需确定地区是否选择正确,其次确认后台服务是否都启动完成。
图神经网络快速构建
我们在上方已经打开笔记,接着在控制台输入命令来检查集群是否已正确配置可以运行 Neptune ML
。
加载数据
这里使用 Bulk Loader
来加载数据,通过编写脚本可以实现自动执行从MovieLens
网站下载数据,调整数据格式,并将数据载入Neptune
的全过程。
s3_bucket_uri="s3://cheetah-qing"
# remove trailing slashes
s3_bucket_uri = s3_bucket_uri[:-1] if s3_bucket_uri.endswith('/') else s3_bucket_uri
执行response = neptune_ml.prepare_movielens_data(s3_bucket_uri)
命令即可下载 MovieLens
数据,并将其调整为可被 Neptune
的 Bulk Loader
兼容的格式。
结果如下:
Completed Processing, data is ready for loading us![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1c0bc19a3cd84c79976827820d721a17.png)
ing the s3 url below:
s3://cheetah-qing/neptune-formatted/movielens-100k
操作完成后,执行下面代码加载数据
%load -s {response} -f csv -p OVERSUBSCRIBE --run
配置端点
执行命令来创建端点,并获取到推理端点的端点名称。
setup_node_classification=True
setup_node_regression=True
setup_link_prediction=True
setup_edge_classification=True
setup_edge_regression=True
endpoints=neptune_ml.setup_pretrained_endpoints(s3_bucket_uri, setup_node_classification, setup_node_regression, setup_link_prediction, setup_edge_classification, setup_edge_regression)
node_classification_endpoint=endpoints['node_classification_endpoint_name']['EndpointName']
node_regression_endpoint=endpoints['node_regression_endpoint_name']['EndpointName']
link_prediction_endpoint=endpoints['prediction_endpoint_name']['EndpointName']
edge_classification_endpoint=endpoints['edge_classification_endpoint_name']['EndpointName']
edge_regression_endpoint=endpoints['edge_regression_endpoint_name']['EndpointName']
Gremlin 查询
先执行下面代码,来验证图谱中,Forrest Gump
这个 movie
的 genre
不包含任何 genre
值
接下来我们修改这个查询。首先指定要在 Gremlin
查询中使用的推理端点:g.with("Neptune#ml.endpoint","<INSERT ENDPOINT NAME>")
,然后指定我们想要获取该属性的预测值:with("Neptune#ml.classification")
。将这些内容结合在一起就可以得到下方的查询,该查询可通过我们的产品知识图谱 Forrest Gump
的 genre
。执行下面命令
%%gremlin
g.with("Neptune#ml.endpoint","${node_classification_endpoint}").
V().has('title', 'Forrest Gump (1994)').properties("genre").with("Neptune#ml.classification").value()
结果如下:
查看结果可知,预测结果似乎是正确的,Forrest
似乎被正确预测为 Drama
类型。
删除环境
如果不需要这个服务,就把它删除掉,防止持续扣费。
删除 S3 存储桶
选择 cloudshell
,执行aws s3 rb s3://cheetah-qing --force
删除 S3 存储桶。
总结
Amazon Neptune
是一种高性能、可扩展且完全托管的图数据库服务,具有许多优势,使其在处理复杂关系数据时非常有效。
- 快速开发和部署:
Neptune
提供灵活的开发和部署环境,支持快速原型设计和部署,减少开发时间和成本。 Neptune
无缝集成 AWS 的其他服务,如AWS Lambda
、Amazon CloudWatch
、Amazon S3
等,便于构建复杂的应用程序和数据管道。- 全球部署:通过
Amazon Neptune
全球部署选项,可以在全球多个区域快速部署和访问图数据库,实现低延迟和高可用性。 - 高性能:
Neptune
设计用于快速、低延迟的图查询,能够高效处理包含数十亿个关系和节点的图数据。其优化的存储引擎和查询引擎能提供快速的图遍历和查询性能。 - 完全托管:作为 AWS 的托管服务,
Amazon Neptune
减少了用户管理数据库基础设施的负担。AWS 负责软件更新、补丁管理、备份和恢复等操作,使用户可以专注于应用开发。
当然Amazon Neptune
还有很多操作,期待在以后的使用过程中继续挖掘!