Nic*_*las 11 neo4j graph-databases
我正在玩neo4j,我想知道,type在节点上有一个属性来指定它是什么类型的节点是常见的吗?我试过寻找这种做法,我看到有些人name用于这样的目的,但我想知道它是否被认为是一种好的做法,或者索引是否更实用?
一个例子是一个"用户"节点,它有类型:user,这样如果索引是坏的,我将能够进行全节点扫描并寻找类型user.
jos*_*inm 11
neo4j 2.0中添加了标签.他们解决了这个问题.
您可以使用标签创建节点:
CREATE (me:American {name: "Emil"}) RETURN me;
Run Code Online (Sandbox Code Playgroud)
您可以在标签上进行匹配:
MATCH (n:American)
WHERE n.name = 'Emil'
RETURN n
Run Code Online (Sandbox Code Playgroud)
您可以在节点上设置任意数量的标签:
MATCH (n)
WHERE n.name='Emil'
SET n :Swedish:Bossman
RETURN n
Run Code Online (Sandbox Code Playgroud)
您可以删除节点上的任意数量的标签:
MATCH (n { name: 'Emil' })
REMOVE n:Swedish
Run Code Online (Sandbox Code Playgroud)
等等...
没错,它确实取决于您的使用案例.如果你添加一个类型属性,然后希望找到所有用户,那么你就有可能遇到麻烦,因为你必须在每个节点上检查该属性才能找到用户.在这种情况下,索引可能会做得更好 - 但是在您需要查询索引中没有条件和关系的所有用户的情况下(当然,除非您的索引是"开始"的来源).如果您有类似我的图表,其中关系类型意味着两个不同的节点类型,如A-(知道) - (B)和A或B可以是用户或客户,那么它不起作用.
因此,您的用例非常重要 - 通常可以很容易地对图表进行建模,但根据您的使用模式对其进行"调整"非常重要.