2014-04-09 2 views
4

CouchDB는 각 설계 문서의 소스를 색인 파일의 이름과 비교하여 해시한다는 것을 알고 있습니다. 소스 코드를 변경할 때마다 색인을 다시 작성해야합니다. CouchDB는 문서가 처음 요청되었을 때 이것을 수행한다. 내가 일어날CouchDB 지연 빌드 색인 (Windows Server 2008 R2의 CouchDB 1.5.0)

내가 디자인 문서를 변경할 때마다, 뷰에 대한 첫 번째 호출은 크게 평소보다 오래 소요되며 시간이 초과 될 수 있습니다 일어날하려는 기대하는 무엇

. 색인은 계속해서 형성 될 것입니다. 이 작업이 완료되면 뷰는 변경 사항 만 처리하고 매우 빠릅니다. 처음으로 개정 된 뷰를 실행하면 실제로

  1. 를 어떻게됩니까

    , 나는 천천히 100 %에 도달, 상태 창에서 프로세스를 참조하십시오. 이 작업에는 약 2 시간이 소요됩니다. 이 시간 동안 모든 CPU가 완전히 활용됩니다.

  2. 프로세스가 99 %에 도달하면 약 1 시간 동안 남아서 사라집니다. CPU 사용률이 단 하나의 CPU로 떨어집니다.
  3. 프로세스가 사라지면 뷰의 데이터 파일이 약 30 분에서 1 시간 동안 계속 증가합니다. CPU 사용률이 0 %에 가까움
  4. 색인 파일이 갑자기 증가하여 크기가 증가합니다.

상태 4에 도달했을 때 다시보기를 요청하면 3)의 특성이 다시 시작됩니다. 마지막으로 뷰 값을 검색 할 수있을 때까지이 프로세스를 5 ~ 50 회 반복해야합니다.

1 단계 또는 2 단계까지 뷰가 다시 요청되면, 메모리가 거의 모두 소모되어 CouchDB 서비스를 다시 시작해야합니다. 이것은 내 DB가 거의 없으며 단 하나의 작업을 실행할 때 2GB 이상을 사용하지 않으며 일반적인 작업에서는 4GB 이상을 사용하지 않습니다.

구성 설정을 조정하고 더 많은 메모리를 추가하려고했지만 아무 것도 영향을 미치지 않는 것 같습니다.

내 질문

내가 실행 뷰의 개념을 오해 또는 내 설정에 문제가 있나요? 이것이 예상되는 경우 재방송 횟수를 줄이기 위해 조정할 수있는 것이 있습니까?

상황

내 문서 (1 메가 바이트 20) 꽤 크다. 포함 된 데이터는 잘 구조화되어 있으며 대개 웹 분석 보고서이며 관계형 데이터베이스에서 여러 개의 10k 행 데이터로 저장됩니다.

내지도 함수는 이러한 행을 추출합니다. 치수를 키 배열로 반환합니다. 키 배열이 때때로 20 열을 초과합니다. 대부분의보기에는 열이 10 개 미만입니다.

reduce 함수는 동일한 키가있는 행의 모든 ​​값을 집계 (합계)합니다. 메트릭은 사전에 저장되며 다른 키를 포함 할 수 있습니다. reduce 함수는 한 문서에서 누락 된 키를 식별하고 집계에 0을 추가합니다.

CouchDB 1.5를 사용하고 있습니다.2CPU 및 8GByte 메모리가있는 Windows Server 2008 R2에서는 0입니다.

뷰는 javacript로 couchjs 쿼리 서버를 사용하여 작성됩니다.

내 디자인 문서는 일반적으로 데이터를 방출하지 않지만 실제보기에서 액세스하는 기능의 철저한 라이브러리를 포함하는 '_lib'보기와 함께 여러보기로 구성됩니다.

+1

데이터 모델에서 문서가 너무 커야하는 이유가 있습니까? 나는. 보기에 표시해야하는 행 사이에 관계가 있습니까? 행마다 하나의 문서가 왜 필요하지 않습니까? –

+1

javascript reduce 함수 또는 erlang 함수를 사용합니까? – Antonio

+0

원본 데이터의 실제 문서를 반영하기 때문에 문서가 너무 커. Omniture 또는 Google 웹 로그 분석 보고서는 API 호출에 의해 반환됩니다. – Hans

답변

1

알려진 문제이지만, 경우에 따라 : 기가 바이트의 문서가있는 경우 기능 축소를 잊어 버릴 수 있습니다. build-in ones만이 충분히 빠르게 작동합니다.

+0

감사합니다. Mapping/Reducing/[언급 할 가치가있는 다른 모든 활동] 다양한 단계에 필요한 실행 시간의 부분을 파악할 수있는 방법이 있습니까? 내 인상은 감속기가 실행되는 데 오랜 시간이 걸리지 않는다는 것입니다. – Hans

+1

감사합니다. 일부 데이터 가져 오기를 디버그하기 위해 reduce 코드를 제거했으며 전체 런타임을 30 분 (2-3 시간)으로 줄였으며 마지막 두 단계를 다시 시작할 필요가 없었습니다. 실제 코드가 철저히 프로파일 링 될 때 V8에서 매핑을 실행할 때 필요한 시간에 대해 잘 알고 있습니다. 나는 그들이 가장 시간이 많이 걸리는 것처럼 보이기 때문에 줄이기 전화를 기록하는 방법을 살펴볼 것이다. – Hans

+1

'log ('시작보기 : ')','log ('끝보기 : ')'를 맵 함수에 호출 할 수 있습니다. 그러나 뷰 서버에 전달하는 동안 큰 문서를 직렬화/역 직렬화하는 데 많은 시간을 소비하기 때문에 실제로는별로 도움이되지 않을 수 있습니다. 그러나이 방법을 사용하면보기의 코드 (X)를 실행하는 데 걸리는 시간을 예측할 수 있습니다. 또한 얼마나 많은 HTTP 요청이 전반적인 (Y) 걸리는 지 알 수 있습니다. 이 숫자를 사용하면 Z = (Y-X)/Y 코드를 실행하는 데 소요 된 시간의 비율을 알 수 있습니다. 이 번호는 코드에있는 문제가 couchdb에 있는지 알려줍니다. – Antonio

0

os_process_limit을 초 저값 (1 초, 샘플 용)으로 설정할 수 있습니다. 이렇게하면 색인 생성 시간이 오래 걸리는 문서를 감지하고 성능을 위해지도 기능을 최적화 할 수 있습니다.