UUID
该库支持手动和自动化生成 UUID,这些 UUID 可以存储为节点上的属性。
UUID 使用java randomUUID 实用程序方法生成,该方法生成v4UUID。
UUID 可以使用众所周知的十六进制表示形式(32 个字符,例如 1051af4f-b81d-4a76-8605-ecfb8ef703d5
)或 Base64(22 个字符,例如 vX8dM5XoSe2ldoc/QzMEyw
)编码为字符串。
自动 UUID
还有一些过程通过 UUID 处理程序生命周期处理 UUID 属性的自动添加。UUID 处理程序是一个事务事件处理程序,它会自动将 UUID 属性添加到提供的标签和提供的属性名称。请查看以下文档以获取详细说明。
所有这些过程(除了列表和显示过程)都旨在在系统数据库中执行,因此必须通过打开系统数据库会话来执行它们。有几种方法可以做到这一点:- 使用 cypher-shell 或 Neo4j 浏览器时,可以在 Cypher 查询前加上 此外,它们接受数据库名称作为第一个参数,我们希望在此数据库中安装/更新/删除自动 UUID。通过这种实现,我们可以利用集群路由机制,在集群环境中使用这些过程。 |
安装、更新或删除自动 UUID 是一个最终一致的操作。因此,它们不会立即被添加/更新/删除,但它们具有由 Apoc 配置 `apoc.uuid.refresh= |
首先在 `$NEO4J_HOME/config/apoc.conf` 中启用 `apoc.uuid.enabled=true` 或 `apoc.uuid.enabled.[DATABASE_NAME]=true`。
配置值 `apoc.uuid.format` 允许您在不同的 UUID 编码方法之间进行选择:`hex`(默认选项)或 `base64`。
限定名称 | 类型 | 版本 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UUID 示例
创建自动 UUID
这些示例假设我们位于 `neo4j` 数据库中,并且我们希望在该数据库中创建自动 UUID。
添加 `uuid`
CALL apoc.uuid.setup('Person')
YIELD label, installed, properties
RETURN label, installed, properties
请注意,`apoc.uuid.setup` 以及 `apoc.uuid.drop`、`apoc.uuid.dropAll` 必须在系统数据库中执行。
结果是
标签 | 已安装 | 属性 |
---|---|---|
"Person" |
true |
|
当执行 `apoc.uuid.setup` 过程时,会自动执行创建约束(如果不存在)的查询(同样在这种情况下,在由 `apoc.uuid.refresh` 配置定义的时间之后):`CREATE CONSTRAINT IF NOT EXISTS FOR (n:
然后,可以在由配置 `apoc.uuid.refresh` 定义的时间之后执行以下查询
CREATE (n:Person {name: 'Daniel'})-[:Work]->(:Company {name: 'Neo4j'})
结果将是具有 2 个属性的节点 `:Person`
如果选择默认配置 `addToExistingNodes: true`,则在后台(通过 `apoc.periodic.iterate` 过程)所有现有节点也将填充一个具有 uuid 值的属性。并且,当执行完成时,将打印如下所示的查询结果日志
Result of batch computation obtained from existing nodes for UUID handler with label `MyLabel`:
{failedParams={}, committedOperations=1, batch={total=10, committed=10, failed=0, errors={}}, wasTerminated=false, batches=1, timeTaken=0, retries=0, errorMessages={}, total=1, operations={total=10, committed=10, failed=0, errors={}}, failedOperations=0, updateStatistics={nodesDeleted=0, labelsAdded=0, relationshipsCreated=0, nodesCreated=0, propertiesSet=1, relationshipsDeleted=0, labelsRemoved=0}, failedBatches=0}
自动 UUID 列表
可以返回数据库中所有自动 UUID 的完整列表。例如,如果创建以下查询中的 UUID
CALL apoc.uuid.setup('TestShow')
然后可以运行(同样在这种情况下,在由配置 `apoc.uuid.refresh` 定义的时间之后)
CALL apoc.uuid.show()
标签 | 已安装 | 属性 | "Person" |
---|
请注意,由于自动 UUID 操作最终是一致的(基于 `apoc.uuid.refresh` 配置),因此 `apoc.uuid.show` 可能会返回一些尚未添加/更新/删除的 UUID。要获取当前已安装的所有 UUID 的列表,请使用 apoc.uuid.list |
删除自动 UUID
CALL apoc.uuid.drop('Person')
YIELD label, installed, properties
RETURN label, installed, properties
结果是
标签 | 已安装 | 属性 |
---|---|---|
"Person" |
false |
{uuidProperty → "uuid", addToExistingNodes → true} |
您还可以删除所有已安装的 uuid,并将过程称为
CALL apoc.uuid.dropAll()
YIELD label, installed, properties
RETURN label, installed, properties
结果是
标签 | 已安装 | 属性 |
---|---|---|
"Person" |
false |
{uuidProperty → "uuid", addToExistingNodes → true} |
导出元数据
要将 uuid 导入到另一个数据库(例如,在 `./neo4j-admin backup` 和 `/neo4j-admin restore` 之后),请参阅 apoc.systemdb.export.metadata 过程。 |