차례:
- 파티션 허용
- document
- Riak은 ACID 호환 데이터베이스가 아닙니다. ACID 준수 모드에서 실행되도록 구성을 변경할 수 없습니다. 클라이언트는 정상적인 작업이나 네트워크 파티션에서 일관성없는 데이터를 얻을 수 있습니다. Riak은 증가 된 가용성과 파티션 공차를 위해 절대적인 일관성을 유지합니다.
비디오: NOSQL Partition Demonstration with MongoDB 2024
파티션이라는 단어는 NoSQL에서 두 가지 개념으로 사용됩니다. 데이터 파티션 은 데이터가 클러스터 전체에 고르게 분산되도록하는 메커니즘입니다. 반면에 네트워크 파티션 은 동일한 데이터베이스 클러스터의 두 부분이 통신 할 수 없을 때 발생합니다.
매우 큰 클러스터 시스템에서는 하나의 장비에 장애가 발생할 가능성이 점점 커지고 있습니다. 클러스터에있는 서버 간의 네트워크 전환이 실패하면 (컴퓨터 전문 용어로) split brain 현상이 발생합니다. 이 경우 개별 서버는 여전히 요청을 받고 있지만 서로 통신 할 수는 없습니다.
이 시나리오는 서버의 수가 가장 적은 네트워크 파티션이 클러스터에서 제거되거나 (진정한 Big Brother 방식으로 "투표가 종료 됨"으로 인해) 데이터의 불일치 또는 데이터 저장 용량의 감소로 이어질 수 있습니다).
파티션 허용
네트워크 파티션이 발생할 때 두 가지 선택 사항이 있습니다.
-
일부 수준에서 읽기 및 쓰기 작업을 계속 진행합니다.
-
파티션의 한 부분을 "승인"하고 두 부분이 통신 할 수있을 때 나중에 데이터를 수정하기로 결정합니다. 이 작업에는 일반적으로 누락 된 마스터 파티션 노드마다 새 마스터로 읽기 복제본을 투표하는 클러스터가 포함됩니다.
Riak을 사용하면 데이터가 복제되는 횟수 (기본적으로 3 부, 즉 n = 3)와 읽기 성공을 위해 쿼리해야하는 서버 수를 결정할 수 있습니다. 즉, 키의 기본 마스터가 네트워크 파티션의 잘못된쪽에 있으면 다른 두 서버를 사용할 수있는 경우 (즉 r = 2 읽기 가용성) 읽기 작업이 계속 성공할 수 있습니다.
힌트 된 핸드 오프 라는 시스템을 사용하여 주 파티션 서버가 다운 될 때 Riak이 쓰기를 처리합니다. 데이터가 원래 복제되면 특정 키 파티션의 첫 번째 노드가 다음 인접 노드 중 두 개 (기본값)와 함께 기록됩니다.
이 두 가지 작업 모두에서 수 밀리 초 동안 만 다른 복제본이 다른 버전 상태 일 수 있기 때문에 버전 불일치가 발생할 수 있습니다.
Riak은이 문제를 완화하기 위해
- - 엔트로피 라는 시스템을 사용합니다. 이 시스템은 업데이트 된 값을 통해 트래킹하고 복제본이 어느 시점에서, 바람직하게는 나중에는 아니라 더 빨리 업데이트되도록합니다.이렇게하면 높은 처리 속도를 유지하면서 읽기시 충돌을 피할 수 있으므로 마스터 노예, 비공유 클러스터링 지원을 사용하는 다른 NoSQL 데이터베이스에서 사용되는 2 단계 커밋을 피할 수 있습니다. 읽기 충돌이 발생하면 Riak은
읽기 복구 를 사용하여 최신 데이터 만 반환하려고 시도합니다. 궁극적으로, 사용하는 일관성 및 가용성 설정에 따라 클라이언트 응용 프로그램에 여러 버전이 제공 될 수 있으며 자체적으로 결정할 수 있습니다. 어떤 상황에서는 이러한 절충안이 바람직하며, 많은 애플리케이션이 제시된 데이터를 기반으로 어떤 버전을 사용하고 어떤 버전을 버릴 지 직관적으로 알 수 있습니다. 2 차 색인 작성
2 차 색인은 값 내의 특정 데이터에 대한 색인입니다. 대부분의 키 - 값 저장소는이 색인을 응용 프로그램에 남깁니다. 그러나 Riak은 2 차 색인을 허용하는
document
- 기반 분할 방식 을 사용하는 방식이 다릅니다. 문서 기반 파티셔닝은 JSON 구조를 Riak 데이터베이스에 작성한다고 가정합니다. { "order-id": 5001, "customer-id": 1429857, "order-date": "2014-09-24"이렇게 JSON 구조 내의 특정 명명 된 속성에 대해 인덱스를 설정할 수 있습니다. ","total ": 134.24}
이전 달에 대한 고객의 주문을 보여주는 응용 프로그램이있는 경우 그림과 같이 고객 ID가 고정 값인 모든 레코드를 쿼리하려고합니다 (1429857)이며 주문 날짜는 특정 범위 (월의 시작과 끝) 내에 있습니다.
대부분의 키 - 값 저장소에서는 결합 된 고객 번호와 월을 키로하는 다른 버킷을 만들고 그 값은 주문 ID 목록입니다. 그러나 Riak에서는 customer-id (정수)와 order-date (날짜)의 두 번째 인덱스를 추가하기 만하면됩니다.이 인덱스는 추가 저장 공간을 차지하지만 응용 프로그램 개발자에게는 투명성을 제공합니다.
이 색인도 실시간으로 업데이트됩니다. 즉, Riak의 문서 값을 업데이트하는 것과 최신 색인이 업데이트되는 것 사이에 지연이 없음을 의미합니다. 데이터에 대한 실시간 액세스는 보이는 것보다 더 어렵습니다. 색인이 일치하지 않으면 일관되게 보관 된 데이터를 찾지 못할 것입니다.
Riak 평가
Riak의 상업적 주체 인 Basho는 곧 출시 될 버전 2.0이라고 말합니다. NoSQL 데이터베이스는 다른 NoSQL 공급 업체가 만들어내는 강력한 일관성을 항상 가지고 있습니다. NoSQL 공급 업체가 항상 강한 일관성을 유지한다고 주장하는 것은 일요일에 쇠고기를 볶을 때를 제외하고는 강한 채식주의 자라고 주장하는 것과 같습니다.
Riak은 ACID 호환 데이터베이스가 아닙니다. ACID 준수 모드에서 실행되도록 구성을 변경할 수 없습니다. 클라이언트는 정상적인 작업이나 네트워크 파티션에서 일관성없는 데이터를 얻을 수 있습니다. Riak은 증가 된 가용성과 파티션 공차를 위해 절대적인 일관성을 유지합니다.
강력한 일관성 모드에서 Riak을 실행하면 읽기 복제본이 기본 마스터와 동시에 업데이트된다는 의미입니다. 여기에는 2 단계 커밋이 포함됩니다. 기본적으로 마스터 노드는 쓰기가 완료되었음을 확인하기 전에 다른 노드에 쓰는 것입니다.
강력한 일관성을 사용할 때 Riak Search (상표 화되고 통합 된 Apache Solr 검색 엔진은 최종 일관성있는 업데이트 모델을 사용함)가 오 탐지를 일으킬 수 있습니다. 이 상황은 데이터를 쓰고 트랜잭션을 포기했지만 데이터가 여전히 색인 생성에 사용되어 "오 탐지"검색 결과를 남기기 때문에 발생합니다. 결과는 실제로 더 이상 검색 쿼리에 유효하지 않습니다.
Riak은 별도의
감시 프로세스
를 사용하여 장애 조치 조건에서 어떤 노드가 마스터가되는지 확인합니다. 그러나이 프로세스는 고 가용성이 아니므로 몇 초 동안감시 모듈 프로세스 의 새 사본이 온라인 상태가되는 동안 새 노드를 추가하거나 새로운 노드를 추가 할 수 없습니다 선출 된 선생. 높은 스트레스 장애 조치 조건에서이 가능성을 인식해야합니다.