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