蒙戈更新插入性能(C++)

mongo upsert performance (C++)

本文关键字:C++ 性能 插入 更新      更新时间:2023-10-16

我正在编写一个C++客户端,该客户端处理具有1M行的文件并将它们插入mongodb。数据入到遵循不同累积标准的 6 个不同表中。我将 5000 行(可配置)的数据累积在C++图中,然后将 (upsert) 插入 (upsert) 到 mongodb 中,冲洗并重复直到文件末尾。

其中一个更新插入的代码是:

void Upsert(mongo::DBClientConnection & cmon)
{
map<KEY, VALUE>::const_iterator it;
cmon.ensureIndex("test.WebNavigationUri", BSON("ClientId" << 1 << "Uri" << 1 << "Date" << 1), true);
for (it=detail.begin(); it!=detail.end(); ++it)
{
cmon.update("test.WebNavigationUri",
BSON("ClientId" << it->first.clientid << "Uri" << it->first.uri << "Date" << it->second.dHora),
BSON("$inc" << BSON("Time" << it->second.time)),
true);
}
}

除了存储的信息外,其他更新插入是相同的。 我的问题是,如果我只使用 2 个表,时间相当快(比 MySql 快 4-8 倍),但如果我使用所有 6 个表,性能会下降。

有2张桌子:

网络累积类别:6877ms261749项;1465毫秒 (1465+ 0 + 0 + 0)。

WebAccumulationClientId: 5005ms 0 items; 0ms (

0 + 0 + 0 + 0)。WebAccumulationPolicy: 5115ms 0 个项目; 0ms (

0 + 0 + 0 + 0)。WebAccumulationVirusName: 0ms 0 个项目; 0ms (

0 + 0 + 0 + 0)。网页导航类别: 5442ms 0 项; 0ms (

0 + 0 + 0 + 0)。网页导航 URI: 9493ms414610项;3666毫秒 (3666+ 0 + 0 + 0)。

有 6 个表(相同的文件,表已删除):

网络累积类别:6605ms261749项;1421毫秒 (1421+ 0 + 0 + 0)

WebAccumulationClientId: 5367ms 172873 个项目;1753ms (1753 + 0 + 0 + 0)

WebAccumulationPolicy: 6187ms 174941 个项目; 2086ms (2086 + 0 + 0 + 0)

WebAccumulationVirus名称: 12ms 52 个项目; 0ms (0 + 0 + 0 + 0)

网页导航类别: 18745ms 258072 项; 14510ms (14510 + 0 + 0 + 0)

网页导航 URI: 33046ms414610项;27317毫秒 (27317+ 0 + 0 + 0)

时间在程序中测量

boost::posix_time::microsec_clock::local_time();

我在Oracle Server 6.5机器中使用mongodb 2.4.9。该程序使用C++驱动程序并在同一台计算机上运行。

正如你所看到的,当我在其他 4 个表中更新插入时,WebNavigationUri 从 3666ms 变为 27317ms,但 WebAccumulationCategory 的时间保持不变。表格和/或我制作更新插入的顺序之间似乎存在某种交互。 任何想法为什么会发生这种性能损失?我可以在数据库中查找/监视什么?

蒙戈斯塔特 说:

