저는 CouchDB를 처음 시작하고 데이터베이스에 여러 버전의 데이터를 보관한다는 사실을 알게되었습니다. 각 버전이 현재 추가 된 필드의 전체 복사본인지 의미합니까? 그렇다면 디스크에 중복 된 데이터를 보관합니까 아니면 버전이 증분 버전입니까?여러 버전의 couchDB가 중복 데이터를 유지합니까?
답변
CouchDB는 문서의 개정판을 보유하고 있으며 이 아니며 증분 변경 사항을 저장합니다. CouchDB의 내부는 추가 전용 데이터 구조를 사용하므로 새로운 개정이 데이터베이스 파일에 추가됩니다.
또한 CouchDB는 MVCC (다중 버전 동시성 제어)를 사용하므로 동시 작성자를 허용하면서 잠금이 필요하지 않습니다. (이 기능에 대한 자세한 내용은 their documentation에서 확인할 수 있습니다.) 개정 번호가 해당 메커니즘의 중요한 부분이므로 이전 개정판을 유지하면 해당 프로세스가 도움이되므로 관련이 있습니다. (복제 설정에서 특히 conflict resolution 인 경우)
요약하면 문서를 수정할 때마다 데이터베이스에 복제본이 있습니다. 따라서 동일한 문서를 여러 번 수정하면 데이터베이스 파일이 비정상적으로 늘어날 수 있습니다. 또한 수정이 적은 매우 큰 문서의 경우에도 동일한 효과가 나타납니다. 각 문서의 경우 최신 버전 만 데이터베이스에서 "활성"으로 간주되지만 이전 수정본 은 일 수 있습니다. (그 이상으로)
이것은 비효율적이며 낭비스러운 것 같지만, CouchDB는 compaction이라는 기능으로 설명했습니다. 이 프로세스는 데이터베이스 파일에서 모든 개정판 (최근 개정판 제외)을 모두 제거합니다. CouchDB 2.0 이전에는 일반적으로 관리자가 수동으로 호출했지만 이제는 훨씬 자동화되었습니다.
CouchDB에 대한 한 가지 일반적인 오해는 버전 제어 시스템 (예 : git, svn)처럼 여러 버전을 사용할 수 있기 때문에 데이터베이스의 기록 레코드를 항상 유지할 수 있다는 것입니다. 그러나 MVCC는 순전히 동시성 제어를위한 것이므로 완전히 거짓입니다. 앞에서 설명한 것처럼 압축을하면 이전 버전이 제거되므로 언제든지 데이터베이스에있는 최신 버전에만 의존해야합니다.
CouchDB의 official documentation을 모두 읽는 것이 좋습니다. 특별히 길지는 않지만 응용 프로그램을 빌드하는 방법을 결정할 때 사용할 수있는 내부 및 절충 사항을 설명하는 데 매우 뛰어납니다.