Neo4j 批量导入和索引
Neo4j bulk import and indexing
我正在使用 neo4j-import 工具将一个大数据集(远远超过 1000 万个节点)导入到 neo4j 中。导入我的数据后,我 运行 对其进行了多次查询。其中一个查询执行得非常糟糕。我尽可能地优化了它(PROFILING,使用关系类型,拆分多核 support 等等)。
仍然需要太长时间,所以我的想法是告诉 neo4j 通过使用 USING INDEX[=32= 从特定类型的节点开始] 条款。然后我可以检查我的数据库命中如何变化并可能使其工作。现在我的数据库没有索引。
我想在写完所有需要的查询后创建索引,不过看来我已经需要开始使用它们了。
我想知道我是否可以在批量导入过程中创建这些索引。这对我来说似乎是一个很好的解决方案。我该怎么做?
另外我想知道是否有可能真正编写一个 语句来为存在于我的每个节点 上的属性创建索引(我们称之为 "type").
CREATE INDEX ON :(type);
不起作用(标签丢失但我想省略它)
索引在标签 + 属性上。在导入之后和开始尝试优化查询之前,您需要立即建立索引。您的查询将用于查找起点的任何内容都应编入索引(user_id、object_id 等),并且可能还有用于范围查询的任何日期或属性(modified_on、权重等)。
CREATE INDEX ON :Label(property)
Cypher 查询是单线程的,所以我不知道您所说的 multi-core 支持是什么意思。你读到了什么,得到了 link?你可以 multi-thread Neo4j,但此时你必须手动完成。参见 https://maxdemarzi.com/2017/01/06/multi-threading-a-traversal/
大多数时候,查询可以通过索引或不同的表达方式得到极大的优化。但有时您需要重做模型以适应查询。查看 https://maxdemarzi.com/2015/08/26/modeling-airline-flights-in-neo4j/ 以获得一些提示。
我正在使用 neo4j-import 工具将一个大数据集(远远超过 1000 万个节点)导入到 neo4j 中。导入我的数据后,我 运行 对其进行了多次查询。其中一个查询执行得非常糟糕。我尽可能地优化了它(PROFILING,使用关系类型,拆分多核 support 等等)。
仍然需要太长时间,所以我的想法是告诉 neo4j 通过使用 USING INDEX[=32= 从特定类型的节点开始] 条款。然后我可以检查我的数据库命中如何变化并可能使其工作。现在我的数据库没有索引。
我想在写完所有需要的查询后创建索引,不过看来我已经需要开始使用它们了。
我想知道我是否可以在批量导入过程中创建这些索引。这对我来说似乎是一个很好的解决方案。我该怎么做?
另外我想知道是否有可能真正编写一个 语句来为存在于我的每个节点 上的属性创建索引(我们称之为 "type").
CREATE INDEX ON :(type);
不起作用(标签丢失但我想省略它)
索引在标签 + 属性上。在导入之后和开始尝试优化查询之前,您需要立即建立索引。您的查询将用于查找起点的任何内容都应编入索引(user_id、object_id 等),并且可能还有用于范围查询的任何日期或属性(modified_on、权重等)。
CREATE INDEX ON :Label(property)
Cypher 查询是单线程的,所以我不知道您所说的 multi-core 支持是什么意思。你读到了什么,得到了 link?你可以 multi-thread Neo4j,但此时你必须手动完成。参见 https://maxdemarzi.com/2017/01/06/multi-threading-a-traversal/
大多数时候,查询可以通过索引或不同的表达方式得到极大的优化。但有时您需要重做模型以适应查询。查看 https://maxdemarzi.com/2015/08/26/modeling-airline-flights-in-neo4j/ 以获得一些提示。