Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph Neo4J模式设计查询_Graph_Neo4j_Graph Databases_Nosql - Fatal编程技术网

Graph Neo4J模式设计查询

Graph Neo4J模式设计查询,graph,neo4j,graph-databases,nosql,Graph,Neo4j,Graph Databases,Nosql,我使用Neo4J以图形格式保存XSD。图中的每个节点都有一个属性,该属性是字符串列表(数组)。 我的查询将基于此arraylist 例如:为了保持简单,假设图中的每个节点都将字母列表作为属性之一。现在,我的查询需要生成arraylist中包含“C”的所有节点 我的问题是,是否应该将属性arraylist中的所有字母表移动到作为子节点附着到每个节点的各个节点。如果这样做,我的查询将更改为生成其子节点包含“C”作为其值的所有节点 以上两种方法中哪一种更有效。具有作为arraylist的属性,或具有包

我使用Neo4J以图形格式保存XSD。图中的每个节点都有一个属性,该属性是字符串列表(数组)。 我的查询将基于此arraylist

例如:为了保持简单,假设图中的每个节点都将字母列表作为属性之一。现在,我的查询需要生成arraylist中包含“C”的所有节点

我的问题是,是否应该将属性arraylist中的所有字母表移动到作为子节点附着到每个节点的各个节点。如果这样做,我的查询将更改为生成其子节点包含“C”作为其值的所有节点

以上两种方法中哪一种更有效。具有作为arraylist的属性,或具有包含arraylist各个值的单独子节点

在实际场景中,该arraylist可以包含数千个条目。因此,如果我继续使用第二种方法,为每个arraylist值创建单独的节点,则树的大小将增大


但我需要知道两种方法中的读取效率。

对于您的用例,将同一集合中的所有字符串保持在同一节点中应该更快,因为neo4j需要做的工作更少。

对于您的用例,将同一集合中的所有字符串保持在同一节点中应该更快,因为neo4j将不得不做更少的工作。

我认为这取决于您计划使用的查询

如果元素的查找是主要用例(如您的示例中,查找包含“C”的所有节点),那么单独的节点可能更有效。原因是您的查询将不是“contains”类型的查询,而是相反的,首先匹配子节点“C”(并且您的索引或唯一约束将用于快速查找),然后遍历从该节点到与其关联的所有节点的关系。您无需进行额外过滤或属性检查即可获得相关结果

一个使用示例,假设您有:Holder节点和:Letter节点,其中:Letter节点具有唯一的“Letter”属性,并且每个:Holder节点与:Letter节点的某个子集具有:Contains关系

获取包含“C”的所有:Holder节点的查找查询如下所示:

MATCH (:Letter{letter:'c'})<-[:Contains]-(h:Holder)
RETURN h
同样,这是一个看起来很简单的查询,但它的速度很慢,无法利用索引或其他方法来加速它


也就是说,您计划提出的其他查询也应纳入最终决策考虑。

我认为这取决于您计划使用的查询

如果元素的查找是主要用例(如您的示例中,查找包含“C”的所有节点),那么单独的节点可能更有效。原因是您的查询将不是“contains”类型的查询,而是相反的,首先匹配子节点“C”(并且您的索引或唯一约束将用于快速查找),然后遍历从该节点到与其关联的所有节点的关系。您无需进行额外过滤或属性检查即可获得相关结果

一个使用示例,假设您有:Holder节点和:Letter节点,其中:Letter节点具有唯一的“Letter”属性,并且每个:Holder节点与:Letter节点的某个子集具有:Contains关系

获取包含“C”的所有:Holder节点的查找查询如下所示:

MATCH (:Letter{letter:'c'})<-[:Contains]-(h:Holder)
RETURN h
同样,这是一个看起来很简单的查询,但它的速度很慢,无法利用索引或其他方法来加速它


也就是说,您计划提出的其他问题也应纳入最终决定的考虑。

您能澄清一下“字母表”是什么意思吗?是一串字符吗?还是只有一个字符(来自英语字母表)?一个说明或更多的细节将是有益的。可能有兴趣。是的,我已经看到了上面的链接。但我仍然想探索我的选择。我在上面的例子中使用了字母表来保持简单。但在实际使用中,它将是字符串数组。总结一下我的问题,对于搜索/读取查询,使用不同的节点而不是使用属性作为arraylist是否好。哪种方法能有效地获取我的结果。你能澄清你所说的“字母表”是什么意思吗?是一串字符吗?还是只有一个字符(来自英语字母表)?一个说明或更多的细节将是有益的。可能有兴趣。是的,我已经看到了上面的链接。但我仍然想探索我的选择。我在上面的例子中使用了字母表来保持简单。但在实际使用中,它将是字符串数组。总结一下我的问题,对于搜索/读取查询,使用不同的节点而不是使用属性作为arraylist是否好。哪种方法可以有效地获取我的结果。