如何解决缓慢的MongoDB插入
我有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)及其几乎相同。
-
都具有标准的SSD。
-
MongoDB版本相同。
-
都具有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';
有人可以告诉我我在这里想念什么吗?
谢谢!
解决方法
将第一个插入片段与其他插入片段分开计时。
客户端执行拓扑发现并需要建立连接才能发出任何请求。这是在后台发生的,但实际上会使第一次操作的时间更长。
如果要测试吞吐量,则需要执行至少一个要测试类型的操作才能完成此初始工作,以免影响结果。因此,请执行一次插入操作(不定时),然后在同一客户端上对接下来的100000次插入操作进行计时。
如果要测试初始连接时间,请对单个插入进行计时。
如果想要高性能,则应该使用批量写入,而不是单独插入每个文档。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。