我最近几天一直在读neo4j。我对是否需要使用REST API或者是否可以使用Java API感到非常困惑。
我需要创建数百万个节点,这些节点之间会有一些连接。我想在少数节点属性上添加索引以进行搜索。最初我开始使用带有Java API的GraphDB嵌入模式,但很快就通过几个节点上的索引到达OutOfMemory
所以我认为如果我的neo4j作为服务运行并且通过REST API连接到它会更好然后它会做所有内存管理本身都是通过将数据交换到底层文件来实现的。我的假设是对的吗?
此外,我计划将我的解决方案扩展到数十亿个节点,我相信单机的neo4j安装是不可能的。我也相信Neo4j具有在分布式模式下运行的能力。出于这个原因,我还认为继续使用REST API实现是最好的主意。 虽然我找不到任何关于如何在分布式环境中运行Neo4j的好文档。
我是否可以使用REST API执行批量插入等操作,我使用嵌入模式运行Graph DB的Java API?
答案 0 :(得分:2)
您知道为什么会收到OutOfMemory
例外情况吗?这听起来像是在同一个事务中创建所有这些节点,这会使它存在于内存中。尝试一次提交小块,以便Neo4j
可以将其写入磁盘。除了缓存等内容之外,您不必管理Neo4j的内存。
分布式模式采用主/从架构,因此您仍然可以在每个系统上拥有整个数据库的副本。 Neo4j对于磁盘存储非常有效,节点占用9个字节,关系占用33个字节,属性是可变的。
有一个批处理REST API,可以将多个调用组合到同一个HTTP调用中,但是如果嵌入这个调用,那么进行REST调用仍然会慢一些。
使用您未提及的REST API有一些缺点,这就像交易一样。如果您要进行原子操作,需要创建多个节点,关系,更改属性,并且如果任何步骤失败而未提交任何步骤,则无法在REST API中执行此操作。