요약 트랜잭션의 완화된 격리 수준 중 하나인 직렬성 스냅숏 격리에 대해 이해하게 됨. 직렬성 격리와 좋은 성능을 공존할 수 있는 방법임. 낙관적 동시성 제어 기법으로 볼 수 있고, 스냅숏 격리를 기반으로 함. SSI 는 쓰기 스큐를 처리하기 위해 뒤처진 전제에 기반한 결정 을 이용한다. 오래된 MVCC 읽기 감지 과거의 읽기에 영향을 미치는 쓰기 감지 직렬성 스냅숏 격리는 트랜잭션 상세 동작 추적시 오버헤드 발생함. 2단계 잠금과 달리 잠금을 기다리지 않아도 되기에 빠름 단일 CPU 코어 처리량에도 제한되지 않으므로 여러 파티션으로부터 읽고 쓸 수 있음. 메모 직렬성 스냅숏 격리(SSI) 직렬성 격리와 좋은 성능을 공존할 수 있는 방법임 이 알고리즘 (Serializable Snapshot Isolati..
요약 트랜잭션의 직렬성에 대해 알게 됨. 가장 강력한 격리 수준 동시성 없이 직렬로 실행될 때와 같음. 실제적인 직렬 실행에 대해 이해함 완전히 동시성을 제거함. 단일 스레드 처리량을 높이기 위한 방법을 고민해야함. 스토어드 프로시저 이용 파티셔닝 이용 2단계 잠금에 대해 이해함. 잠금 요구사항이 더욱 강력해짐. 공유, 독점 모드를 이용하여 구현함. 잠금을 많이 사용하므로 교착 상태에 잘 빠지게 됨. 성능 저하의 원인임. 팬텀을 막기 위해서 서술 잠금을 사용함. 팬텀을 막을 수 있지만 현실적으로 너무 오래 걸림. 색인 범위 잠금을 통해 범위 조건을 타협하고 오버헤드를 낮춘다. 메모 직렬성 직렬성 격리는 가장 강력한 격리 수준이라고 여겨짐. 여러 트랜잭션이 병렬로 실행되도 최종 결과는 동시성 없이 한 번에..
요약 완화된 격리 수준중 하나인 쓰기 스큐와 팬텀에 대해 이해함. 더티 쓰기, 갱신 손실과 다른 미묘한 충돌 직렬성 격리를 이용해야만 해결가능 충돌 구체화를 통해 잠금 객체를 추가해도 되지만, 찾아내기 어려움. 메모 쓰기 스큐와 팬텀 더티 쓰기와 갱신 손실과 다른, 더욱 미묘한 충돌임. ex) 의사들이 병원에서 교대로 서는 호출 대기 관리 애플리케이션 on-call 이 2명인 의사가 대기 중인데, 동시에 off 하는 상황임. 최소 한 명의 의사가 호출 대기해야 하는 요구사항을 위반함. 쓰기 스큐를 특징짓기 위와 같은 현상을 쓰기 스큐(write skew) 라고 함. 두 트랜잭션이 두 개의 다른 객체를 갱신하므로 더티 쓰기도 아니고 갱신 손실도 아님. 하지만, 충돌이 발생했고 이는 분명 경쟁조건임. 쓰기 ..
요약 완화된 격리 수준 중 하나인 갱신 손실 방지에 대해 이해함. 원자적 쓰기 연산 명시적인 잠금 갱신 손실 자동 감지 compare-and-set 충돌 해소와 복제 메모 갱신 손실 방지 동시에 실행되는 쓰기 트랜잭션 사이에 발생할 수 있는 충돌로 갱신 손실(lost update)이 있음. 데이터베이스에서 값을 읽고 변경한 후에 변경된 값을 다시 쓸때 발생함. (read-modify-write 주기) 만약 두 트랜잭션이 작업을 동시에 하면, 두 번째 쓰기 작업이 첫 번째 변경을 포함하지 않으므로 변경 중 하나는 손실될 수 있음. 원자적 쓰기 연산 갱신 손실 방지를 위해 여러 데이터베이스에서 원자적 갱신 연산을 제공함. 이 연산은 애플리케이션 코드에서 read-modify-write 주기를 구현할 필요를 ..
요약 트랜잭션의 완화된 격리 수준에 대해 이해함 트랜잭션 격리를 통해 동시성 문제를 감출 수 있음. 직렬성 격리로 동일한 결과가 나오도록 보장할 수 있음. 하지만 그만큼 비용이 많이 듦. 완화된 트랜잭션 격리를 통해, 동시성 이슈를 어느정도 해결할 수 있음. 하지만, 그만큼 버그가 있고, 금전적 손실을 발생시킬 수 있다. 완화된 격리 수준 중 하나인 커밋 후 읽기에 대한 내용을 이해함. 더티 읽기 방지 커밋 후 트랜잭션이 보게 함. 더티 쓰기 방지 먼저 쓴 트랜잭션의 커밋 or 어보트 될 때 까지 다른 쓰기를 지연 시킨다. 로우 수준 잠금을 이용하여 구현한다. 완화된 격리 수준 중 하나인 스냅숏 격리와 반복 읽기에 대한 내용을 이해함. 스냅숏 격리는 커밋 후 읽기의 문제인 일시적 문제를 허용하지 않음. ..
요약 트랜잭션에 대한 내용을 이해함 ACID의 각 의미에 대해 이해함 원자성 일관성 격리성 지속성 트랜잭션의 단일 객체 연산과 다중 객체 연산에 대해 이해함. 단일 객체 연산에서 트랜잭션의 원자성 격리성이 적용되야 함. 다중 객체 연산에서 다른 객체에 대한 쓰기 작업은 코디네이션돼야 함. 메모 7장. 트랜잭션 데이터 시스템은 여러 문제가 생길수 있음. 소프트웨어, 하드웨어는 언제라도 실패 가능 애플리케이션은 언제라도 죽을 수 있음. 네트워크 연결이 끊기면, 애플리케이션-데이터베이스 / 데이터베이스 노드간 통신이 안될 수 있음. 여러 클라이언트가 동시 쓰기를 하면 내용이 덮어씌어질 수 있음. 데이터가 부분 갱신되서 클라이언트가 비정상 데이터를 읽을 수 있음. 클라이언트간 경쟁은 예측하지 못한 버그를 유발할..
요약 파티션 재균형화에 대한 내용을 이해함. 데이터베이스 변화에 따른 노드와 파티션의 재균형화 과정이 필요함. 재균형화 전략에 대해 이해하게 됨 재균형화할 때, 해시값에 mod N 연산을 하면 안됨 노드 이동이 반드시 일어나므로 재균형화 비용이 커짐 파티션 개수 고정 전략 데이터셋 크기가 변경되면, 파티션 개수 설정하기 어려움 동적 파티셔닝 전략 전체 데이터 용량에 맞게 적절히 파티션 개수가 정해짐 사전 분할을 통해, 초기 파티션 집합을 설정해야 함. 노드 비례 파티셔닝 전략 노드당 파티션 개수 비례 전략임. 개별 파티션 크기가 상당히 안정적으로 유지됨. 자동 재균형화와 수동 재균형화 트레이드 오프를 알게 됨. 재균형화는 손이 덜가지만, 재균형화 작업이 굉장히 중요한 작업이므로 장애 발생시 문제가 될 수..
요약 파티셔닝에 대한 내용을 알게됨. 데이터를 파티셔닝 한다 (=샤딩) 확장성 때문에 파티셔닝함. 파티셔닝과 복제에 대한 내용을 이해하게 됨. 한 노드에 여러 파티션이 있을 수 있음. 파티션도 5장에서 말한 복제와 같은 방식으로 복제됨. 키-값 기준 데이터 파티셔닝을 이해하게 됨. 데이터와 질의 부하를 노드 사이에 고르게 분산시키기 위해 파티션을 잘 나눠야 함. 키 범위 기준 파티셔닝 키의 해시값 기준 파티셔닝 쏠린 작업부하와 핫스팟 완화 애플리케이션 처리가 필요 파티셔닝과 보조 색인에 대한 내용을 이해하게 됨. 보조 색인은 모델링에 매우 유용함. 보조 색인이 포함된 데이터베이스를 파티셔닝 하는 방법이 있음. 문서 기주 메모 6장. 파티셔닝 데이터셋이 매우 크거나 질의 처리량이 매우 높다면 복제만으로 부..
요약 리더 없는 복제에서 정족수 일관성의 한계에 대해 알게 됨. 정족수 조건을 만족하지 못하는 경우에 대한 문제가 있음. 최종적 일관성을 허용하도록 합의가 필요함. 느슨한 정족수와 암시된 핸드오프에 대해 알게 됨. 느슨한 정족수 : 정족수를 충족하지 않더라도 쓰기를 허용한다. 암시된 핸드오프 : 일시적으로 수용한 쓰기를 홈노드로 전송한다. 동시 쓰기 감지에 대해 이해함 동시 쓰기로 인해 충돌이 불가피함. 충돌 해소 기법이 여러개 있음. 최종 쓰기 승리 “이전 발생” 관계와 동시성 이전 발생 관계 파악하기 동시에 쓴 값 병합 버전벡터 메모 정족수 일관성의 한계 w + r > n 이 되게끔 w, r 을 선택하면, 읽은 노드 중, 최신 값을 가진 노드가 하나 이상 있어야 함. 보통, r 과 w 값은 노드의 과..
요약 다중 리더 복제에서 쓰기 충돌을 다루는 방법을 이해하게 됨. 동기식과 비동기식 충돌 감지 방법이 있음. 동기로 충돌 감지 만들 수 있지만, 다중 리더 복제 장점을 잃음 비동기로 감지하면 사용자에게 충돌을 해소하게끔 요청해야 하고, 이미 너무 늦음 충돌 회피하는 방식도 있음. 동일한 리더를 거치게 함. 얘도 사실상 단일 리더랑 다를게 없음. 일관된 상태로 수렴하게 한다. 수렴을 위한 다양한 방법을 사용 사용자 정의로 충돌 해소 로직 작성할 수 있음 읽기, 쓰기 시점에 코드 실행함 다중 리더 복제 토폴로지에 대한 내용을 이해함. 노드와 노드간 통신경로를 의미함 데이터베이스 마다 토폴로지가 다름 토폴로지별 장단점이 있음. 전체 연결 토폴로지가 내결함성이 좋지만, 데이터 일관순서가 보장되지 않을 수 있음 ..
요약 복제 지연 문제에 대하 이해하게 됨. 리더와 팔로워 간의 데이터 일시적 불일치를 의미함. 결국 팔로워는 리더를 따라잡게 되고 이를 최종적 일관성이라 함. 복제 지연 문제는 다음 3가지 사례로 해결 방법을 찾을 수 있음. 자신이 쓴 내용 읽기 쓰기 후 읽기 일관성을 가져야 함. 단조 읽기 이전에 새로운 데이터를 읽은 후에는, 예전 데이터를 읽지 않음. 일관된 순서로 읽기 서로 인과성이 있는 쓰기는 동일한 파티션에 기록되게끔한다. 다중 리더 복제 방식에 대해 이해하게 됨. 다음의 장점이 있음. 성능 데이터센터 중단 내성 네트워크 문제 내성 다음의 단점이 있음. 쓰기 충돌을 반드시 해결해야 함 뜻밖의 데이터베이스 상호작용이 발생할 수 있음. 다중 리더 복제는 다음의 상황에 사용됨 다중 데이터센터 운영 오..
요약 2장 분산 데이터에 대해 알게 됨 고부하로의 확장이 필요함. 복제와 파티셔닝이 필요함. 복제의 경우 리더와 팔로워간 복제 서버를 의미함. 동기식, 비동기식 복제 여부를 알게 됨. 노드 중단 처리에 대한 내용을 이해하게 됨. 팔로워 장애 복구 쉬움 리더 장애 복구 까다로움 복제 로그 구현 방식에 대해 알게 됨. 구문 기반 복제 구문을 쓰고, 팔로워에게 전달 쓰기 전 로그 배송 리더에 쓰기 전 로그 배송하여 팔로워가 먼저 업데이트 됨 → 중단 시간 없이 장애 복구 가능 트리거 기반 복제 애플리케이션 코드로 데이터베이스의 데이터 변경시 트리거가 발생하여 코드가 실행되면서 복제 메모 Part2 분산 데이터 2부에서는 저장소와 데이터 검색에 여러 장비가 관여할때 발생하는 일에 대해 알아본다. 여러 장비 간 ..