2

最近几天我一直在阅读有关 Neo4j 的信息。我对是否需要使用 REST API 或者是否可以使用 Java API 感到非常困惑。

  1. 我的需要是创建数百万个节点,它们之间会有一些联系。我想在几个节点属性上添加索引以进行搜索。最初我从带有 Java API 的嵌入式 GraphDB 模式开始,但很快就OutOfMemory在几个节点上建立了索引,所以我认为如果我的 neo4j 作为服务运行并通过 REST API 连接到它会更好,然后它会自行完成所有内存管理通过将数据换入/换出基础文件。我的假设对吗?

  2. 此外,我计划将我的解决方案扩展到数十亿个节点,我相信单台机器的 neo4j 安装是不可能的。我也相信 Neo4j 有能力在分布式模式下运行。出于这个原因,我也认为继续 REST API 实现是最好的主意。虽然我找不到任何关于如何在分布式环境中运行 Neo4j 的好文档。

  3. 我是否也可以使用 REST API 来执行批量插入等操作,我可以使用 Java API 以及在嵌入式模式下运行的 Graph DB 来执行这些操作?

4

1 回答 1

2
  1. 你知道为什么你会得到你的OutOfMemory例外吗?这听起来就像您在同一个事务中创建所有这些节点,这导致它存在于内存中。尝试一次提交小块,以便Neo4j可以将其写入磁盘。除了缓存之类的东西,您不必管理 Neo4j 的内存。

  2. 分布式模式采用主/从架构,因此您仍将在每个系统上拥有整个数据库的副本。Neo4j 对于磁盘存储非常有效,一个节点占用 9 个字节,关系占用 33 个字节,属性是可变的。

  3. 有一个批处理 REST API,它将许多调用组合到同一个 HTTP 调用中,但是如果嵌入,进行 REST 调用仍然较慢。

使用您没有提到的 REST API 有一些缺点,这就是事务之类的东西。如果您要执行原子操作,您需要创建多个节点、关系、更改属性,并且如果任何步骤失败不提交任何步骤,则无法在 REST API 中执行此操作。

于 2013-02-11T16:21:19.333 回答