我们如何在没有任何框架的情况下使用neoclient。因为我们没有使用laravel
或symphony
,即使我们没有使用这些框架。我们的后端是纯核心PHP编写的。
我的问题是,如果我们不使用任何框架用于核心目的,那么我们为什么要使用它们来使用dbms。
当我计算供应商文件夹的大小时,它是102 MB
。因此,单个请求将占用ram的很大一部分。
我的猜测是,在使用Neo-client时,将加载vendor文件夹中包含的所有文件。所以请纠正我,如果neoclient可以单独使用,我将非常乐意使用它,但请务必告诉使用Neo-Client没有依赖性的缺点。
答案 0 :(得分:3)
我是NeoClient的创建者和维护者。
简单回答有关依赖关系的问题:
它使用一些Symfony依赖项来实现非常灵活的配置管理,提供在没有代理的情况下在集群中工作的可能性,以及内置扩展的可能性。
这并不意味着它对任何框架都很紧张。
在开发模式下,客户端的boostrapping并未得到优化,在README中有详细说明如何在设置期间使用单个标志优化客户端。表演非常好,这是基准测试的结果:
使用结果格式化程序对没有缓存的客户端即时标记进行基准测试 启用,1000次运行在47.425533056259秒运行,使用8.5 MB 存储器
在启用缓存的基础上对客户端实例进行基准测试,1000次运行Runned 在0.068459987640381秒,使用8.5 MB内存
NeoClient目前在我所知道的20多家初创公司和企业中使用,现在由GraphAware(我工作的公司)提供企业支持。
另外,我创建了一个Bolt驱动程序(neo4j 3.0中的二进制协议)https://github.com/graphaware/neo4j-bolt-php,它将在NeoClient中实现(这需要一些工作,因为多协议不是我创建它时想到的)
另一方面,依赖的数量并不意味着它将实例化所有依赖项的所有对象,Guzzle用于其PSR-7支持和Curl抽象,如果您使用YAML提供配置并且所有服务都使用YAML在惰性模式下,这意味着内部使用的所有命令在被调用时都会真正加载到内存中。
答案 1 :(得分:1)
NeoClient仅使用Symfony框架的一部分。列表:
"require": {
"php": ">= 5.5",
"guzzlehttp/guzzle": "^6.0",
"monolog/monolog": "~1.1",
"symfony/yaml": "^2.7",
"symfony/config": "^2.7",
"symfony/dependency-injection": "^2.7",
"symfony/event-dispatcher": "^2.7",
"graphaware/neo4j-response-formatter": "^1.0"
},
此外 - 自动加载器(通常由作曲家提供)用于加载文件。这将仅加载运行时实际使用(包含/需要)的文件。因此,您最终不会在内存中使用100MB的PHP代码。
您运行测试(在memory_get_usage和memory_get_peak_usage的帮助下)来检查您的应用程序在有/没有NeoClient的情况下消耗了多少内存。
您可以查看this部分,找到php的替代驱动程序。
neo4jphp - 看起来很有希望。没有依赖关系:
"require": {
"php": ">=5.3.0",
"ext-curl": "*"
},
所以,这个库非常轻量级。
注意: Neo4j服务器只是带有JSON输出的REST API。您始终可以在项目中实现简单的库以满足您的需求。但不建议这样做,因为已经存在轻量级替代品。