Neo4j 服务器与嵌入式数据库的区别

13

我有些困惑,不知道哪种方法对我的应用程序最好。目前为止,我需要在neo4j独立模式(RestGraphDatabase)和嵌入模式(EmbeddedGraphDatabase)之间进行选择(RemoteGraphDatabase尚未能够用于生产)。

REST的优点:

-> 不同的服务可以访问neo4j数据库(例如:我有一个服务负责A、B和C类型的节点,第二个服务负责D和H类型的节点,可以连接D节点到A节点)。通过这种方式,我可以拥有干净的领域结构。每个服务只负责其自己的领域节点。我可以更新每个服务,而不必关闭整个应用程序。

-> 我可以使用不同的语言(如PHP)访问neo4j数据库

缺点: - 性能不如嵌入式图形数据库(因为neo4j服务器和服务在同一台机器上,延迟不那么大)。 - 没有事务支持

我的问题是: 选择独立服务器是一个好决定吗?还是应该使用嵌入式服务器并将服务混合成一个大型服务?可能在没有事务支持的情况下运行大型(复杂)应用程序吗?

2个回答

9
您说得对,使用REST服务器将会降低性能。但是,您可以使用批量操作来实现类似于事务的功能;请参阅http://docs.neo4j.org/chunked/milestone/rest-api-batch-ops.html。您还可以构建特定于领域的服务器插件,在服务器端执行您的事务逻辑:http://docs.neo4j.org/chunked/milestone/server-extending.html
如果您的架构要求您能够从多个客户端访问数据库,则您唯一的选择是REST服务器或Neo4j HA(高可用性)。HA仅在具有Neo4j Enterprise许可证的情况下提供。
让应用程序架构确定使用哪些工具,而不是相反。如果您已经决定您的应用程序最好作为单独的服务,那么就不要将它们合并成一个服务来支持底层持久性模型。我不了解您的应用程序,但根据您的描述,我会选择REST服务器并利用批处理或服务器插件。

我想补充一下,REST-API(使用两个Python库进行测试)在处理大数据集时存在严重的性能问题(我们正在导入10 GB的数据集,所以并不是非常庞大的数据集)。我们使用了批量导入器,但是在某个限制之后,服务器几乎会被阻塞。 关于这个问题有公开讨论,但我还不知道解决方案。总的来说,我建议对于所有繁重的工作都使用嵌入式设置。 - Bouncner
@Bouncner 三年过去了,你知道现在是否仍然存在这个问题吗?大约在你们发现这个性能问题的同时,我们也注意到了,但自那以后就没有再使用它了。 - Spencer Kormos

7
这完全取决于您的用例。您已经列出了一些优点和缺点。
服务器的另一个优点是Web管理/可视化。
您还有更多选项。您可以拥有嵌入式图形数据库以获得高性能,并仅运行某些服务,然后使用自定义的、面向域的远程(REST或其他)API来公开图形数据库以供其他服务使用。
通过使用Neo4j Server并添加一些更加关键的性能服务,例如Server-PluginsExtensions,也可以实现相同的功能,它们还能够公开适合您用例的自定义远程API。
如果您想将某些端点公开给其他服务,则可以开始使用嵌入式图形数据库来开发您的服务,这样很容易切换到Neo4j服务器。
在REST-API中,每个请求有一个事务,对于较大的操作,API中有一个批量操作

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接