对于一个项目,我正在使用PHP的新MongoDB驱动程序(参见:https://docs.mongodb.com/php-library/master/),而不是旧版本。
我们将PHP 7作为FPM运行。
我最近使用XDEBUG进行了一些分析,并意识到第一个数据库查询明显慢于第二个数据库查询,例如
Session::validate -> Account::find 38ms
getProfile -> Account::find 2ms
Account::find
执行查询以通过其_id
获取一个文档,并且两个调用都会查找不同的文档。
我出现的两个问题
答案 0 :(得分:1)
github上的某个人向我指出this网站,所以我现在可以回答我自己的问题了。引用:
自1.2.0以来,驱动程序的所有版本都在PHP工作进程中保留»libmongoc客户端对象,这允许它跨多个请求重用数据库连接,身份验证状态和拓扑信息。
可是:
1.2.0之前的PHP驱动程序版本利用PHP的Streams API进行数据库连接,使用»libmongoc中的API指定套接字通信的自定义处理程序;但是,为每个MongoDB \ Driver \ Manager创建一个新的libmongoc客户端。因此,驱动程序会保留单个数据库连接,但不会保留身份验证状态或拓扑信息。这意味着驱动程序需要在每个请求开始时发出命令以进行身份验证并»发现服务器拓扑。
由于最新的稳定驱动程序版本在写入时为1.1.9,因此不会保留身份验证信息。但是,您可以升级到1.2.0 alpha版本,这可以严重加快连接过程,正如我在系统上的一些测试中发现的那样。目前有一些已知的1.2.0 alpha版本的bug,所以我现在将坚持使用较慢的1.1.9。
这种反应很快就会过时......