AWS Neptune Gremlin 学习笔记
Neptune简介
- Amazon Neptune 是一项快速、可靠且完全托管的图形数据库服务,可帮助您轻松构建和运行需要处理高度互连数据集的应用程序。
- Neptune 的核心是一个专门打造的高性能图形数据库引擎,它经过优化,可存储数十亿个关系并能以毫秒级延迟进行图形查询。
- Neptune 支持主流图形查询语言 Apache TinkerPop Gremlin 和 W3C SPARQL,可让您轻松构建高效地导航高度互连数据集的查询。
- Neptune 支持图形用例,如建议引擎、欺诈检测、知识图形、药物开发和网络安全。
- Neptune 使用节点 (数据实体)、边缘 (关系) 和属性等图形结构来表示和存储数据。这些关系存储为数据模型的一等公民。这样,系统便可直接关联节点中的数据,从而显著提高用于导航数据中的关系的查询的性能。Neptune 中的大规模交互式性能可有效地实现各种图形使用案例。
- 图形数据库中的图形可依据具体的边缘类型进行遍历,或者也可对整个图形进行遍历。
Neptune 与Tinkerpop-Gremlin的实现区别
- Pre-Bound 变量
- 遍历对象 g 是 Pre-bound。不支持 graph 对象。
TinkerPop 枚举
- Neptune 不支持枚举值的完全限定类名称。例如,您在 Groovy 请求中必须使用 single,不能使用
org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single
。 - 枚举类型由参数类型决定。
- Neptune 不支持枚举值的完全限定类名称。例如,您在 Groovy 请求中必须使用 single,不能使用
下表显示了允许的枚举值和相关的 TinkerPop 完全限定名称。
- Java代码
- Neptune 不支持调用由支持的 Gremlin API 以外的任意 Java 或 Java 库调用定义的方法。例如,不允许 java.lang.*、Date() 和 g.V().tryNext().orElseGet()。
- 日期和时间
- Neptune 不支持 Java Date() 函数。日期和时间值必须使用 datetime() 函数进行指定。
- datetime() 函数采用符合 ISO8061 日期时间的字符串值。例如:datetime(‘2018-01-01T00:00:00’)。支持以下格式:YYYY-MM-DD、YYYY-MM-DDTHH:mm、YYYY-MM-DDTHH:mm:SS、YYYY-MM-DDTHH:mm:SSZ
- 脚本执行
- 所有查询必须以遍历对象 g 开头。
- 多个遍历可由分号 (;) 或换行符 (\n) 分隔发布。后一个以外的每个语句都必须以要执行的 next() 步骤结尾。仅返回后遍历数据。
- 事务
- Neptune 在每个 Gremlin 遍历开始时打开新的事务,并在遍历成功完成后结束事务。事务会在出现错误时回滚。
- 用分号 (;) 或换行符 (\n) 分隔的多个语句包含在单个事务中。后一个以外的每个语句都必须以要执行的 next() 步骤结尾。仅返回后遍历数据。
- 不支持使用 tx.commit() 和 t.rollback() 的手动事务逻辑。
- 顶点和边缘 ID
- Neptune Gremlin 顶点和边缘 ID 必须属于 String 类型。如果您在添加顶点或边缘时未提供 ID,则 UUID 会生成并转换为一个字符串;例如,”48af8178-50ce-971a-fc41-8c9a954cea62”。
- 这表示用户提供的 ID 受支持,但它们在正常使用中是可选的。但是,Neptune Load 命令要求所有 ID 使用 ~id 字段采用 Neptune CSV 格式进行指定。
用户提供的 ID
- 用户提供的 ID 在 Neptune Gremlin 中允许,且具有以下规定。
- 提供的 ID 是可选的。
- 仅支持顶点和边缘。
- 仅支持 String 类型。
要使用自定义 ID 创建新顶点,请将 property 步骤与 id 关键字一起使用:g.addV().property(id, ‘customid’)。
注意:请勿为 id 关键字加上引号。
- 用户提供的 ID 在 Neptune Gremlin 中允许,且具有以下规定。
- 如果您尝试使用 g.addV() 和具有该 ID 已存在的顶点创建新顶点,则此操作将失败。此情况的例外是,如果为顶点指定新标签,该操作将成功。指定的任何其他属性将添加到顶点。不会覆盖任何内容。例如,以下 Gremlin 控制台命令将成功。
gremlin> g.addV('label1').property(id, 'customid')
gremlin> g.addV('label2').property(id, 'customid')
gremlin> g.V('customid').label()
==>label1::label2
- 1
- 2
- 3
- 4
- 顶点属性 ID
- 顶点属性 ID 会自动生成且可以在查询时显示为正数或负数。
- 顶点属性的基数
- Neptune 支持集基数和单一基数。如果未指定集基数,请选中它。这意味着,如果您设置一个属性值,它会向该属性添加新值,但是仅当它未显示在一组值中时。这是 Set 的 Gremlin 枚举值。
- 不支持 List。有关属性基数的更多信息,请参阅 Gremlin JavaDoc 中的顶点主题。
- 更新顶点属性
- 要更新属性值而无需向一组值添加其他值,请在 property 步骤中指定 single 基数。
g.V('exampleid01').property(single, 'age', 25)
- 1
**注意:**这将删除该属性的所有现有值。
- 1
- 标签
- Neptune 支持一个顶点的多个标签。创建标签时,您可以指定多个标签,同时使用 :: 分隔它们。例如,g.addV(“Label1::Label2::Label3”) 添加具有三个不同标签的顶点。hasLabel 步骤与具有以下任一三个标签的此顶点相匹配:hasLabel(“Label1”)、hasLabel(“Label2”) 和 hasLabel(“Label3”)。- 重要::: 分隔符仅用于此用途。您不能在 hasLabel 步骤中指定多个标签。例如,hasLabel(“Label1::Label2”) 与任何内容都不匹配。
- 变量
- Neptune 不支持 Gremlin 变量且不支持 bindings 属性。
- 超时
- Gremlin 控制台命令 :remote config timeout 仅设置本地超时。要为 Neptune 设置远程查询超过,请使用 neptune_query_timeout 参数。
- Groovy 限制
- Neptune 不支持不以 g 开头的 Groovy 命令。这包括数学 (例如:1+1)、系统调用 (例如:System.nanoTime()) 和变量定义 (例如:1+1)。
- 重要:Neptune 不支持完全限定类名称。例如,您在 Groovy 请求中必须使用 single,不能使用 org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single。
- Gremlin 图形支持的功能
- 以下是一组由 Neptune Gremlin 图形实现的功能。这些功能与由 graph.features() 命令返回的功能相同。
- 连接地址
相关文章