2014-07-17 52 views
2

在我的工作中,我使用了couchbase,並且出現了一些問題。從一些設備數據來到couchbase,並在我調用聚合視圖。該視圖必須通過2個鍵來聚合值:timestamp和deviceId。 一切都很好,在我試圖聚合更多的10k值之前。在這種情況下,我必須減少錯誤Couchbase,減少太大的錯誤

地圖功能:

function(doc, meta) 
{ 
    if (doc.type == "PeopleCountingIn"&& doc.undefined!=true) 
    { 
    emit(doc.id+"@"+doc.time, [doc.in, doc.out, doc.id, doc.time, meta.id]); 
    } 
} 

Reduce函數:

function(key, values, rereduce) 
{ 
    var result = 
     { 
     "id":0, 
     "time":0, 
     "in" : 0, 
     "out" : 0, 
     "docs":[] 
     }; 
    if (rereduce) 
    { 
    result.id=values[0].id; 
    result.time = values[0].time; 
    for (i = 0; i<values.length; i++) 
    { 
     result.in = result.in + values[i].in; 
     result.out = result.out + values[i].out; 
     for (j = 0; j < values[i].docs.length; j++) 
     { 
     result.docs.push(values[i].docs[j]); 
     }   
    } 
    } 
    else 
    { 
    result.id = values[0][2]; 
    result.time = values[0][3]; 
    for(i = 0; i < values.length; i++) 
    { 
     result.docs.push(values[i][4]); 
     result.in = result.in + values[i][0]; 
     result.out = result.out + values[i][1]; 
    } 
    } 
    return result; 
} 

文檔樣本:

{ 
    "id": "[email protected]", 
    "time": 1401431340, 
    "in": 0, 
    "out": 0, 
    "type": "PeopleCountingIn" 
} 

UPDATE

輸出文件:

{"rows":[ 
{"key":"[email protected]@1401144240","value":{"id":"[email protected]","time":1401144240,"in":0,"out":0,"docs":["[email protected]@[email protected]"]}}, 
{"key":"[email protected]@1401202080","value":{"id":"[email protected]","time":1401202080,"in":0,"out":0,"docs":["[email protected]@[email protected]"]}} 
] 
} 

}

錯誤在 「文檔」 數組長度更然後100我認爲在該情況下工作rereduce功能的情況下發生。有沒有辦法解決這個錯誤exept使這個數組的數量更少?

回答

3

減少功能的地圖輸出有許多限制,以防止索引花費太長時間和/或變得太大。

這些都是被添加到官方文檔的過程,但在此期間從問題(MB-11668)引用跟蹤文檔更新:

1)indexer_max_doc_size - 文件較大,那麼這個值被跳過由 索引器。當遇到這樣的文檔時,記錄消息(具有文檔ID,大小,存儲桶名稱,視圖名稱等) 。值爲0意味着沒有限制(就像之前用於 的那樣)。當前默認值是1048576字節(1Mb)。

2)max_kv_size_per_doc - 可針對單個視圖單個文檔發出的KV對的最大總大小(字節)。通過此限制時,會記錄消息(文件ID爲 ,文件大小,存儲桶名稱,視圖名稱等)。值爲0意味着沒有限制(比如之前的 )。當前的默認值是1048576個字節(1MB)

編輯:此外,還有爲64KB的單個減少(在reduce()的輸出大小的限制,我建議你重新工作的減少功能返回的數據在這個限制範圍內,參見MB-7952關於這種情況的技術討論

+0

錯誤消息說:「減少太大(66762字節)」,它小於1 Mb所以我認爲問題在某些其他 – Vitaliy

+0

我已更新我的問題 – Vitaliy