我们拥有超过2000万份文档的集合。 这些文档存储了一年多的所有用户活动相关数据,平均约为2-3kb。 当我们根据特定字段进行计数时,结果将在1.5分钟内返回,但同样的查询具有5%的样本量I.e 100万条记录需要超过2.5分钟。 我们什么时候应该使用随机抽样功能mongo? 使用此功能时是否可以进行任何优化。 由于排序内存限制,allowdiskuse也必须设置为true。
MongoDB版本3.6.2 硬件规格 - 具有24核,128GB RAM,SSD硬盘的3个碎片
Mongo sample doc :
{
"_id" : ObjectId("579728dfc6df0a06af162df3"),
"userid" : 3708399,
"ts" : 160726143951,
"lists" : [
{
"listid" : 119,
"modified" : 160726143951,
"entered" : 160726143951
},
{
"listid" : 1220,
"modified" : NumberLong("170405120718"),
"entered" : NumberLong("170405120718")
},
],
"attributes" : {
"email" : "example@example.com",
"unique" : "sampleFk",
"mobile" : "9********9",
"d" : 0,
"bl" : 0,
"state" : "Statename",
"name" : "firstname",
"code" : "01000000184D38B12D6E18E382B7AFB441B0499EFBC2D275B7BEC1F574A19E0D4E385D09",
"city" : "CityName",
"age" : 26,
"gender" : "Male",
"country" : "CountryName",
},
"sms_sent" : [
{
"message_id" : 975,
"sentdate" : 170405,
"senttime" : 170235
},
{
"message_id" : 1039,
"sentdate" : 170418,
"senttime" : 163251
},
{
"message_id" : 1054,
"sentdate" : 170421,
"senttime" : 163223
},
],
"sms_delivered" : [
{
"message_id" : 975,
"sentdate" : 170405,
"senttime" : 170235
},
{
"message_id" : 1039,
"sentdate" : 170418,
"senttime" : 163251
}
],
"email_sent" : [
{
"message_id" : 464,
"sentdate" : 170411,
"senttime" : 121215
},
{
"message_id" : 478,
"sentdate" : 170425,
"senttime" : 104551
}
],
"sms_clicked" : [
{
"message_id" : 975,
"clickdate" : 170405,
"clicktime" : 171035,
"linkid":15
}
],
"email_clicked" : [
{
"message_id" : 464,
"sentdate" : 170411,
"senttime" : 131215
"linkid":56
}
]
}
平均文件大小:2KB
Query :
db.collection.aggregate(
[
{$sample:{size:1339576}},
{$match:{"attributes.city":"Kolkata"}},{$count:"count"}
],{allowDiskUse:true})
由于