我刚刚开始使用neo4j,并做了一些实验,已经准备好开始组织数据库本身。因此,我首先设计了一个纸上的基本图表,然后遇到了以下疑问:
我使用的资料中的大多数示例(cypher和neo4j教程)每个关系/节点仅显示一些属性。但是我想知道拥有大量属性的代价是多少。
Q:是否更有效地支持各种关系类型(GOODFRIENDS_WITH,FRIENDS_WITH,ACQUAINTANCE,RIVAL,ENEMIES等)或具有不同属性(SEES_AS类型:好朋友,朋友,熟人,对手,敌人等)?
对于节点也是如此。我的图表的初稿具有惊人的属性(标题,名字,名字,名字,姓氏,第二个姓氏,后缀,昵称,然后是身体特征,个性,年龄,工作...),我认为这可能会降低数据库的性能。当然,某些节点并不需要所有属性,但是基本属性仍然会很多。
问:在节点和关系中,对属性数量的实际限制是多少?
仅供参考,我将通过使用节点(创建节点:家族名称,为:job等创建另一个节点)来减少属性,从而重新制作我的草稿,但我只是刚刚开始思考结束,因为即使更改会放大我将要处理的关系类型的数量,我也需要仔细分析保留哪些“可能的属性”才有意义。
背景信息:
1)我正在使用neo4j绘制一个虚构的小镇中人们之间的所有关系。我将执行的查询主要如下:
a。找到2个(或更多)字符之间的所有可能路径
b。查找所有经常出现2个(或更多)字符的位置
c。查找与角色X有某种类型的关系(朋友,堂兄弟姐妹,邻居等)的所有角色
d。查找在同一所学校就读过的相同年龄(或相似年龄)的所有角色e。查找具有相同年龄/名字/姓氏/头发颜色/身高/爱好/工作/脾气(容易发怒)/ ...的所有字符...
以及以上内容的变体。
2)我不是程序员,但是拥有自学HTML和高级excel的能力,我相信我会足够快地学习直观的Cypher。
答案 0 :(得分:2)
首先,对于小数据“沙盒”的使用,这是一个有争议的问题。即使使用最无效的数据布局,只要您避免使用笛卡尔积及其类似物,您将注意到的唯一一件事就是数据对自己的直观程度。因此,如果这是一个“玩具”规模的项目,那么只需关注对您而言最有意义的组织。如果您以后改变主意,通过密码重新格式化不会太难。
现在假设这是一个需要扩展到一定程度的业务项目,请记住,非索引属性基本上对Cypher计划者是不可见的。您的关系越有意义和越多样化,Cypher计划者将越能迅速找到您的数据。支持您希望能够探索的连接的关系,并支持您只想查看的数据的属性。为任何属性建立索引或使用标签,这些属性对于在查询中查找特定(或一组)节点至关重要。