차례:
- 키 - 값 저장소의 데이터 형식
- 모든 읽기와 쓰기는 마스터에게 발생합니다. 마스터가 실패한 경우에만 슬레이브가 요청을 수신합니다.
- 클라이언트 1은 복제본 A의 데이터를 'Adam : {likes : 치즈, 증오 : 햇빛}'으로 업데이트합니다.
비디오: Building Apps for Mobile, Gaming, IoT, and more using AWS DynamoDB by Rick Houlihan 2024
키를 적절하게 관리하면 NoSQL을 사용하여 데이터를 저장하는 방법을 설계하고 작업에 안전하고 항상 액세스 할 수 있도록합니다 당신은해야합니다.
키 - 값 저장소의 데이터 형식
키 - 값 저장소는 일반적으로 & ldquo; 양동이 & rdquo; 바이너리 데이터 용. 일부 데이터베이스는 강력한 내부 데이터 입력 및 스키마 지원을 제공합니다. 다른 사람들은 공통 응용 프로그램 데이터 구조를 키 - 값 저장소로 직렬화하기 위해 클라이언트 드라이버에서 편리한 도우미 기능을 제공하기 만하면됩니다. 지도, 목록 및 정렬 된 집합을 예로들 수 있습니다.
고도로 구조화 된 Avro 스키마 지원-
Avro 스키마는 관계형 데이터베이스 스키마와 유사하며 매우 엄격한 세트를 적용합니다 다음 예제와 같이 데이터베이스에 저장된 JSON (JavaScript Object Notation) 데이터 형식 규칙을 사용합니다.
-
{username: & ldquo; afowler & rdquo;, sessionid: 13452673, 이후: 1408318745, 테마: & ldquo; bluesky & rdquo;}
JSON 문서를 사용하여 Avro 스키마를 정의합니다. 이전에 표시된 저장된 데이터에 대한 Avro 스키마의 예입니다.
{& ldquo; & rdquo;를 입력하십시오.: & ldquo; 기록하기 & rdquo;, & ldquo; 네임 스페이스 & rdquo;: & ldquo; com. 예 & rdquo;, & ldquo; 이름 (& R): & ldquo; UserSession & rdquo;, & ldquo; 필드 & rdquo;: [{& ldquo; 이름 (& R): & ldquo; 사용자 이름 & rdquo;, & ldquo; & rdquo;를 입력하십시오.: [& ldquo; 문자열 & rdquo; & rdquo; null & rdquo;]}, {& ldquo; 이름 (& R): & ldquo; sessionid & rdquo;, & ldquo; & rdquo;를 입력하십시오.: & ldquo; int & rdquo;}, {& ldquo; 이름 (& R): & ldquo; 이후 & rdquo;, & ldquo; & rdquo;를 입력하십시오.: & ldquo; 긴 & rdquo;}, {& ldquo; 이름 (& R): & ldquo; 테마 & rdquo;, & ldquo; & rdquo;를 입력하십시오.: [& ldquo; 문자열 & rdquo; & rdquo; null & rdquo;]}]}
Avro 스키마는 스키마가 중요한 경우 데이터베이스에 매우 강력한 입력을 제공합니다. 앞의 예에서 문자열 데이터, 숫자 세션 ID, 날짜 (밀리 초, 긴 정수로 표시), 테마가 웹 사이트에서 사용할 개인화 설정을 볼 수 있습니다.또한 username과 theme의 유형에는 문자열과 null의 두 가지 옵션이 있음을 알 수 있습니다. 이는 null 값이 허용되는 Oracle NoSQL을 설명하는 방법입니다. 테마를 문자열로 남겨두고 추가 구성 매개 변수 & ldquo;를 제공 할 수 있습니다. 기본 & rdquo;: & ldquo; 블루스키 & rdquo;.
다른 NoSQL 데이터베이스는 JSON 컨텐트가있는 값의 임의의 속성에 보조 인덱스를 제공합니다. 예를 들어, Riak은문서 분할을 기반으로하는 보조 색인을 제공합니다. 기본적으로 JSON 문서 내의 알려진 속성은 유형으로 색인화됩니다.이렇게하면 단순한 같음과 같지 않은 비교 이외에 범위 쿼리 (보다 작거나 같음)가 허용됩니다. Riak은 단순한 색인 정의와 같이 엄격한 스키마없이 범위 쿼리를 제공합니다. 데이터가 있으면 인덱스에 추가됩니다.
데이터 복제 동일한 데이터의 여러 복사본을 다른 서버 또는 서버 랙에 저장하면 한 서버에 오류가 발생해도 데이터 가용성을 확보하는 데 도움이됩니다. 서버 장애는 주로 동일한 클러스터에서 발생합니다. 마스터 - 슬레이브:
모든 읽기와 쓰기는 마스터에게 발생합니다. 마스터가 실패한 경우에만 슬레이브가 요청을 수신합니다.
마스터 - 슬레이브 복제는 일반적으로 ACID 호환 키 - 값 저장소에서 사용됩니다. 일관성을 최대로 유지하려면 트랜잭션이 완료되기 전에 기본 저장소가 기록되고 모든 복제본이 업데이트됩니다. 이 메커니즘은
2 단계 커밋 ()이라고하며 복제본에 추가 네트워크 및 처리 시간을 만듭니다.
- 마스터 - 마스터: 읽기 및 쓰기는 키를 관리하는 모든 노드에서 발생할 수 있습니다. & ldquo에 대한 개념이 없습니다. 기본 & rdquo; 파티션 소유자.
마스터 - 마스터 복제본은 일반적으로 클러스터가 자동으로 키의 최신 값을 판별하고 오래된 값을 제거하기 위해 일관된 결과를 보입니다. 대부분의 키 - 값 저장소에서 이것은 읽기 시간에 느리게 발생합니다. Riak은 정상 작동 중에 일관성을 검사하는 앤티 - 엔트로피 서비스를 가지고 있기 때문에 예외입니다. 버전 데이터
- 자동 충돌 해결을 사용하려면 최신 버전의 데이터를 표시하는 메커니즘이 필요합니다. 궁극적으로 일관성있는 키 - 값 저장소는 여러 가지 방식으로 충돌 해결을 수행합니다. Riak은 벡터 - 클록 메커니즘을 사용하여 가장 최근의 복제본을 예측합니다. 다른 키 - 값 저장소는 staleness를 나타내는 간단한 타임 스탬프를 사용합니다. 충돌을 자동으로 해결할 수없는 경우 두 데이터 복사본이 클라이언트로 전송됩니다. 클라이언트에 충돌하는 데이터가 다음 상황에서 발생할 수 있습니다.
클라이언트 1이 복제본 A 'Adam: {likes: Cheese}'에 씁니다.
복제본 A는 복제본 B에 데이터를 복사합니다.
클라이언트 1은 복제본 A의 데이터를 'Adam: {likes: 치즈, 증오: 햇빛}'으로 업데이트합니다.
복제본 A는 복제본 B에 최신 데이터를 복사 할 충분한 시간이 없습니다.
클라이언트 2는 복제본 B의 데이터를 'Adam: {likes: 개, 증오: 캥거루}'로 업데이트합니다.
-
이 시점에서 복제본 A와 복제본 B가 충돌하고 데이터베이스 클러스터가 차이점을 자동으로 해결할 수 없습니다.
-
대안 메커니즘은 타임 스탬프를 사용하고 최신 데이터를 나타 내기 위해이를 신뢰하는 것이다. 이러한 상황에서는 응용 프로그램이 값을 업데이트하기 전에 시간 스탬프가 최신 값을 읽는지 확인하는 것이 일반적입니다.
-
수표를 확인하고
메커니즘
-
을 설정합니다.
기본적으로
최신 버전이 아직 버전 2 인 경우 버전 3을 저장합니다.
. 이 메커니즘은 RMU (읽기 일치 업데이트) 또는 읽기 일치 쓰기 (RMW) 라고도합니다. 이 메커니즘은 Oracle NoSQL, Redis, Riak 및 Voldemort에서 사용하는 기본 메커니즘입니다.