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
如何在Neo4j中表示网络的线_Neo4j - Fatal编程技术网

如何在Neo4j中表示网络的线

如何在Neo4j中表示网络的线,neo4j,Neo4j,我正在尝试用Neo4j实现一个数据模型。该模型在城市和街道中具有兴趣点。街道连接着各个点。 最初我认为点和街道都应该在图形数据库中表示为节点。 这两种不同类型的节点之间存在一种关系(“点与点相连”)。 现在我在想,与其将街道表示为节点,不如将街道表示为关系(“连接两点”)更为正确 这实际上是我的问题。在模型中表示网络(线部分)更正确的方法是什么:使用节点还是使用关系?关系和节点之间唯一的主要区别是两个节点之间必须存在关系。这意味着,如果不存储连接的两个兴趣点,就无法存储特定街道。因此,如果您认为

我正在尝试用Neo4j实现一个数据模型。该模型在城市和街道中具有兴趣点。街道连接着各个点。 最初我认为点和街道都应该在图形数据库中表示为节点。 这两种不同类型的节点之间存在一种关系(“点与点相连”)。 现在我在想,与其将街道表示为节点,不如将街道表示为关系(“连接两点”)更为正确
这实际上是我的问题。在模型中表示网络(线部分)更正确的方法是什么:使用节点还是使用关系?

关系和节点之间唯一的主要区别是两个节点之间必须存在关系。这意味着,如果不存储连接的两个兴趣点,就无法存储特定街道。因此,如果您认为这是一个问题,您可能希望将街道存储为节点。如果您确信,如果街道上存在数据库中的兴趣点,那么您只想存储街道,那么将街道表示为关系就更有意义了

通常,应尽量避免将属性存储在仅用于查找它们之间关系的节点中。在本例中,您提到了在每个兴趣点节点中可能对“point is connected with”属性进行故事化。这是可行的,但本质上只是说两点之间存在关系,而没有实际使用关系。同样,如果您希望能够存储没有兴趣点的街道,这可能是必要的,您可以通过将“point is connected with”属性保留为空来存储没有兴趣点的街道,但我建议不要这样做

另一件要考虑的事情是你在这段关系中会储存什么。如果使用以街道为节点的模型,则如果不向图形中添加专门针对这些属性的关系(也可能是街道关系的属性),则很难表示感兴趣点之间的距离等数量

更新:我想添加一个示例查询,以显示建立街道关系如何简化您的逻辑,并使数据库的使用更加简单和直观

假设您希望在点A和点B之间找到兴趣点最少的路径

这是查询在关系模型中的外观:

MATCH (a:Point {name: "foo"}), (b:Point {name: "bar"}),
  p = shortestPath(a-[*:Street]-b)
RETURN p

通过在适当的地方使用关系,您可以启用Neo4j的功能,允许您通过相对简单的查询完成大量工作。很难想到在将街道表示为节点的模型中编写此查询的方法,但它很可能更复杂、效率更低。

关系和节点之间唯一的主要区别是两个节点之间必须存在关系。这意味着,如果不存储连接的两个兴趣点,就无法存储特定街道。因此,如果您认为这是一个问题,您可能希望将街道存储为节点。如果您确信,如果街道上存在数据库中的兴趣点,那么您只想存储街道,那么将街道表示为关系就更有意义了

通常,应尽量避免将属性存储在仅用于查找它们之间关系的节点中。在本例中,您提到了在每个兴趣点节点中可能对“point is connected with”属性进行故事化。这是可行的,但本质上只是说两点之间存在关系,而没有实际使用关系。同样,如果您希望能够存储没有兴趣点的街道,这可能是必要的,您可以通过将“point is connected with”属性保留为空来存储没有兴趣点的街道,但我建议不要这样做

另一件要考虑的事情是你在这段关系中会储存什么。如果使用以街道为节点的模型,则如果不向图形中添加专门针对这些属性的关系(也可能是街道关系的属性),则很难表示感兴趣点之间的距离等数量

更新:我想添加一个示例查询,以显示建立街道关系如何简化您的逻辑,并使数据库的使用更加简单和直观

假设您希望在点A和点B之间找到兴趣点最少的路径

这是查询在关系模型中的外观:

MATCH (a:Point {name: "foo"}), (b:Point {name: "bar"}),
  p = shortestPath(a-[*:Street]-b)
RETURN p

通过在适当的地方使用关系,您可以启用Neo4j的功能,允许您通过相对简单的查询完成大量工作。很难想到在将街道表示为节点的模型中编写此查询的方法,但它很可能更复杂、效率更低。

关系和节点之间唯一的主要区别是两个节点之间必须存在关系。这意味着,如果不存储连接的两个兴趣点,就无法存储特定街道。因此,如果您认为这是一个问题,您可能希望将街道存储为节点。如果您确信,如果街道上存在数据库中的兴趣点,那么您只想存储街道,那么将街道表示为关系就更有意义了

通常,应尽量避免将属性存储在仅用于查找它们之间关系的节点中。在本例中,您可以在每个感兴趣的点中提及“点与”属性的可能故事