2014-07-17 5 views
2

내 작업에는 couchbase를 사용하는데 몇 가지 문제가 있습니다. 일부 장치에서 데이터는 couchbase로 이동하고 집계 뷰를 호출 한 후에 나타납니다. 이보기는 값을 timestamp 및 deviceId의 두 키로 집계해야합니다. 10k 값 이상을 집계하기 전에 모든 것이 잘되었습니다. 이 경우에는 내가 감소 오류가Couchbase, 축소가 너무 큽니다.

지도 기능 :

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; 
} 

문서 샘플 :

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]); 
    } 
} 

기능을 줄

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

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 기능을 작동하는 경우에 생각하는 경우에 발생합니다. 이 오류를 수정하여이 어레이의 수를 줄이는 방법이 있습니까?

답변

3

인덱스가 너무 오래 걸리거나 너무 커지는 것을 막기 위해지도 기능 &의 출력에 많은 제한이 있습니다.

은 공식 문서에 추가되는 과정에 있지만, 그 동안 문서 업데이트 추적 문제 ( MB-11668)에서 인용 :

1) indexer_max_doc_size - 문서가이 값 다음 큰 건너 뜁니다을 색인 생성자 : 문서가 발견되면 메시지가 기록됩니다 (문서 ID, 크기, 버킷 이름,보기 이름 등) . 값 0은 제한이 없음을 의미합니다 (예전에 에 있었던 것과 같습니다). 현재 기본값은 1048576 바이트 (1Mb)입니다.

2) max_kv_size_per_doc - 단일보기의 단일 문서 에 대해 생성 될 수있는 KV 쌍의 최대 총 크기 (바이트). 이러한 한도를 초과하면 메시지가 기록됩니다 ( 문서 ID, 크기, 버킷 이름,보기 이름 등). 값 0은 제한이 없음을 의미합니다 (이전에 이었던 것과 같습니다). . 또한, 하나의 감소합니다 (reduce()의 출력의 크기는 64KB 한계가 당신을 제안하여가 기능을 감소 재 작업 : 현재 기본값은

편집 1048576 바이트 (1MB의)입니다 이 제한 내에서 데이터를 반환하십시오.이 경우에 대한 기술적 인 설명은 MB-7952을 참조하십시오.

+0

오류 메시지에 "감속도가 너무 큼 (66762 바이트)"입니다 .1MB 미만입니다. 그 외. – Vitaliy

+0

내 질문을 업데이트했습니다. – Vitaliy