【问题标题】:Slow MongoDB insertion缓慢的 MongoDB 插入
【发布时间】:2020-12-05 00:06:12
【问题描述】:

我有 2 台服务器,一台 AWS 和一台 Microsoft azure VM,它们都是 8 核 32 GB。

我在两台服务器上都使用以下脚本来检查 MongoDB 中的插入速度。 在 AWS 实例上,我使用 localhost 和 LAN IP 平均得到 3 秒。 在 Microsoft azure 上,我用 localhost 得到 3 秒,但在 LAN IP 上得到 30 秒。 我检查了两台服务器上的网络速度(大约 1.73 Gbits/sec),几乎相同。

  1. 两者都有标准 SSD。

  2. MongoDB 版本相同。

  3. 两者都有wiredTiger存储引擎。

唯一的区别是 Azure 应用程序在负载均衡器上,而 AWS 应用程序不在。

if($_REQUEST['mongo']=='localserver'){
    $mongoip        =   "localhost";
}elseif($_REQUEST['mongo']=='mongoserver'){
    $mongoip        =   "x.x.x.x";/* LAN IP of dedicated mongo server */
}
$a              =   "mongo_speed_check";
$mongo_dbname   =   "speed";
try {
    $maa        =   new MongoClient("mongodb://{$mongoip}/{$mongo_dbname}");
    $dbnew1     =   $maa->selectDB($mongo_dbname);
} catch ( MongoConnectionException $e ) {
    print_r($e);
}
$time_start     =   microtime(true);
for ($i = 0; $i < 10000; $i++){
    $dbnew1->$a->insert(array('i' =>$i,"field{$i}" => $i * 2));
}
$time_end           =   microtime(true);
$execution_time     =   ($time_end - $time_start);
echo '<br><b>Total Execution Time:</b> '.$execution_time.' seconds';

有人可以告诉我我在这里缺少什么吗?

谢谢!

【问题讨论】:

  • 将第一个插入与其他插入分开计时。

标签: mongodb azure php-5.6 azure-load-balancer


【解决方案1】:

将第一个插入与其他插入分开计时。

客户端执行拓扑发现,需要建立连接才能发出任何请求。这发生在后台,但实际上会使第一次操作更长。

如果您正在测试吞吐量,您需要执行至少一项您正在测试的类型的操作,以完成这项初始工作,以免结果出现偏差。因此,执行一次插入(不定时),然后在同一客户端上对下 100000 次插入进行计时。

如果您正在测试初始连接时间,请计算一次插入时间。

如果您想要高性能,您应该使用批量写入而不是单独插入每个文档。

【讨论】:

  • 感谢您的回答。但它如何在 AWS 上正常工作?
  • 它是什么,什么是好的?
  • 在 AWS 服务器上,10000 次插入的时间不到 3 秒。
  • 这看起来很正常。
猜你喜欢
  • 2010-11-24
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多