限制与注意事项InfinigraphAura 不可用2025.12 版本引入
不支持的功能
不支持的存储过程
db.index.fulltext.awaitEventuallyConsistentIndexRefresh() 在 2025.12 和 2026.01 版本的共享属性数据库(sharded property databases)中不受支持。
|
强烈建议不要在共享属性数据库上使用 特别需要注意的是, |
性能注意事项
对路径中的属性进行过滤
那些在遍历下一个关系属性之前,需要检查两个节点间所有关系属性的查询可能会遇到性能问题。例如,以下查询必须获取人与人之间的每一个 [k:KNOWS] 关系,以检查其每个属性,然后才能遍历到下一个人。
MATCH (n:Person)[k:KNOWS*1..]>(m:Person)
WHERE k.creationDate=1268465841718
RETURN n,k,m
这可以改写为以下性能更好的形式:
MATCH (n:Person)[k:KNOWS{creationDate=1268465841718}]>+(m:Person)
RETURN n,k,m
但是,并非所有查询都可以这样改写。
用于批量写操作的事务调用 (Call in transactions)
由于写入架构的原因,在写操作期间对大事务进行批处理可以带来显著的性能优势。对于单实例数据库也是如此,但在共享属性数据库中,这种性能差异更为明显。
例如,考虑以下查询:
node_updates = [
{ id: 1, name: "Alice", age: 30 },
{ id: 2, name: "Bob", age: 25 },
{ id: 3, name: "Charlie", age: 40 }
]
FOR each update IN node_updates DO
EXECUTE Cypher:
MATCH (n:Person {id: update.id})
SET n.name = update.name,
n.age = update.age
END FOR
可以改写为以下形式以获得更好的性能:
WITH [
{id: 1, name: "Alice", age: 30},
{id: 2, name: "Bob", age: 25},
{id: 3, name: "Charlie", age: 40}
] AS updates
UNWIND updates AS u
MATCH (n:Person {id: u.id})
SET n.name = u.name,
n.age = u.age
其他注意事项
neo4j-admin database copy 到共享属性数据库
当使用 neo4j-admin database copy --property-shard-count > 0 命令将现有数据库拆分为分片时,无法进行原位复制,这意味着你不能用共享属性数据库替换现有的数据库。相反,你必须指定一个新名称,或将 --to-path-data 和 --to-path-txn,或者 --target-location={path|uri} 和 --target-format={database|backup} 设置为一个新的 DBMS 位置。
在共享数据库中使用 USE 子句
在 USE 子句中定位共享数据库时,请在图引用中使用其虚拟数据库名称或别名。不支持直接定位分片。
例如:
USE `neo4j-sharded` MATCH (n) RETURN n
Cypher 5
共享属性数据库不支持 Cypher 5。尽管某些查询可能有效,但它并未得到官方支持。你必须使用 Cypher25,这是创建共享属性数据库时的默认版本。请参阅 配置 Cypher 默认版本。