AWS Neptune Gremlin 学习笔记

2022-05-30 00:00:00 遍历 属性 顶点 不支持 图形

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
    • 枚举类型由参数类型决定。
  • 下表显示了允许的枚举值和相关的 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 关键字加上引号。

  • 如果您尝试使用 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() 命令返回的功能相同。
    • 连接地址

相关文章