最近几天我一直在阅读有关 neo4j 的内容。我非常困惑是否需要使用 REST API 还是可以使用 Java API。
我的需要是创建数百万个节点,它们之间有某种连接。我想在一些节点属性上添加索引以进行搜索。最初,我从使用 Java API 的 GraphDB 嵌入式模式开始,但很快就在少数节点上建立了索引,从而达到了
OutOfMemory
,所以我认为如果我的 neo4j 作为服务运行并通过 REST API 连接到它,那就更好了它将通过将数据换入/换出到底层文件来自行完成所有内存管理。我的假设正确吗?此外,我计划将我的解决方案扩展到数十亿个节点,我相信这通过单台机器的 neo4j 安装是不可能实现的。我也相信 Neo4j 具有以分布式模式运行的能力。出于这个原因,我认为继续实现 REST API 是最好的主意。 虽然我找不到任何关于如何在分布式环境中运行 Neo4j 的好的文档。
我是否也可以使用 REST API 执行批量插入等操作(我使用 Java API 并在嵌入式模式下运行 Graph DB)?
最佳答案
您知道为什么会出现
OutOfMemory
异常吗?这听起来像是您在同一事务中创建所有这些节点,这导致它存在于内存中。尝试一次提交小块,以便 Neo4j 可以将其写入磁盘。除了缓存之类的东西之外,您不必管理 Neo4j 的内存。分布式模式采用主/从架构,因此您仍然可以在每个系统上拥有整个数据库的副本。 Neo4j 对于磁盘存储非常高效,节点占用 9 字节,关系占用 33 字节,属性是可变的。
有一个批量 REST API,它将许多调用分组到同一个 HTTP 调用中,但是,如果嵌入它,则进行 REST 调用仍然会慢一些。
使用 REST API 有一些您没有提到的缺点,比如事务。如果您要执行原子操作,需要创建多个节点、关系、更改属性,并且如果任何步骤失败则不提交任何操作,则无法在 REST API 中执行此操作。
关于java - REST API 或 Java API 之间的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14812765/