我在MongoDB的樣本文件(和我還是新來的MongoDB)MongoDB的MapReduce的使用性能指標
{
"ID": 0,
"Facet1":"Value1",
"Facet2":[
{
"Facet2Obj1":{
"Obj1Facet1":"Value11",
"Obj2Facet1":"Value21",
"Obj3Facet1":"Value31"
}
},
{
"Facet2Obj2":{
"Obj1Facet2":"Value12",
"Obj2Facet2":"Value22",
"Obj3Facet2":"Value32"
}
},
{
"Facet2Obj3":{
"Obj1Facet3":"Value13",
"Obj2Facet3":"Value23",
"Obj3Facet3":"Value33"
}
}
],
"Facet3":"Value3"
"Facet4":{
"Facet4Obj1":{
"Obj1Facet1":"Value4111"
}
}
}
MapReduce的是一個有點複雜,它提供了以下輸出中(30000個文檔):
{
"_id" : "Facet1",
"value" : [
{
"value" : "Value1",
"count" : 30000,
"ID" : [
0,
1,
.
.
.
]
}
]
}
{
"_id" : "ID",
"value" : [
{
"value" : 0,
"count" : 1,
"ID" : [
0
]
},
{
"value" : 1,
"count" : 1,
"ID" : [
1
]
},
.
.
.
]
}
{
"_id" : "Facet2",
"value" : [
{
"value" : "Facet2Obj1",
"count" : 30000,
"ID" : [
0,
1,
.
.
.
]
},
{
"value" : "Facet2Obj2",
"count" : 30000,
"ID" : [
0,
1,
.
.
.
]
},
{
"value" : "Facet2Obj3",
"count" : 30000,
"ID" : [
0,
1,
.
.
.
]
}
]
}
{
"_id" : "Facet3",
"value" : [
{
"value" : "Value3",
"count" : 30000,
"ID" : [
0,
1,
2,
.
.
.
]
}
]
}
{
"_id" : "Facet4",
"value" : [
{
"value" : "Facet4Obj1",
"count" : 30000,
"ID" : [
0,
1,
2,
.
.
.
]
}
]
}
我使用格式(使用不同ID)插入30,000個文檔到mongodb中,然後我做了一個map-reduce,但速度很慢。有了30,000個文檔,大約需要30分鐘,但是隨後我將這些索引加上了一些快速的部分,比如需要350秒,但是又有50,000個文檔需要大約30分鐘。當我檢查使用db.collection.getIndexes()
的MongoDB將返回此輸出指標:
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "database.collection",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"ID" : 1,
"Facet1" : 1,
"Facet2" : 1,
"Facet3" : 1,
"Facet4" : 1
},
"ns" : "database.collection",
"name" : "ID_1_Facet1_1_Facet2_1_Facet3_1_Facet4_1"
}
有什麼我沒有錯的地圖,減少指標仍然不夠快,因爲索引必須是戰略性的地方或性能輸出會相反
答案是極大的讚賞和感謝提前
MR無法使用索引 – Sammaye 2013-02-27 09:15:47
您傳遞給mapReduce的查詢是什麼?你一般用mapReduce做什麼?它總是比聚合或運行在服務器而不是Javascript中的其他類型的操作慢 – 2013-02-27 12:29:45
如果MR不能使用索引,那麼爲什麼它變得更快一點? ,沒有使用查詢,因此所有30,000個文檔都被傳遞給mapreduce。是的,有關於mapreduce性能的主題,但是50,000個文檔是否不足以使mapreduce大約半小時?還是取決於地圖精簡工作的複雜程度? – megamoth 2013-02-28 05:13:29