1

我有一个嵌入到 Java 应用程序的大约 50 万个数据集。我试图完成类似的事情:

1 - 执行好友之类的密码查询(“MATCH (n)-[r:rel*3]->(m) return n,r,m”) 2 - 对这些子集执行查询

这个想法就像 SQL 中的创建视图。我在谷歌小组上读到了这篇文章,这看起来像是我的担忧。

https://groups.google.com/forum/#!searchin/neo4j/sql$20view/neo4j/kFa8_ZJYzEM/0KuulGphrTYJ

您认为在第一次查询时将节点标记为某种标志是最佳选择吗?在性能方面,当我回忆起“标志”节点时,即使速度很快,我也会在整个数据集上重新运行查询,所以我猜它有点消耗。还有其他我忘记的 neo4j 功能吗?谢谢。

4

1 回答 1

1

用某种标志标记节点似乎不是一个很好的选择。您仍然需要查询具有特殊属性的节点,在这种情况下,为什么不重新发出创建视图的原始查询呢?

顺便说一句,应该保留一个选项——只需根据需要重新发出查询。副手,你有几个其他的选择:

  1. 在 java 层中实现一个遍历,封装/返回视图应该是什么,然后使用它。
  2. 您可以通过 create 语句向节点添加标签,而不是添加属性(您仍然必须查询具有“视图”标签的节点才能对“视图”执行任何操作)
  3. 创建一个特殊的索引节点。将其标记为“查看”。然后创建从该索引节点到视图中所有节点的关系(例如,VIEWNODE-[r:contains]->someObjectInView)。通过抓取该索引节点句柄并仅遍历 [r:contains],您可以快速“重新计算”视图。

最终,您选择的内容取决于您要对“视图”执行的查询类型。

于 2014-03-19T16:07:43.097 回答