2011-07-31 5 views
4

CouchDB 압축이 삭제 된 문서에 전혀 무관하다는 이론에 간단한 CouchDB를 사용합니다.CouchDB 압축 및 문서 삭제 - 무관심한 압축?

로컬 호스트 : 5984/ENQ/삭제 - 문서-ID { "오류": "NOT_FOUND", "이유"는 DELETE 방법을 통해 소파에서 문서를 삭제

는 IT를 검색 할 때 다음과 같은 산출 : "deleted"}

예상. 로컬 호스트 : 5984/ENQ/_compact { '확인': TRUE}

그리고 확인 압축은 "compact_running" 완료 : 잘못된 내가 CouchDB를을 기대 이제

지금은 데이터베이스를 압축 NOT_FOUND 반환, 이유는 간단 GET 로컬 호스트에서 "실종": { "삭제": "이유를" "NOT_FOUND"을 "오류"}

과 함께 노력하고 5,984/ENQ/삭제 - 문서-ID ? rev = deleted_rev는 나에게 완전한 문서를 제공한다. 에세이 데이터.

그래서 나는 couchdb 압축이 삭제 된 문서에 대해 특별한 대우를하지 않는다고 생각하고 수정 작업의 일부인 rev 회수를 다시 조사합니다. 삭제 된 문서에 대해 설정할 수있는 rev_limit가 있습니까?

확실히 유일한 해결책은 _purge가 될 수 없습니까? 현재 수천 개의 고아가 삭제 된 문서가 있어야하며, 일반 문서의 버전 기록을 유지하려면이 시나리오에서 도움을주기 위해 rev_limit를 1로 줄이려고하지 마십시오.

우리가해야 할 복제 문제는 무엇입니까? 정화를 알고 있니?

답변

4

문서를 추가하고 삭제 한 다음 압축하면 CouchDB 데이터베이스가 원래 상태로 돌아 가지 않습니다. 삭제 된 문서는 압축을 통해 유지되지만 일반적으로 결과 문서는 작습니다 (_id, _rev 및 _deleted = true). 그 이유는 복제입니다. 다음을 상상해보십시오.

  • 문서 만들기
  • DB를 원격 DB에 복제합니다.
  • 문서를 삭제하십시오.
  • Compact DB.
  • DB를 원격 DB에 다시 복제하십시오.

삭제 + 압축 후 문서가 완전히 제거 된 경우 두 번째 복제는 원격 DB에 문서가 삭제되었음을 알리는 것을 알 수 없습니다. 이로 인해 두 개의 DB가 일치하지 않게됩니다.

의 문서가 작아서는 안되는 문제가보고되었습니다.은 작습니다. 그러나 그것은 HTTP DELETE 메서드 AFAIK (비록 내가 잘못 될 수는 있지만)와 관련이 없습니다. 티켓은 여기에 있습니다 :

https://issues.apache.org/jira/browse/COUCHDB-1141

기본적인 아이디어는 감사 정보는 삭제하는 것이 압축을 통해 유지됩니다에 포함 할 수있다.전체 문서 본문에 DELETE 메서드를 게시하지 않도록하십시오. 이렇게하면 문서가 실제로 제거되지 않는 이유를 설명 할 수 있습니다.

7

삭제 된 문서는 영원히 보존됩니다 (복제본간에 궁극적 인 일관성을 제공해야하므로). 그래서, 당신이 묘사 한 행동은 의도적 인 것입니다.

가능한 한 효율적으로 문서를 삭제하려면 _id, _rev 및 deleted 플래그 만 저장하므로 DELETE 동사를 사용하십시오. 물론 POST 또는 PUT을 통해 수동으로 더 많은 작업을 수행 할 수 있습니다.

마지막으로, _purge는 중요한 암호를 couchdb. 서에 넣고 디스크에서 제거해야하는 극단적 인 경우에만 존재합니다. 데이터베이스를 제거하기 위해 권장되는 방법은 아니며, 일반적으로 모든 뷰를 무효화하고 (전체 재 구축을 강제 실행) 복제를 망칠 수도 있습니다.

1

우리의 경험에 따르면 ... 문서 데이터를 완전히 제거하려면 ID와 압축 파일로 DELETE를 수행해야합니다.

위에서 지적한 것처럼 나중에 데이터베이스에 "헤더 데이터"가 있습니다.

관련 문제