我有一个修改密码查询的性能问题。给定是一个源节点,它与子节点有大量的传出关系。这些子节点都有一个键属性。现在的目标是在原点和子节点之间创建新节点,以便将共享相同密钥属性值的所有子节点分组。这个想法的情节可以在neo4j控制台上找到:http://console.neo4j.org/?id=vinntj
我将查询与sping-data-neo4j 2.2.2一起使用。RELEASE和neo4j 1.9.2嵌入。该查询的参数必须是节点id,该查询的结果应该是修改后的根节点。
查询当前看起来像(比链接的neo4j控制台中的查询复杂一点):
START root=node({0})
MATCH (root)-[r:LEAF]->(child)
SET root.__type__='my.GroupedRoot'
DELETE r
WITH child.`custom-GROUP` AS groupingKey, root AS origin, child AS leaf
CREATE UNIQUE (origin)-[:GROUP]->(group{__type__:'my.Group',key:'GROUP',value:groupingKey,origin:ID(origin)})-[:LEAF]->(leaf)
RETURN DISTINCT origin
属性Custure-GROUP是按分组的关键。在SDN中,它由DynamicProperties对象表示。我将其注释为索引以及创建的组节点的group pingKey和源属性。
对于5000个子节点,将其分组需要约50秒。对于10000个节点~90秒。用于20000个节点~380s和30000个节点
有人知道如何更快地进行此查询吗?或者使用其他查询更快地执行相同的操作?
嗯,现在我转向不使用这种密码查询这么大的数据量。我使用遍历API实现了相同的功能,用于提取可分组的项,并使用Neo4jTemboard创建新的节点和关系。现在,50000个项目可以在5474毫秒内分组,而不是以前使用的cypher查询约1小时。这是一个非常大的进步。
如果createunique确实是问题所在,那么这将首先创建组,然后映射到它们。
START root=node(*)
MATCH (root)-[r:LEAF]->(child)
WHERE HAS (root.key) AND root.key='root'
WITH DISTINCT child.key AS groupingKey, root as origin
CREATE UNIQUE (origin)-[:GROUP]->(intermediate { key:groupingKey,origin:ID(origin)})
WITH groupingKey, origin, intermediate
MATCH (origin)-[r:LEAF]->(leaf)
WHERE leaf.key = groupingKey
DELETE r
CREATE (intermediate)-[:LEAF]->(leaf)
RETURN DISTINCT origin
由于某种原因,控制台不允许我查看任何一个查询的执行计划,因此我不确定它是否有帮助。
您还可以考虑对根进行索引,这样就不必在所有节点上执行“WHERE”。您可以只检查key=root的索引。
编辑上述查询的替代方法如下所示,这将避免使用collect再次匹配叶节点。
START root=node(*)
MATCH (root)-[r:LEAF]->(child)
WHERE HAS (root.key) AND root.key='root'
DELETE r
WITH DISTINCT child.key AS groupingKey, root as origin, COLLECT(child) as children
CREATE UNIQUE (origin)-[:GROUP]->(intermediate { key:groupingKey,origin:ID(origin)})
WITH groupingKey, origin, intermediate, children
FOREACH(leaf IN children : CREATE (intermediate)-[:LEAF]->(leaf))
RETURN DISTINCT origin
我当前有一个查询,用于在Men节点和People节点之间建立关系: Mem节点包含一个personid数组,我正在展开该数组,然后将其与personid节点对应。但是,查询正在与它创建的新Person节点建立关系,只使用相应的PersonId属性(而不使用其他属性),而不是与具有相应PersonId的现有Person节点建立关系。 即使我对带有Person标签的节点的personID属性有一个唯一
假设我们有下面的Neo4j模式(简化了,但它显示了重要的一点)。有两种类型的节点和<代码>版本s通过关系的s可以通过关系连接。同样,这些关系有两个属性和,表示有效时间跨度-其中一个或两个可以(在Neo4j术语中不存在)表示无限。 编辑:节点和关系的有效性日期是独立的(尽管示例巧合地显示它们是对齐的)。 该示例显示了两个
10.3. 缓冲节点查询 kgp.py 使用了多种技巧,对你进行 XML 处理而言它们或许有用。第一个就是,使用输入文档的结构稳定特征来构建节点缓冲。 一个语法文件定义了一系列的 ref 元素。每个 ref 包含了一个或者多个 p 元素,p 元素可以包含很多不同的东西,包括 xref。无论何时你遇到一个 xref ,都可以通过相同的 id 属性找到相对应的 ref 元素,并选择 ref 元素的子元
问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 我的mySQL数据库中有如下表: 对于谓词,它将具有如下树视图: 我想创建一个可以选择起始节点并为此获得所有父节点的表单。例如,通过选择我想要获得: 步骤2: 有什么方法可以使用以下简单文本来打印此节点: 问题答案: 您的数据可以在RDF中表
我必须查询一个属性值,然后在此基础上从不同的节点找到另一个属性值。 以下是我的XML的外观: 示例:我需要查询的属性值位于第101行。我必须取引用节点的节点id,在这个例子中是“3”: 然后我需要在XML中进一步搜索,它应该找到id="3"的节点,然后寻找名为"长度"的属性,并返回它的值,在这个例子中是"10": 我已经编写了以下XSLT代码,但需要添加更多代码以正确获取长度部分: 请建议如何获得
我对neo4j还是个新手。我已经编写了一个小型的RESTFUL服务,它将节点作为PoC通过REST插入neo4j db(服务器)。结构如下所示:根-[节点]- n节点是“居中”的节点。我计划将其他中心节点添加为不同的节点类型(例如产品/类别/文档/属性/用户…) 在我的第一个例子中,我添加了大约。1.000个节点。现在我试图增加节点的数量,并查询这些节点。现在我面临着一种性能“问题”。这是我的查询