2011-11-22 78 views
12

对于我的应用程序的最佳解决方案,我有点困惑。正如我迄今为止所看到的,我必须在neo4j独立版(RestGraphDatabase)和EmbeddedGraphDatabase(RemoteGraphDatabase尚未用于生产用途)之间进行选择。Neo4j服务器与嵌入式

优点REST:

- >不同的服务可以访问的Neo4j DB(样品:我有一个服务,负责种A的节点,B和C的第二服务负责节点d和H并可以将D节点连接到A节点)。这样我就有了干净的域名结构。每个服务只负责其自己的域节点。我可以更新每个服务,不必关闭我的整个应用程序。

- >我可以访问不同语言(PHP)

缺点的Neo4j的DB: - 性能是不是作为一个EmbeddedGraphDatabase好(因为Neo4j的服务器和服务都在同一台机器上的延迟不那么大)。 - 没有交易

我的问题: 这是一个很好的决定去独立的服务器?或者,我应该使用嵌入式服务,并将服务混合成一个大型服务?是否可以在没有事务支持的情况下运行大型(复杂)应用程序?

回答

8

您说得对,REST服务器的性能会更低。但是,您可以使用批处理操作来处理与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服务器并利用批处理或服务器插件。

+0

我想补充一点,REST-API(用两个Python库进行测试)对于大数据集(我们导入10 GB,因此甚至不是一个真正庞大的数据集)有严重的性能问题。我们使用了批量导入程序,但经过一定限制后,服务器几乎被阻塞。 有关于该问题的公开讨论,但我还没有意识到解决方案。 一般来说,我会建议所有繁重的嵌入式设置。 – Bouncner

+0

@Bouncner三年之后,你知道这是否仍然如此?大约与您同时我们也注意到这个性能问题,但自那以后就没有用过。 –

6

这一切都取决于您的使用情况。你已经列出了一些专业和专业的。

另一个服务器专业版是网络管理员/可视化。

您有更多选择。您可以拥有嵌入式graphdb以实现高性能,并且只有一些服务可以嵌入式运行,并使用定制的,以域为中心的远程(REST或其他)API来将图形数据库公开为其他服务。

同样可以通过使用Neo4j的服务器,并添加了一些为Server-PluginsExtensions越性能的关键服务,也能暴露出一个适合您的使用情况可能会更好的自定义远程API来实现。

我会开始使用嵌入式图形数据库来开发您的服务,如果您希望以后将某些端点公开给其他服务,那么切换到Neo4j服务器是相当容易的。

在REST-API中,每个请求有一个事务,对于较大的操作,API中有一个batch operation