最好为节点/关系使用自定义 ID
Neptune 可让用户在节点和关系上显式分配 ID。ID 在数据集中必须是全局唯一的,并且必须是确定性的,才有用。确定性 ID 可以像属性一样用作查找或筛选机制;但是,从查询执行的角度来看,使用 ID 比使用属性更优化。使用自定义 ID 有几个好处:
-
现有实体的属性可以为空,但是 ID 必须存在。这让查询引擎在执行期间可以使用优化的联接。
-
当执行并发突变查询时,使用 ID 访问节点时并发修改异常(CME)出现的可能性会大幅降低,因为 ID 的强制唯一性导致对其施加的锁比对属性施加的锁更少。
-
使用 ID 可以避免创建重复数据,因为 Neptune 对 ID 强制执行唯一性,而对属性则不强制执行。
以下查询示例使用自定义 ID:
注意
属性 ~id 用于指定 ID,而 id 仅作为任何其他属性存储。
CREATE (n:Person {`~id`: '1', name: 'alice'})
不使用自定义 ID:
CREATE (n:Person {id: '1', name: 'alice'})
如果使用后一种机制,则不会强制执行唯一性,您可以稍后执行查询:
CREATE (n:Person {id: '1', name: 'john'})
这将创建第二个 id=1 且名为 john 的节点。在这种情况下,您现在将有两个 id=1 的节点,每个节点都有不同的名称(alice 和 john)。