php - 使用带有副本集的 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 驱动程序有什么问题?
解决方案
我遇到了完全相同的情况,在我们的案例中,这是因为 PHP 客户端无法联系到仲裁者,即使我们没有在任何地方提及它。通过向我们的客户打开仲裁器上的防火墙,我们解决了这个问题。
推荐阅读
- java - 使用 servlet 上下文从 Spring Boot 应用程序获取资源的路径
- javascript - 异步操作完成后如何退出节点脚本?
- applescript - 从处理应用程序的 finder 中轮询选择
- amazon-web-services - 用于自动扩展的 AWS Codestar 设置 Beanstalk 策略错误
- php - 从重复的 Wordpress 元框创建和显示内容
- android - 即使应用程序在前台运行,onNotificationPosted 方法也不会被调用
- python - Python:虽然不是异常
- assembly - 源和目标的大小必须相同 (8086)
- c - C - 使用数组打印从 1 到 100 的所有素数
- java - 使用 Java 客户端检测 Prometheus 指标