本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon Neptune 的 Gremlin 标准合规性
以下各部分概述了 Grimlin 的 Neptune 实施以及它与 Apache 的不同之处。TinkerPop实现。
Neptune 在其引擎中本地实现了一些 Gremlin 步骤,并使用 ApacheTinkerPopGremlin 实施以处理其他人(请参阅Amazon Neptune 中的原生 Gremlin 步骤支持)。以下部分概述了 Neptune 的实施与TinkerPop实现。
Gremlin 的适用标准
Gremlin 语言的定义是阿帕奇TinkerPop文档
和 ApacheTinkerPopGemlin 的实施而不是正式规范。 对于数字格式,Gremlin 遵循 IEEE 754 标准(IEEE 754-2019-IEEE 浮点算法标准
. 有关更多信息,请参阅维基百科 IEEE 754 页 )。
Neptune Gemlin 实施的不同之处
Grimlin 的 Amazon Neptune 实施与 Apache 定义的实施之间存在几个重要的差异。TinkerPop.
有关 Grimlin 控制台和 Amazon Neptune 中所示的这些实施差别的一些具体示例,请参阅使用 Gremlin 访问 Amazon Neptune 中的图表部分的快速入门。
以下是实施差异列表:
主题
Pre-Bound 变量
遍历对象 g
是 Pre-bound。不支持 graph
对象。
TinkerPop枚举
Neptune 不支持枚举值的完全限定类名称。例如,您在 Groovy 请求中必须使用 single
,不能使用 org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single
。
枚举类型由参数类型决定。
下表显示允许的枚举值和相关的枚举值。TinkerPop完全限定的名称。
允许的值 | 类 |
---|---|
id , key , 标签 , 值 |
org.apache.tinkerpop.gremlin.structure.T |
t.id , T.key , t. 标签 , T. 值 |
org.apache.tinkerpop.gremlin.structure.T |
set , 单个的 |
|
ASC , desc , 洗牌
|
|
订购 .asc , 订购 .desc , 订购。随机播放
|
org.apache.tinkerpop.gremlin.process.traversal.Order |
全球 , 本地
|
|
Scope.Global , 范围。本地
|
org.apache.tinkerpop.gremlin.process.traversal.Scope |
全部 , 第一个 , 最后的 , 混合的 |
|
normSack |
|
addAll , 和 , 分配 , DIV ,
max , min , 减去 , MULT ,
或 , sum , Sumlong
|
|
keys , values |
|
BOTH , IN , OUT |
|
任何 , 无 |
org.apache.tinkerpop.gremlin.Process .traversal.step。TraversalOption父母。选择 |
这些区域有:incr
和decr
上的枚举选项Order
已被弃用TinkerPop赞成asc
和desc
分别。请使用新选项,因为incr
和decr
将在未来版本中删除。
Java 代码
Neptune 不支持调用由支持的 Grimlin API 以外的任意 Java 或 Java 库调用定义的方法。例如,不允许 java.lang.*
、Date()
和 g.V().tryNext().orElseGet()
。
日期和时间
Neptune 提供datetime
方法,用于为 Gremlin 中发送的查询指定日期和时间。时髦的变体。这包括 Gremlin 控制台、使用 HTTP REST API 的文本字符串以及使用 Groovy 的任何其他序列化。日期和时间值必须使用 datetime()
函数进行指定。
这仅 适用于您将 Gremlin 查询作为文本字符串 发送的方法。如果您使用的是 Gremlin 语言变体 (GLV),则必须使用该语言的本机日期类和函数。有关更多信息,请参阅“最佳实践”部分的将本机日期和时间用于 GLV 时间数据。
datetime( )
函数采用符合 ISO-8601 日期时间的字符串值,最高精度为毫秒。例如:datetime('2018-01-01T00:00:00')
。
ISO-8601 日期时间格式的一些示例如下所示:
-
YYYY-MM-DD
-
YYYY-MM-DDTHH:mm
-
YYYY-MM-DDTHH:mm:SS
-
YYYY-MM-DDTHH:mm:SS.ssss
-
YYYY-MM-DDTHH:mm:SSZ
如果您在图表中输入一个指定了显式时区的 datetime 值,并在稍后查询该值,则该值将以协调世界时 (UTC) 的形式返回,而不会包含任何时区信息。
原因是 Neptune 将转换所有日期和时间并将其存储为 UTC 形式,以便能够有效地对其进行比较。这对性能很重要,但会导致丢失有关原始时区的信息。
脚本执行
所有查询必须以遍历对象 g
开头。
在字符串查询提交中,可以使用分号 (;
) 或换行符 (\n
) 进行分隔来发布多个遍历。若要执行,除最后一个语句以外的每个语句都必须以 .iterate()
步骤结尾。仅返回最后遍历数据。请注意,这不适用于 GLVByteCode查询提交。
会话
Neptune 中的会话持续时间限制为仅 10 分钟。请参阅Grelin 会话和TinkerPop会话参考
事务
Neptune 在每个 Gemlin 遍历开始时打开新的事务,并在遍历成功完成后结束事务。事务会在出现错误时回滚。
用分号 (;
) 或换行符 (\n
) 分隔的多个语句包含在单个事务中。最后一个以外的每个语句都必须以要执行的 next()
步骤结尾。仅返回最后遍历数据。
不支持使用 tx.commit()
和 tx.rollback()
的手动事务逻辑。
顶点和边缘 ID
Neptune Grelin 顶点和边缘 ID 必须属于类型String
. 如果您在添加顶点或边缘时未提供 ID,则 UUID 会生成并转换为一个字符串;例如,"48af8178-50ce-971a-fc41-8c9a954cea62"
。这些 ID 字符串支持 Unicode 字符,大小不能超过 55 MB。
这表示用户提供的 ID 受支持,但它们在正常使用中是可选的。但是,NeptuneLoad
命令要求所有 ID 使用~id字段采用 Neptune CSV 格式。
用户提供的 ID
用户提供的 ID 在 Neptune Grimlin 中允许,且具有以下规定。
提供的 ID 是可选的。
仅支持顶点和边缘。
仅支持
String
类型。
要使用自定义 ID 创建新顶点,请将 property
步骤与 id
关键字一起使用:g.addV().property(id, 'customid')
。
请勿为 id
关键字加上引号。
所有顶点 ID 必须是唯一的,并且所有边缘 ID 也必须是唯一的。但是,Neptune 允许顶点和边缘具有相同的 ID。
如果您尝试使用 g.addV()
创建新顶点并且已存在具有该 ID 的顶点,则此操作将失败。此情况的例外是,如果为顶点指定新标签,该操作将成功,但会将新标签和指定的任何其他属性添加到现有顶点。不会覆盖任何内容。未创建新顶点。顶点 ID 不会更改并会保持唯一。
例如,以下 Gremlin 控制台命令将成功:
gremlin> g.addV('label1').property(id, 'customid') gremlin> g.addV('label2').property(id, 'customid') gremlin> g.V('customid').label() ==>label1::label2
顶点属性 ID
顶点属性 ID 会自动生成且可以在查询时显示为正数或负数。
顶点属性的基数
Neptune 支持集基数和单一基数。如果未指定,则集基数处于选中状态。这意味着,如果您设置一个属性值,它会向该属性添加新值,但是仅当它未显示在一组值中时。这是 Set
不支持 List
。有关属性基数的更多信息,请参阅顶点
更新顶点属性
要更新属性值而无需向一组值添加其他值,请在 property
步骤中指定 single
基数。
g.V('exampleid01').property(single, 'age', 25)
这将删除该属性的所有现有值。
Labels
Neptune 支持一个顶点的多个标签。创建标签时,您可以指定多个标签,同时使用 ::
分隔它们。例如,g.addV("Label1::Label2::Label3")
添加具有三个不同标签的顶点。hasLabel
步骤与具有以下任一三个标签的此顶点相匹配:hasLabel("Label1")
、hasLabel("Label2")
和 hasLabel("Label3")
。
::
分隔符仅用于此用途。您不能在 hasLabel
步骤中指定多个标签。例如,hasLabel("Label1::Label2")
与任何内容都不匹配。
Variables
Neptune 不支持 Gemlin 变量且不支持bindings
财产。
转义字符
Neptune 解析所有转义字符,如中所述。转义特殊字符
Groovy 限制
Neptune 不支持不以开头的 Groovy 命令g
. 这包括数学(例如:1+1
)、系统调用(例如:System.nanoTime()
)和变量定义(例如:1+1
)。
Neptune 不支持完全限定类名称。例如,您在 Groovy 请求中必须使用 single
,不能使用 org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single
。
序列化
Neptune 根据请求的 MIME 类型支持以下串行化。
MIME type | Serialization | Configuration |
|
GryoMessageSerializerv1d0 |
IO 注册表:[org.apache.tinkerpop.gremlin.gremlin.tinkergraph.结构。TinkerIo注册表 v1d0] |
|
GryoMessageSerializerv1d0 |
serializeResultTo字符串:true |
application/vnd.gremlin-v3.0+gryo |
GryoMessageSerializerv3d0 |
IO 注册表:[org.apache.tinkerpop.gremlin.gremlin.tinkergraph.结构。TinkerIo注册表 V3d0] |
|
GryoMessageSerializerv3d0 |
serializeResultTo字符串:true |
|
GraphSONMessageSerializergremlLv1d0 |
IO 注册表:[org.apache.tinkerpop.gremlin.gremlin.tinkergraph.结构。TinkerIo注册表 v1d0] |
|
GraphSONMessageSerializerv2d0 (only works with WebSockets) |
IO 注册表:[org.apache.tinkerpop.gremlin.gremlin.tinkergraph.结构。TinkerIo注册表 v2d0] |
|
|
|
|
GraphSONMessageSerializerV3d0 |
IO 注册表:[org.apache.tinkerpop.gremlin.gremlin.tinkergraph.结构。TinkerIo注册表 V3d0] |
|
GraphBinaryMessageSerializerV1 |
|
Lambda 步骤
Neptune 不支持 Lambda 步骤。
不支持的 Gremlin 方法
Neptune 不支持以下 Gremlin 方法:
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.program(org.apache.tinkerpop.gremlin.process.computer.VertexProgram)
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.sideEffect(java.util.function.Consumer)
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.from(org.apache.tinkerpop.gremlin.structure.Vertex)
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.to(org.apache.tinkerpop.gremlin.structure.Vertex)
例如,不允许以下遍历:g.V().addE('something').from(__.V().next()).to(__.V().next())
。
不支持的 Gremlin 步骤
Neptune 不支持以下 Gremlin 步骤:
Gremlinio () 步
在 Neptune 中不支持。例如,查询 g.io("graph.xml").read().iterate()
不会和 Neptune 一起使用。
其他功能
Grimlin 的 Neptune 实现并没有暴露graph
对象。以下部分介绍支持和不支持的 graph
功能。
Gremlin 图形支持的功能
以下是一组由 Neptune Gremlin 图形实现的功能。这些功能与由 graph.features()
命令返回的功能相同。
图形功能 | Enabled |
---|---|
事务 |
true |
ThreadedTransactions |
false |
Computer |
false |
持久性 |
true |
ConcurrentAccess |
true |
变量功能 | Enabled |
---|---|
Variables |
false |
SerializableValues |
false |
UniformList值 |
false |
BooleanArray值 |
false |
DoubleArray值 |
false |
IntegerArray值 |
false |
StringArray值 |
false |
BooleanValues |
false |
ByteValues |
false |
DoubleValues |
false |
FloatValues |
false |
IntegerValues |
false |
LongValues |
false |
MapValues |
false |
MixedList值 |
false |
StringValues |
false |
ByteArray值 |
false |
FloatArray值 |
false |
LongArray值 |
false |
顶点功能 | Enabled |
---|---|
MetaProperties |
false |
DuplicateMulti属性 |
false |
AddVertices |
true |
RemoveVertices |
true |
MultiProperties |
true |
UserSuppliedId |
true |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
false |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
顶点属性功能 | Enabled |
---|---|
UserSuppliedId |
false |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
true |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
属性 |
true |
SerializableValues |
false |
UniformListValues | false |
BooleanArray值 |
false |
DoubleArray值 |
false |
IntegerArray值 |
false |
StringArray值 |
false |
BooleanValues |
true |
ByteValues |
true |
DoubleValues |
true |
FloatValues |
true |
IntegerValues |
true |
LongValues |
true |
MapValues |
false |
MixedList值 |
false |
StringValues |
true |
ByteArray值 |
false |
FloatArray值 |
false |
LongArray值 |
false |
边缘功能 | Enabled |
---|---|
AddEdges |
true |
RemoveEdges |
true |
UserSuppliedId |
true |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
false |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
边缘属性功能 | Enabled |
---|---|
属性 |
true |
SerializableValues |
false |
UniformList值 |
false |
BooleanArray值 |
false |
DoubleArray值 |
false |
IntegerArray值 |
false |
StringArray值 |
false |
BooleanValues |
true |
ByteValues |
true |
DoubleValues |
true |
FloatValues |
true |
IntegerValues |
true |
LongValues |
true |
MapValues |
false |
MixedList值 |
false |
StringValues |
true |
ByteArray值 |
false |
FloatArray值 |
false |
LongArray值 |
false |