使用没有依赖关系的 neoxygen php neoclient

using neoxygen php neoclient without dependencies

我们如何在没有任何框架的情况下使用 neoclient。因为我们没有使用 laravelsymphony 甚至我们都没有使用这些 frameworks.Our 后端是纯核心编写的 PHP. 简单地说,我的问题是,如果我们没有将任何框架用于核心目的,那么我们为什么要使用它们来使用 dbms 。

当我计算供应商文件夹的大小时,它是 102 MB。所以单个请求会占用很大一部分ram。 我的猜测是,在使用 Neo-client 时,vendor 文件夹中包含的所有文件都将被加载。所以请纠正我,如果 neoclient 可以单独使用我会很乐意使用它,但请必须告诉我使用没有依赖项的 Neo-Client 的缺点是什么。

NeoClient

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"
},

此外 - 自动加载器(通常由 composer 提供)用于加载文件。这将仅在 运行 时间内加载实际使用的文件 (included/required)。所以,你不会在内存中得到 100MB PHP 代码。

您 运行 测试(在 memory_get_usage and memory_get_peak_usage 的帮助下)以检查您的应用程序 with/without NeoClient 消耗了多少内存。

备选方案

您可以查看 this 部分以查找 php 的替代驱动程序。

neo4jphp - 看起来很有希望。零依赖项:

"require": {
  "php": ">=5.3.0",
  "ext-curl": "*"
},

所以,这个库非常轻量级。


注意: Neo4j 服务器只是具有 JSON 输出的 REST API。您始终可以在项目中根据需要实现简单的库。但不推荐,因为已经有轻量级的替代品了。

我是 NeoClient 的创建者和维护者。

简单回答您关于依赖关系的问题:

  1. 它使用一些 Symfony 依赖项来实现真正灵活的配置管理,提供了在没有代理的情况下在集群中工作的可能性,也提供了内置扩展的可能性。

  2. 并不意味着它对任何框架都是严格的。

  3. 在开发模式下,客户端的 boostrapping 肯定没有优化,README 中有关于如何在设置过程中使用单个标志优化客户端的详细信息。性能真的非常好,这里是基准测试的结果:

Benchmarking client instantation without cache, with result formatter enabled, 1000 runs Runned in 47.425533056259 seconds, using 8.5 mb memory

Benchmarking client instatation with cache enabled, 1000 runs Runned in 0.068459987640381 seconds, using 8.5 mb memory

NeoClient 目前在我所知道的 20 多家初创公司和企业中使用,现在由 GraphAware(我工作的公司)提供企业支持。

此外,我创建了一个 Bolt 驱动程序(neo4j 3.0 中的二进制协议)https://github.com/graphaware/neo4j-bolt-php 它将在 NeoClient 中实现(这需要一些工作,因为我在创建时没有想到多协议)它)

另一方面,依赖的数量并不意味着它会实例化所有依赖的所有对象,Guzzle用于其PSR-7支持和Curl抽象,如果您提供YAML和所有配置,则使用YAML服务处于惰性模式,这意味着所有内部使用的命令在调用时都会真正加载到内存中。