insert  query update delete getmore command flushes mapped  vsize    res faults  locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time  
*0     *0     *0     *0       0     1|0       0   544m  1.42g   247m      0  test:0.0%          0       0|0     0|0    62b     3k     6   12:09:59  
3     *0   2696     *0       0     1|0       0   544m  1.42g   254m      4 test:23.5%          0       0|0     0|0   583k     3k     6   12:10:00  
3     *0  10635     *0       0     2|0       0   544m  1.42g   248m      3 test:80.3%          0       0|0     0|1     2m     3k     6   12:10:01  
*0     *0  13151     *0       0     1|0       0   544m  1.42g   252m      0 test:80.9%          0       0|0     0|1     2m     3k     6   12:10:02  
*0     *0  13089     *0       0     1|0       0   544m  1.42g   253m      0 test:81.7%          0       0|0     0|1     2m     3k     6   12:10:03  
*0     *0  13567     *0       0     1|0       0   544m  1.42g   250m      0 test:81.5%          0       0|0     0|1     2m     3k     6   12:10:04  
*0     *0  13636     *0       0     1|0       0   544m  1.42g   248m      0 test:81.2%          0       0|0     0|1     2m     3k     6   12:10:05  
*0     *0  13417     *0       0     2|0       0   544m  1.42g   255m      0 test:78.9%          0       0|0     0|1     2m     3k     6   12:10:06  
*0     *0  13759     *0       0     1|0       0   544m  1.42g   256m      0 test:81.0%          0       0|0     0|1     2m     3k     6   12:10:07  
*0     *0  13556     *0       0     1|0       0   544m  1.42g   257m      0 test:80.9%          0       0|0     0|1     2m     3k     6   12:10:08  
insert  query update delete getmore command flushes mapped  vsize    res faults  locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time  
*0     *0  13821     *0       0     1|0       0   544m  1.42g   257m      0 test:81.0%          0       0|0     0|1     2m     3k     6   12:10:09  
*0     *0  13932     *0       0     1|0       0   544m  1.42g   258m      0 test:81.0%          0       0|0     0|1     2m     3k     6   12:10:10  
*0     *0  13460     *0       0     2|0       0   544m  1.42g   258m      0 test:81.0%          0       0|0     0|1     2m     3k     6   12:10:11  
*0     *0  13823     *0       0     1|0       0   544m  1.42g   256m      0 test:80.8%          0       0|0     0|1     2m     3k     6   12:10:12  
*0     *0  13811     *0       0     1|0       0   544m  1.42g   253m      0 test:80.3%          0       0|0     0|1     2m     3k     6   12:10:13  
*0     *0  13794     *0       0     1|0       0   544m  1.42g   251m      0 test:81.2%          0       0|0     0|1     2m     3k     6   12:10:14  
*0     *0  13605     *0       0     1|0       0   544m  1.42g   247m      0 test:79.6%          0       0|1     0|1     2m     3k     6   12:10:15  
*0     *0  13403     *0       0     2|0       0   544m  1.42g   261m      0 test:79.0%          0       0|0     0|1     2m     3k     6   12:10:16  
*0     *0  13781     *0       0     1|0       0   544m  1.42g   261m      0 test:81.2%          0       0|0     0|0     2m     3k     6   12:10:17  
*0     *0  13824     *0       0     1|0       0   544m  1.42g   262m      0 test:80.6%          0       0|0     0|1     2m     3k     6   12:10:18  
insert  query update delete getmore command flushes mapped  vsize    res faults  locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time  
*0     *0  13954     *0       0     1|0       0   544m  1.42g   262m      0 test:81.0%          0       0|0     0|1     2m     3k     6   12:10:19  
*0     *0  13873     *0       0     2|0       0   544m  1.42g   262m      0 test:81.3%          0       0|0     0|1     2m     3k     6   12:10:20  
*0     *0  13416     *0       0     2|0       0   544m  1.42g   261m      0 test:79.4%          0       0|0     0|1     2m     3k     6   12:10:21  
*0     *0  13840     *0       0     1|0       0   544m  1.42g   261m      0 test:81.2%          0       0|0     0|1     2m     3k     6   12:10:22  
*0      1  13657     *0       0    13|0       0   544m  1.42g   259m      0 test:80.4%          0       0|0     0|1     2m    11k     6   12:10:23  
*0     *0  12566     *0       0     1|0       0   544m  1.42g   259m      0 test:75.5%          0       0|0     0|1     2m     3k     6   12:10:24  
*0     *0  13777     *0       0     1|0       0   544m  1.42g   251m      0 test:80.4%          0       0|0     0|1     2m     3k     6   12:10:25  
*0     *0  13148     *0       0     2|0       0   544m  1.42g   265m      0 test:77.6%          0       0|0     0|1     2m     3k     6   12:10:26  
*0     *0  13691     *0       0     1|0       0   544m  1.42g   265m      0 test:80.7%          0       0|0     0|1     2m     3k     6   12:10:27  
*0     *0  13633     *0       0     1|0       0   544m  1.42g   265m      0 test:80.2%          0       0|0     0|0     2m     3k     6   12:10:28  
insert  query update delete getmore command flushes mapped  vsize    res faults  locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time  
*0     *0  13538     *0       0     1|0       0   544m  1.42g   265m      0 test:80.7%          0       0|0     0|1     2m     3k     6   12:10:29  
*0     *0  13773     *0       0     1|0       0   544m  1.42g   265m      0 test:80.4%          0       0|0     0|1     2m     3k     6   12:10:30  
*0     *0   9118     *0       0     2|0       0   544m  1.42g   263m      0 test:52.9%          0       0|0     0|1     1m     3k     6   12:10:31  
*0     *0  11894     *0       0     1|0       0   544m  1.42g   268m      0 test:68.6%          0       0|0     0|1     2m     3k     6   12:10:32  
*0     *0  13742     *0       0     1|0       0   544m  1.42g   266m      0 test:80.6%          0       0|0     0|1     2m     3k     6   12:10:33  
*0     *0  13583     *0       0     1|0       0   544m  1.42g   266m      0 test:80.8%          0       0|0     0|1     2m     3k     6   12:10:34  
*0     *0  13769     *0       0     1|0       0   544m  1.42g   266m      0 test:81.4%          0       0|0     0|1     2m     3k     6   12:10:35  
*0     *0  13921     *0       0     2|0       0   544m  1.42g   268m      0 test:81.1%          0       0|0     0|1     2m     3k     6   12:10:36  
*0     *0  13414     *0       0     1|0       0   544m  1.42g   265m      0 test:78.4%          0       0|0     0|1     2m     3k     6   12:10:37  
*0     *0  13489     *0       0     1|0       0   544m  1.42g   263m      0 test:80.7%          0       0|0     0|1     2m     3k     6   12:10:38  
insert  query update delete getmore command flushes mapped  vsize    res faults  locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time  
*0     *0  13847     *0       0     1|0       0   544m  1.42g   262m      0 test:81.3%          0       0|0     0|1     2m     3k     6   12:10:39  
*0      3  13776     *0       0     1|0       0   544m  1.42g   266m      0 test:80.6%          0       0|0     0|1     2m     3k     6   12:10:40  
*0     *0  14000     *0       0     2|0       0   544m  1.42g   251m      0 test:81.1%          0       0|0     0|1     2m     3k     6   12:10:41  
*0     *0  13416     *0       0     1|0       0   544m  1.42g   270m      0 test:77.8%          0       0|0     0|1     2m     3k     6   12:10:42  
*0     *0  13583     *0       0     1|0       0   544m  1.42g   270m      0 test:80.8%          0       0|0     0|1     2m     3k     6   12:10:43  
*0     *0  13854     *0       0     1|0       0   544m  1.42g   272m      0 test:80.9%          0       0|0     0|1     2m     3k     6   12:10:44  
*0     *0  13742     *0       0     1|0       0   544m  1.42g   270m      0 test:80.6%          0       0|0     0|1     2m     3k     6   12:10:45  
*0     *0  13708     *0       0     2|0       0   544m  1.42g   269m      0 test:80.7%          0       0|0     0|1     2m     3k     6   12:10:46  
*0     *0  13675     *0       0     1|0       0   544m  1.42g   269m      0 test:80.8%          0       0|0     0|1     2m     3k     6   12:10:47  
*0     *0  11748     *0       0     1|0       0   544m  1.42g   271m      0 test:68.9%          0       0|0     0|1     2m     3k     6   12:10:48  
insert  query update delete getmore command flushes mapped  vsize    res faults  locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time  
*0     *0   9845     *0       0     1|0       1   544m  1.42g   274m      0 test:56.4%          0       0|0     0|1     1m     3k     6   12:10:49  
*0     *0  13623     *0       0     2|0       0   544m  1.42g   271m      0 test:81.0%          0       0|0     0|1     2m     3k     6   12:10:50  
*0     *0  13530     *0       0     2|0       0   544m  1.42g   271m      0 test:80.4%          0       0|0     0|1     2m     3k     6   12:10:51  
*0     *0  14127     *0       0     1|0       0   544m  1.42g   274m      0 test:81.2%          0       0|0     0|1     2m     3k     6   12:10:52  
*0     *0  13734     *0       0     1|0       0   544m  1.42g   270m      0 test:80.8%          0       0|0     0|1     2m     3k     6   12:10:53  
*0     *0  13305     *0       0     1|0       0   544m  1.42g   268m      0 test:81.3%          0       0|0     0|1     2m     3k     6   12:10:54  
*0     *0  13575     *0       0     1|0       0   544m  1.42g   269m      0 test:80.9%          0       0|0     0|1     2m     3k     6   12:10:55  
*0     *0  13735     *0       0     2|0       0   544m  1.42g   272m      0 test:80.2%          0       0|0     0|1     2m     3k     6   12:10:56  
*0     *0  13809     *0       0     1|0       0   544m  1.42g   257m      0 test:80.5%          0       0|0     0|1     2m     3k     6   12:10:57  
*0     *0  13896     *0       0     1|0       0   544m  1.42g   252m      0 test:81.3%          0       0|0     0|1     2m     3k     6   12:10:58  
insert  query update delete getmore command flushes mapped  vsize    res faults  locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time  
*0     *0  13207     *0       0     1|0       0   544m  1.42g   274m      0 test:78.0%          0       0|0     0|0     2m     3k     6   12:10:59  
*0     *0  14075     *0       0     1|0       0   544m  1.42g   276m      0 test:81.1%          0       0|0     0|1     2m     3k     6   12:11:00  
*0     *0  11833     *0       0     2|0       0   544m  1.42g   273m      0 test:70.9%          0       0|0     0|1     2m     3k     6   12:11:01  
*0     *0  13540     *0       0     1|0       0   544m  1.42g   271m      0 test:81.0%          0       0|0     0|1     2m     3k     6   12:11:02  
*0     *0  13762     *0       0     1|0       0   544m  1.42g   272m      0 test:80.8%          0       0|0     0|1     2m     3k     6   12:11:03  
*0     *0  13535     *0       0     1|0       0   544m  1.42g   275m      0 test:79.3%          0       0|0     0|1     2m     3k     6   12:11:04  
*0     *0  13584     *0       0     1|0       0   544m  1.42g   265m      0 test:80.1%          0       0|0     0|1     2m     3k     6   12:11:05  
*0     *0   9272     *0       0     2|0       0   544m  1.42g   275m      0 test:54.3%          0       0|0     0|1     1m     3k     6   12:11:06  
*0     *0   8524     *0       0     1|0       0   544m  1.42g   271m      0 test:52.8%          0       0|0     0|1     1m     3k     6   12:11:07  
*0     *0  13772     *0       0     1|0       0   544m  1.42g   272m      0 test:81.6%          0       0|0     0|1     2m     3k     6   12:11:08  
insert  query update delete getmore command flushes mapped  vsize    res faults  locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time  
*0     *0  11479     *0       0     1|0       0   544m  1.42g   271m      0 test:65.8%          0       1|0     0|1     2m     3k     6   12:11:09  
*0     *0  13835     *0       0     1|0       0   544m  1.42g   252m      0 test:80.8%          0       0|0     0|1     2m     3k     6   12:11:10  
*0     *0  13597     *0       0     2|0       0   544m  1.42g   276m      0 test:80.2%          0       0|0     0|1     2m     3k     6   12:11:11  
*0     *0  13704     *0       0     1|0       0   544m  1.42g   275m      0 test:80.9%          0       0|0     0|1     2m     3k     6   12:11:12  
*0     *0  14127     *0       0     1|0       0   544m  1.42g   279m      0 test:81.2%          0       0|0     0|1     2m     3k     6   12:11:13  
*0     *0  13144     *0       0     1|0       0   544m  1.42g   275m      0 test:78.1%          0       0|0     0|1     2m     3k     6   12:11:14  
*0     *0  13680     *0       0     1|0       0   544m  1.42g   273m      0 test:80.9%          0       0|0     0|1     2m     3k     6   12:11:15  
*0     *0  13491     *0       0     2|0       0   544m  1.42g   273m      0 test:78.9%          0       0|0     0|0     2m     3k     6   12:11:16  
*0     *0     *0     *0       0     1|0       0   544m  1.42g   265m      0     .:0.1%          0       0|0     0|0    62b     3k     5   12:11:17  
*0      1     *0     *0       0    13|0       0   544m  1.42g   258m      0 config:0.1%          0       0|0     0|0   892b    11k     5   12:11:18 

阻塞率为 80%,但我想这是正常的,因为我每秒更新插入 13K 条记录。

块引用 任何想法为什么会发生这种性能损失?我可以在数据库中查找/监视什么?

您可能想要运行 mongostat (http://docs.mongodb.org/manual/reference/program/mongostat/

):
mongostat --username <user> --password <pass>

并注意故障的数量,如果不是零,您的工作集不适合内存,因此数据访问变得非常慢。解决方案是使用索引,提供更多RAM和/或开始分片数据库

使用不同的数据库。当前版本的MongoDB具有数据库级锁定,因此无需对所有版本使用test,只需使用test1test2testN...

还可以尝试在旧版驱动程序(计划在下一版本中)中使用批量 api,以避免网络往返。