java - REST API 或 Java API 之间的选择

标签 java api rest scalability neo4j

最近几天我一直在阅读有关 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)?

最佳答案

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

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

  3. 有一个批量 REST API,它将许多调用分组到同一个 HTTP 调用中,但是,如果嵌入它,则进行 REST 调用仍然会慢一些。

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

关于java - REST API 或 Java API 之间的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14812765/

相关文章:

rest - 如何使用 REST API 将文件和附件上传到 sobject 记录?

javascript - PouchDb - 删除文档中的对象

java - 使用 Retrofit 将 id 的 int 值转换为 String 时找不到资源

java - Jasper 报告不适用于 docker 容器中的服务器(Spring Boot Java 应用程序)

java - Spring security loadByUsername 的用户名字段为空

C# Evernote API 方法 ENSession.SharedSession.FindNotes() 不再正常工作

java - HTTP基本认证而不是TLS客户端认证

java - Restful Web 服务 Struts 2

java - 定义shouldOverrideUrlLoading以在所需应用程序中加载URL?

java - Eclipse Step Over 未按预期工作 - Tomcat Web 应用程序调试