어디를 가든 MongoDB가 CP라는 것을 알 수 있습니다. 하지만 파헤쳐 보면 결국 일관성이 있음을 알 수 있습니다. safe = true를 사용할 때 CP입니까? 그렇다면 safe = true로 쓸 때 결과를 얻기 전에 모든 복제본이 업데이트된다는 의미입니까?
답변
MongoDB는 기본적으로 강력하게 일관됩니다. 쓰기를 한 다음 읽기를 수행하면 쓰기가 성공했다고 가정하면 방금 읽은 쓰기의 결과를 항상 읽을 수 있습니다. 이는 MongoDB가 단일 마스터 시스템이고 모든 읽기가 기본적으로 기본으로 이동하기 때문입니다. 선택적으로 보조에서 읽기를 활성화하면 MongoDB는 오래된 결과를 읽을 수있는 곳에서 결국 일관성을 갖게됩니다.
MongoDB는 복제본 세트에서 자동 장애 조치를 통해 고 가용성을 제공합니다. http://www.mongodb.org/display/DOCS/Replica+Sets
답변
루카스 포스트에 동의합니다. MongoDB가 CP / AP / CA라고 말할 수는 없습니다. 실제로 데이터베이스 / 드라이버 구성 및 재해 유형에 따라 C, A 및 P 사이 의 절충안 이기 때문 입니다 . 여기에 시각적 요약이 있습니다. 더 자세한 설명.
Scenario | Main Focus | Description
---------------------------|------------|------------------------------------
No partition | CA | The system is available
| | and provides strong consistency
---------------------------|------------|------------------------------------
partition, | AP | Not synchronized writes
majority connected | | from the old primary are ignored
---------------------------|------------|------------------------------------
partition, | CP | only read access is provided
majority not connected | | to avoid separated and inconsistent systems
일관성:
MongoDB는 단일 연결 또는 올바른 쓰기 / 읽기 문제 수준 을 사용할 때 강력하게 일관됩니다 ( 실행 속도가 저하됨 ). 이러한 조건을 충족하지 않으면 (특히 보조 복제본에서 읽을 때) MongoDB는 Eventually Consistent가됩니다.
유효성:
MongoDB는 Replica-Sets를 통해 고 가용성을 얻습니다 . 기본이 다운되거나 다른 곳에서 사용할 수 없게되는 즉시 보조는 다시 사용할 수있는 새 기본을 결정합니다. 여기에는 단점이 있습니다. 이전 기본에서 수행되었지만 보조와 동기화되지 않은 모든 쓰기가 롤백됩니다. 및 롤백 파일에 저장이되는 즉시 세트에 다시 연결로 (이전 기본은 보조입니다 지금). 따라서이 경우 가용성을 위해 일부 일관성이 희생됩니다.
파티션 공차 :
상기 레플리카 세트의 사용을 통해 MongoDB는 파티션 허용도를 달성합니다. 레플리카 세트의 서버 중 절반 이상이 서로 연결되어 있는 한 새로운 1 차 서버를 선택할 수 있습니다 . 왜? 두 개의 분리 된 네트워크를 보장하기 위해 둘 다 새로운 기본을 선택할 수는 없습니다. 충분한 보조가 서로 연결되지 않은 경우에도 여전히 읽을 수 있지만 (일관성이 보장되지 않음) 쓰기는 불가능합니다. 이 세트는 일관성을 위해 사실상 사용할 수 없습니다.
답변
A와 화려한 새로운 기사가 나타나서 일부 카일로 멋진 실험 이 분야에서 C 또는 A로 MongoDB를, 그리고 다른 데이터베이스를 라벨 때주의해야
물론 CAP는 데이터베이스가 우세한 내용을 많은 말없이 추적하는 데 도움이되지만, 사람들은 예를 들어 CAP의 C가 원자 일관성 (선형성)을 의미한다는 사실을 종종 잊습니다. 그리고 이것은 분류하려고 할 때 이해하는 데 많은 고통을주었습니다. 따라서 MongoDB가 강력한 일관성을 제공하는 것 외에도 이것이 C라는 것을 의미하지는 않습니다. 이런 식으로이 분류를 만들면 실제로 작동하는 방식에 대해 더 깊이 설명하여 의심을 남기지 않는 것이 좋습니다.
답변
네, 사용시 CP safe=true
입니다. 이것은 단순히 데이터가 마스터 디스크로 전송되었음을 의미합니다. 일부 복제본에도 도착했는지 확인하려면 ‘w = N’매개 변수를 살펴보십시오. 여기서 N은 데이터를 저장해야하는 복제본의 수입니다.
답변
Mongo의 P에 대해 잘 모르겠습니다. 상황을 상상해보십시오.
- 복제본은 두 개의 파티션으로 분할됩니다.
- 새로운 마스터가 선출됨에 따라 양측에 계속 쓰기
- 파티션이 해결됨-이제 모든 서버가 다시 연결됨
- 새로운 마스터가 선택됩니다. 즉 oplog가 가장 높은 마스터가 선택되지만 다른 마스터의 데이터는 파티션 이전의 공통 상태로 되돌아가 수동 복구를 위해 파일로 덤프됩니다.
- 모든 보조가 새 마스터를 따라 잡습니다.
여기서 문제는 덤프 파일 크기가 제한되어 있고 파티션이 오랫동안 있으면 데이터를 영원히 잃을 수 있다는 것입니다.
당신은 그것이 일어날 것 같지 않다고 말할 수 있습니다. 그렇습니다. 클라우드에서 생각하는 것보다 더 흔하지 않다면 말입니다.
이 예는 데이터베이스에 문자를 할당하기 전에 매우주의해야하는 이유입니다. 너무 많은 시나리오와 구현이 완벽하지 않습니다.
이 시나리오가 Mongo의 이후 릴리스에서 해결되었는지 아는 사람이 있으면 의견을 보내주십시오! (나는 한동안 일어난 모든 일을 따르지 않았습니다 ..)
답변
Mongodb는 보조 쓰기를 허용하지 않습니다. 보조 읽기는 허용되지만 쓰기는 허용되지 않습니다. 따라서 기본이 중단되면 보조가 다시 기본이 될 때까지 쓸 수 없습니다. 이것이 바로 CAP 정리에서 고 가용성을 희생하는 방법입니다. 기본에서만 읽기를 유지함으로써 강력한 일관성을 가질 수 있습니다.
답변
MongoDB는 파티션이있을 때마다 가용성보다 일관성을 선택합니다. 의미하는 바는 파티션 (P)이있을 때 가용성 (A)보다 일관성 (C)을 선택한다는 것입니다.
이것을 이해하기 위해 MongoDB가 복제 세트가 작동하는 방식을 이해합시다. 복제 세트에는 단일 기본 노드가 있습니다. 데이터를 커밋하는 유일한 “안전한”방법은 해당 노드에 쓴 다음 해당 데이터가 집합의 대부분의 노드에 커밋 될 때까지 기다리는 것입니다. (쓰기를 보낼 때 w = majority 플래그가 표시됩니다)
파티션은 다음과 같은 두 가지 시나리오에서 발생할 수 있습니다.
- 기본 노드가 다운되면 새 기본 노드를 선택할 때까지 시스템을 사용할 수 없습니다.
- 1 차 노드가 너무 많은 2 차 노드에서 연결이 끊어지면 시스템을 사용할 수 없게됩니다. 다른 보조원은 새로운 예비 선거를 선출하고 현재 예비 선거는 물러날 것입니다.
기본적으로 파티션이 발생하고 MongoDB가 수행 할 작업을 결정해야 할 때마다 가용성보다 일관성을 선택합니다. 해당 쓰기를 안전하게 완료 할 수 있다고 판단 될 때까지 시스템에 대한 쓰기 허용을 중지합니다.