我使用neo4j来包含来自不同源系统的临时数据集。我的数据包括几个父对象,每个对象包含不同类型的4-7层子对象。每个数据集的对象总数在2000至150万之间。我正在使用python py2neo库,它在数据创建阶段和传递用于报告的密码查询时都具有良好的性能。
为了查询和清除目的,我想将数据集从不相关的系统中分离出来,但我担心性能问题。我有一些想法,但我不清楚哪一个最有可能可行。
MATCH (pr:project)<-[:IN_PROJECT*7]-(c:child_object)
距离,这似乎是非常昂贵的查询。MATCH (pr:project)<-[:IN_PROJECT]-(c:child_object)
这应该更容易编写查询,但我不知道当我有一个具有潜在数百万关系的对象时可能会发生什么。MATCH (c:child_object {project-id:"A1B2C3"})
--这似乎是一种浪费性的解决方案,但我认为,在图形DB模型中,它的性能可能更好。如果我破坏了示例Cypher查询/ neo4j术语,请原谅。我把这个项目搁置了六个星期,我有点生疏了。
发布于 2017-11-13 18:23:22
如果有有限的数据集,则应考虑使用专用标签来指定数据源。在Neo4j的属性图数据模型中,允许节点具有多个标签。
MATCH (c:child_object:DataSourceA)
标签总是被索引,所以性能应该比你的建议1-3更好。我还认为这是一个更优雅的解决方案--但是,如果您不知道预先设置的数据数量,这将变得非常棘手。在后一种情况下,您可能会使用以下内容
MATCH (c:child_object)
WHERE 'DataSourceA' IN labels(c)
但是这更像是一个“全表扫描”,所以从性能上讲,您最好使用方法3并在project-id
上构建一个索引。
https://stackoverflow.com/questions/47270594
复制相似问题