2

How can we use neoclient without any framework .Because we are not using laravel or symphony even we are using nothing like these frameworks.Our backend is written pure core PHP. Simply my question is that if we are not using any framework for core purposes then why should we use them to just use a dbms .

When i calculated the size of vendor folder it was of 102 MB. So a single request will use up a large part of ram. Its my guess that while using Neo-client the all files contained in vendor folder will be loaded. so please correct me and if neoclient can be used separately I will be very happy to use that, but please must tell what will be the cons of using Neo-Client without dependencies.

4

2 回答 2

3

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

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

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

  2. 这并不意味着它对任何框架都是紧密的。

  3. 在开发模式下,客户端的提升肯定不会优化,README 中有详细说明如何在设置期间使用单个标志优化客户端。性能真的很好,这里是基准测试的结果:

在没有缓存的情况下对客户端实例进行基准测试,启用结果格式化程序,运行 1000 次运行时间为 47.425533056259 秒,使用 8.5 mb 内存

启用缓存的基准测试客户端安装,1000 次运行运行时间为 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 ,这意味着所有内部使用的命令在调用时都会真正加载到内存中。

于 2015-10-02T12:30:51.857 回答
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"
},

此外 - 自动加载器(通常由 composer 提供)用于加载文件。这将仅加载运行时实际使用(包含/必需)的文件。因此,您不会在内存中得到 100MB 的 PHP 代码。

您运行测试(在 memory_get_usage 和 memory_get_peak_usage 的帮助下检查有/没有 NeoClient 的应用程序消耗了多少内存。

备择方案

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

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

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

所以,这个库是相当轻量级的。


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

于 2015-10-02T09:39:16.197 回答