首页 > 解决方案 > 使用带有副本集的 PHP mongodb 驱动程序从 MongoDB 读取时速度慢

问题描述

因此,当我连接到具有多个主机的 MongoDB 时,执行命令时每隔一分钟就会出现延迟。延迟时间正好是 10 秒。我知道这听起来很奇怪。

首先我认为问题与MongoDB服务器配置有关。但它只发生在我使用 PHP mongodb 驱动程序时,因为当我使用 Java mongodb 驱动程序测试时它工作正常。- MongoDB 服务器:3.6 - PHP mongodb 驱动程序:1.5.3 - Java mongodb 驱动程序:3.10.1

我还用同样的问题测试了旧版本的 PHP mongodb 驱动程序。

PHP

// start tracking reading time
$start = microtime(true);

$m = new \MongoDB\Client('mongodb://rs1.host.com,rs2.host.com');
$db = $m->selectDatabase('test');
// slow when querying
$db->selectCollection('user')->findOne();

// end tracking reading time
$end = microtime(true);
$duration = $end - $start;

完整源代码:https ://drive.google.com/open?id=1r-EKiCntZbUq59sFzaBOiCrfy0tzjadt

爪哇

Date date1 = new Date();
long start = date1.getTime();

MongoClient mongoClient = MongoClients.create("mongodb://rs1.host.com,rs2.host.com");
MongoDatabase db = mongoClient.getDatabase("ple");

db.getCollection("user").find().first();

Date date2 = new Date();
long end = date2.getTime();

System.out.println((end - start) + "ms");

完整源代码:https ://drive.google.com/open?id=1TYTFrRxUiQUZdIUJdetllHpnOYHQiepd

我每 2 秒重复一次上面的脚本,所以这是我测试的结果:

PHP

0.013s
0.0056s
0.0135s
0.0052s
10.0271s (54sec from last delay)
0.0057s
0.0059s
0.0122s
0.0108s
0.0106s
0.0133s
0.014s
0.0095s
0.0076s
0.0145s
0.0102s
0.0148s
0.0058s
0.0132s
0.0125s
0.0134s
0.0056s
0.0055s
0.0135s
0.0124s
0.0116s
0.013s
0.013s
0.0139s
0.0135s
0.0132s
10.0234s (52sec from last delay)
0.0125s
0.0128s
0.0168s
0.0121s
0.0131s
0.0134s
0.0141s
0.0128s
0.0128s
0.0123s
0.0131s
0.0156s
0.006s
0.0053s
0.0058s
0.0136s
0.0131s
0.0139s
0.0131s
0.0063s
0.0125s
0.0127s
0.013s
0.0061s
0.0058s
10.015s (52sec from last delay)
0.0071s
0.0144s

爪哇

16ms
17ms
17ms
16ms
19ms
17ms
16ms
17ms
16ms
17ms
17ms
16ms
17ms
16ms
16ms
16ms
16ms
17ms
16ms
15ms
17ms
17ms
15ms
17ms
16ms
17ms
16ms
15ms
16ms
17ms
15ms
17ms
16ms
16ms
14ms
18ms
16ms
15ms
17ms
16ms
15ms
17ms
17ms
16ms
16ms
17ms
16ms
20ms
16ms
16ms
19ms
15ms
15ms
17ms
16ms
16ms
16ms
15ms
15ms
17ms
16ms
17ms
16ms
15ms
16ms
18ms
15ms
17ms
18ms
15ms
15ms
17ms
16ms
16ms
16ms
15ms
16ms
16ms
17ms
16ms
17ms
17ms
15ms
16ms
16ms
14ms
16ms
17ms
16ms
15ms
17ms
17ms
15ms

有谁知道 PHP mongodb 驱动程序有什么问题?

标签: phpmongodb

解决方案


我遇到了完全相同的情况,在我们的案例中,这是因为 PHP 客户端无法联系到仲裁者,即使我们没有在任何地方提及它。通过向我们的客户打开仲裁器上的防火墙,我们解决了这个问题。


推荐阅读