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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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,比如说我在管理收藏品。我有数以千计的棒球交易卡,数以千计的游戏卡(想想魔术:聚会),然后是成千上万的玩具 我在关系数据库中沉迷了20多年,对成千上万的Neo4J节点漂浮在太空中的想法感到不舒服 所以我倾向于用一个节点来收集它们,比如(:棒球卡),(:MTG卡),当然还有(:doiles)。他们的想法是这些都是单身 现在,如果我想要所有棒球卡,可能涉及某个球员,我可以这样做: (:BASEBALL_CARDS)-[GATHERS]->(:BASEBALL_CARD)-[:FEATURES]-

比如说我在管理收藏品。我有数以千计的棒球交易卡,数以千计的游戏卡(想想魔术:聚会),然后是成千上万的玩具

我在关系数据库中沉迷了20多年,对成千上万的Neo4J节点漂浮在太空中的想法感到不舒服

所以我倾向于用一个节点来收集它们,比如(:棒球卡),(:MTG卡),当然还有(:doiles)。他们的想法是这些都是单身

现在,如果我想要所有棒球卡,可能涉及某个球员,我可以这样做:

(:BASEBALL_CARDS)-[GATHERS]->(:BASEBALL_CARD)-[:FEATURES]->(p:PLAYER {name: '...'})
拥有:Basketball_CARDS单例是一件非常令人欣慰的事情,但它是否比索引:Basketball_CARD能完成的更多

(:BASEBALL_CARD)-[:FEATURES]->(p:PLAYER {name: '...'})

拥有数千个自由分布的节点是最佳实践吗?

图形数据库的一个特殊优点是本地查询:关系存在于实例中,而不是类型中。一个特殊的挑战(除了良好的建模)是确定本地查询的起点(并使其保持本地,即避免路径爆炸)。在Neo4j 1.x中,一个节点是实现某种查询起点的一种方式。随着2.x和标签的引入,索引
:BaseballCard
是实现这一目标的标准方法。如果一个节点的目的是作为示例中查询类型的起点,那么最好使用标签索引。在1.x中,一个常见的问题是,一个节点具有越来越多的相同类型和方向的关系,最终会成为遍历的瓶颈。人们开始将一个节点划分为几个分页的节点,比如

(:BaseballCards)-[:GATHERS]->(:BaseballCards1to10000)-[:GATHERS]->(:BaseballCard)
与少数节点相比,标签(可能与基本的、普通的本地遍历相结合)通常更好地服务于查找本地查询起点的目的。再说一次,若有这样一个节点能安抚你们的神经或满足你们史诗般的感觉,那个么一定要拥有它。由于查询的局部性,它不会对您造成任何伤害

但是,在您的示例中,
:BaseballCard
上的一个节点或索引都不能作为本地查询的起点。最特别的兴趣模式是玩家的名字。如果在
name
上索引
(:Player)
,您将获得最佳起点。遍历一个或几个*的
[:FEATURES]
关系非常便宜,只需在另一端对
:BaseballCard
标签进行一次简单的测试,就完成了。您当然可以为所有共享名称的玩家维护一个节点

以我最谦虚的看法,没有什么不舒服的必要。然而,我确实想肯定并赞扬你在这方面的不安:图形对于连接的数据来说是最强大的。收集棒球卡的特殊联系似乎不会增加新的理解或提高性能,但只要有断开的数据,就有可能发现令人兴奋和有意义的模式。也许在未来,这些卡片将通过表示其价值范围、层压质量、或先前所有者的链接列表、或它们在约会中作为对话开始者的工作情况的模式进行连接。缺少关系是一个寻找缺失的链接的过程,它为您的数据带来了巨大的洞察力和价值


*假设不止一张棒球卡上有同一名球员,或者一些棒球球员也出现在魔术卡上:聚会。我在这两个领域都是文盲,所以我想至少考虑到这种可能性。

具有讽刺意味的是,当graph DBs背后的整个思想是将节点之间的连接作为一级DB构造时,您关心节点“漂浮在空间中”

但我认为您真正关心的是节点不“属于表”(用关系数据库的说法)。因此,在创建一个特殊的单例节点时,您会感觉更舒服,在某种意义上,它取代了表,您可以从表中访问应该属于该表的所有节点


节点
标签
可以看作是“表名”的等价物。因此,您不仅不需要创建一个单例“表节点”,这样做会浪费数据库资源,并且会使查询变得复杂和缓慢。neo4j可以快速访问具有相同标签的所有节点。

嘿,这不像我接受过培训或其他什么:-D