使用neoxygen php neoclient无依赖关系

时间:2015-10-02 08:55:50

标签: php neo4j cypher neoxygen

我们如何在没有任何框架的情况下使用neoclient。因为我们没有使用laravelsymphony,即使我们没有使用这些框架。我们的后端是纯核心PHP编写的。 我的问题是,如果我们不使用任何框架用于核心目的,那么我们为什么要使用它们来使用dbms。

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

2 个答案:

答案 0 :(得分:3)

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

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

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

  2. 这并不意味着它对任何框架都很紧张。

  3. 在开发模式下,客户端的boostrapping并未得到优化,在README中有详细说明如何在设置期间使用单个标志优化客户端。表演非常好,这是基准测试的结果:

  4.   

    使用结果格式化程序对没有缓存的客户端即时标记进行基准测试   启用,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

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_usagememory_get_peak_usage的帮助下)来检查您的应用程序在有/没有NeoClient的情况下消耗了多少内存。

替代

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

neo4jphp - 看起来很有希望。没有依赖关系:

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

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

注意: Neo4j服务器只是带有JSON输出的REST API。您始终可以在项目中实现简单的库以满足您的需求。但不建议这样做,因为已经存在轻量级替代品。