我对我的应用程序的最佳解决方案有点困惑。正如我目前所见,我必须在neo4j独立(RestGraphDatabase)和EmbeddedGraphDatabase之间进行选择(RemoteGraphDatabase尚未用于生产用途)。
优点REST:
- >不同的服务可以访问neo4j DB(示例:我有一个服务负责A,B和C类节点。第二个服务负责节点D和H,可以将D节点连接到A节点)。通过这种方式,我有干净的域结构。每个服务仅负责其自己的域节点。我可以更新每个服务,而不必关闭我的整个应用程序。
- >我可以从不同的语言(PHP)访问neo4j数据库
缺点: - 性能不如EmbeddedGraphDatabase好(因为neo4j服务器和服务在同一台机器上,延迟不是那么大)。 - 没有交易
我的问题: 这是一个与独立服务器一起使用的好决定吗?或者我应该使用嵌入式服务并将服务混合成一个大的服务?是否可以在没有事务支持的情况下运行大型(复杂)应用程序?
答案 0 :(得分:9)
您确定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服务器并使用批处理或服务器插件。
答案 1 :(得分:7)
这完全取决于您的用例。你已经列出了一些专业人士和骗子。
服务器的另一个专业人员是web-admin / visualization。
您还有更多选择。您可以拥有嵌入式graphdb以实现高性能,并且只有一些嵌入式服务,并使用自定义的,以域为中心的远程(REST或其他)API来为其他服务公开图形数据库。
使用Neo4j服务器可以实现同样的效果,并添加一些性能更为关键的服务Server-Plugins或Extensions,这些服务也能够公开适合您用例的自定义远程API可能更好。
我会开始使用嵌入式图形数据库来开发您的服务,如果您想稍后将某些端点暴露给其他服务,可以很容易地切换到Neo4j服务器。
在REST-API中,每个请求都有一个事务,对于较大的操作,API中有batch operation。