【问题标题】:Neo4j bulk import and indexingNeo4j 批量导入和索引
【发布时间】:2017-06-05 08:58:12
【问题描述】:

我正在使用 neo4j-import 工具将一个大型数据集(远远超过 10m 节点)导入 neo4j。导入我的数据后,我对其运行了几个查询。其中一个查询执行得非常糟糕。我尽可能地优化了它(PROFILING、使用关系类型、为多核支持等等)。

仍然需要很长时间,所以我的想法是告诉 neo4j 通过使用 USING INDEX 子句从特定类型的节点开始。然后我可以检查我的数据库是如何变化的,并可能使它工作。不过现在我的数据库没有索引。

我想在写完所有需要的查询后创建索引,但似乎我需要开始使用它们了。

我想知道是否可以在批量导入过程中创建这些索引。这对我来说似乎是一个很好的解决方案。我该怎么做?

我还想知道是否可以真正编写一个语句,为我的每个节点上存在的属性创建索引(我们称之为“类型”)。

CREATE INDEX ON :(type);

不起作用(标签丢失但我想省略它)

【问题讨论】:

    标签: performance indexing import neo4j bulk-load


    【解决方案1】:

    索引位于标签 + 属性上。在导入之后和开始尝试优化查询之前,您需要索引。您的查询将用于查找起点的任何内容都应被编入索引(user_id、object_id 等),可能还有用于范围查询的任何日期或属性(modified_on、weight 等)。

    CREATE INDEX ON :Label(property)
    

    Cypher 查询是单线程的,所以我不知道您所说的多核支持是什么意思。你读到了什么,有链接吗?您可以多线程 Neo4j,但此时您必须手动执行。见https://maxdemarzi.com/2017/01/06/multi-threading-a-traversal/

    大多数情况下,查询可以通过索引或以不同方式表达来大大优化。但有时您需要重做模型以适应查询。请查看https://maxdemarzi.com/2015/08/26/modeling-airline-flights-in-neo4j/ 以获得一些提示。

    【讨论】:

    • 我可能应该重新考虑我的模型。我的 90% 的查询不按任何属性进行搜索,所以寻找起点可能不如我的效率高?我的节点也只有一个标签。在使用另一个标签时将该标签作为节点的属性导入可能是一个更好的主意。这样我就可以轻松索引所有内容。我所说的多核支持是 Michael Hunger 在有关导入的视频中提到的,您可以在这里找到:link
    猜你喜欢
    • 2013-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多