너 는 일의 4 대 특성 을 알 수 있 지만,너 는 반드시 일의 실현 원 리 를 알 고 있 는 것 은 아니다.

데이터 베 이 스 를 말한다 면 반드시 사 무 를 이야기 할 것 입 니 다.업무 도 면접 에서 자주 묻 는 질문 입 니 다.우 리 는 먼저 면접 장면 을 보 겠 습 니 다.
   :"          ?"
 :"ACID,    (Atomicity)、   (Isolation)、   (Durability)、   (Consistency)!"
   :"  MySQL      InnoDB              ?"
 :"  ...  ....,        "
   :"        ,    ,       ~"

이것 은 비교적 흔히 볼 수 있 는 면접 장면 일 것 입 니 다.당신 은 업무 의 4 대 특성 에 대답 하 였 을 지 모 르 지만 그의 실현 원 리 를 모 를 것 입 니 다.오늘 우 리 는 카드 업무 의 4 대 특성 과 실현 원리 에 대해 원리 의 실현 에 대해 이 글 은 대충 소개 할 뿐 더 많은 세부 사항 은 나의 후속 글 에 관심 을 가 질 수 있다.
데이터베이스 의 사 무 는 네 가지 특성 이 있 는데 그것 이 바로 원자 성,격 리 성,영구적,일치 성 이다.다음은 이 네 가지 특성의 정의 와 InnoDB 엔진 에서 어떻게 실현 되 었 는 지 소개 한다.
원자 성
정의.
한 번 의 조작 은 모두 성공 하거나 모두 실패 할 수 없다.예 를 들 어 우리 의 이체 작업 은 출납자 가 성공 하 는 것 을 허락 하지 않 고 수취인 이 실패 하 는 상황 은 모두 성공 하거나 많이 실패 하면 중간 상태 가 나타 날 수 없다.
이루어지다
InnoDB 엔진 은 undo log(스크롤 로그)를 사용 하여 원자 작업 을 보장 합 니 다.데이터베이스 의 모든 데이터 변경(INSERT,DELETE,UPDATE)은 undo log 에 기 록 됩 니 다.예 를 들 어 다음 과 같은 작업 들:
4.567917.당신 이 기록 을 삽입 할 때 적어도 이 기록 의 주 키 값 을 기록 해 야 합 니 다.그 다음 에 스크롤 백 할 때 이 주 키 값 에 대응 하 는 기록 을 삭제 하면 됩 니 다
4.567917.당신 은 기록 하 나 를 삭 제 했 습 니 다.적어도 이 기록 중의 내용 을 모두 기록 해 야 합 니 다.그러면 다시 굴 러 갈 때 이 내용 으로 구 성 된 기록 을 표 에 삽입 하면 됩 니 다
4.567917.당신 은 기록 을 수정 하 였 습 니 다.적어도 이 기록 을 수정 하기 전의 낡은 값 을 모두 기록 해 야 합 니 다.그러면 다시 굴 러 갈 때 이 기록 을 낡은 값 으로 업데이트 하면 됩 니 다
트 랜 잭 션 이 실 패 했 거나 rollback 방법 을 호출 했 을 때 스크롤 백 이벤트 가 발생 합 니 다.undo log 에 기록 되 어 있 는 데 이 터 를 수정 전의 모습 으로 스크롤 백 합 니 다.
undo log 에 대한 더 많은 정 보 는 나중에 따로 글 을 써 서 카드 를 찍 습 니 다.
격 리 성
정의.
여러 개의 사무 가 동시에 실 행 될 때 사무 내부 의 조작 과 다른 사 무 는 격 리 되 고 동시에 실 행 된 각 사무 간 에 서로 간섭 해 서 는 안 된다.
이루어지다
격 리 성 은 더러 운 읽 기(dirty read),중복 읽 기 불가(non-repeatable read),환 독(phantom read)등 문 제 를 도입 할 수 있 으 며,이러한 문 제 를 해결 하기 위해'격 리 단계'라 는 개념 을 도입 했다.
SQL 표준 트 랜 잭 션 격 리 단 계 는 읽 기 미 제출(read uncommitted),읽 기 제출(read committed),중복 읽 기(repeatable read),직렬 화(serializable)를 포함 합 니 다.
4.567917.읽 기 미 제출:한 사무 가 아직 제출 되 지 않 았 을 때 변경 사항 은 다른 사무 에 의 해 볼 수 있 습 니 다
4.567917.읽 기 제출:하나의 사 무 를 제출 한 후에 야 변경 사항 을 다른 업무 에 볼 수 있 습 니 다
  • 중복 읽 기 가능: 하나의 업무 수행 과정 에서 보 이 는 데 이 터 는 항상 이 업무 가 시 작 될 때 보 이 는 데이터 와 일치 합 니 다.물론 중복 읽 기 격 리 단계 에서 변경 사항 을 제출 하지 않 으 면 다른 사무 에 도 보이 지 않 습 니 다

  • 4.567917.직렬 화: 말 그대로 같은 줄 의 기록 에 대해'쓰기'는'쓰기 자물쇠','읽 기'는'읽 기 자물쇠'를 붙인다.읽 기와 쓰기 자물쇠 가 충돌 할 때,방문 한 업 무 는 이전 업무 가 완 료 될 때 까지 기 다 려 야 계속 실 행 될 수 있 습 니 다
    SQL 표준 에 따 르 면 서로 다른 격 리 단계 에 대해 동시 다발 사 무 는 심각 한 정도 의 문제 가 발생 할 수 있 고 구체 적 인 상황 은 다음 과 같다.
    격 리 단계
    더 럽 게 읽다
    반복 해서 읽 을 수 없다
    환독 하 다
    이 가능 하 다,~할 수 있다,...
    이 가능 하 다,~할 수 있다,...
    이 가능 하 다,~할 수 있다,...
    불가능
    이 가능 하 다,~할 수 있다,...
    이 가능 하 다,~할 수 있다,...
    불가능
    불가능
    이 가능 하 다,~할 수 있다,...
    불가능
    불가능
    불가능
    위 에는 몇 가지 격 리 단계 에서 발생 할 수 있 는 병발 문제 가 있 지만,당신 이 엄격하게 격 리 할 수록 효율 이 낮 아진 다 는 것 을 말 할 필요 가 있다.
    InnoDB 엔진 은 어떻게 격 리 성 을 보장 합 니까?자물쇠 와 MVCC 메커니즘 을 이용 하 다.여기 서 MVCC 체 제 를 간단하게 소개 하고 여러 버 전의 병행 제어 라 고도 합 니 다.READ COMMITTD,REPEATABLE READ 라 는 두 가지 격 리 단 계 를 사용 하 는 업무 에서 모든 기록 은 업데이트 할 때 스크롤 백 작업 을 동시에 기록 하면 하나의 버 전 체인 이 형성 되 고 일반적인 SELECT 작업 을 수행 할 때 기 록 된 버 전 체인 을 방문 하 는 과정 입 니 다.이렇게 하면 서로 다른 업무 의 읽 기-쓰기,쓰기-읽 기 작업 을 병행 하여 시스템 성능 을 향상 시 킬 수 있다.
    지속 성
    정의.
    업무 가 제출 되면 데이터베이스 에 대한 변 화 는 영구적 이 어야 한다.다음 의 다른 조작 이나 고장 은 그 에 게 어떠한 영향 도 주어 서 는 안 된다.
    이루어지다
    지속 성 을 확보 하 는 것 은 매우 간단 하 다.즉,매번 업 무 를 제출 할 때마다 데 이 터 를 디스크 에 닦 는 것 이다.그러면 반드시 안전성 을 확보 할 수 있다.그러나 매번 업 무 를 제출 할 때마다 데 이 터 를 디스크 에 기록 하면 빈번 한 IO 작업,원가 가 너무 높 고 데이터 뱅 크 의 성능 이 매우 낮 기 때문에 이런 방식 은 바람 직 하지 않다 는 것 을 알 아야 한다.
    InnoDB 엔진 은 어떻게 해결 되 나 요?InnoDB 엔진 은 이 지속 적 인 문 제 를 해결 하기 위해 중간 층 을 도입 했다.우 리 는 이것 을 redo log(압축 파일 로그)라 고 부른다.
    왜 redo log 를 도입 합 니까?redo log 는 지속 적 이 고 데이터 뱅 크 의 성능 을 확보 할 수 있 습 니 다.직접 브러시 에 비해 redo log 는 다음 과 같은 두 가지 장점 이 있 습 니 다.
    4.567917.redo log 는 부피 가 작고 어느 페이지 에서 무엇 을 수 정 했 는 지 만 기록 되 어 있 기 때문에 부피 가 작고 브러시 가 빠르다
  • redo log 는 끝까지 추가 하 는 것 으로 순서 IO 에 속한다.효율 은 분명히 랜 덤 IO 보다 빠르다

  • InnoDB 엔진 은 어떻게 만 들 었 나 요?업데이트 가 필요 한 기록 이 있 을 때,InnoDB 엔진 은 먼저 기록 을 기록 합 니 다. redo log 에 메모리 업데이트 가 완료 되 었 습 니 다.데이터 베 이 스 를 지연 시 켜 다시 시작 할 때 redo log 의 내용 을 데이터베이스 에 복원 한 다음 에 undo log 와 binlog 내용 에 따라 데 이 터 를 굴 릴 지 제출 할 지 결정 합 니 다.
    더 많은 redo log,뒤에 나 는 단독으로 글 을 쓸 계획 이다.
    일치 성
    정의.
    일치 성 은 간단하게 말하자면 데이터 집행 전후 에 모두 합 법 적 인 상태 에 있어 야 한 다 는 것 이다.예 를 들 어 주민등록번호 가 중복 되 어 서 는 안 되 고 성별 은 남자 나 여자 만 있 을 수 있 으 며 수 능 의 점 수 는 0~750 사이 에 만 있 을 수 있다.신호등 은 3 가지 색깔 만 있 고 집 값 은 마이너스 가 될 수 없다 는 등 이런 제약 에 부합 되 는 데이터 만 효과 가 있다.예 를 들 어 어떤 아이 가 너 에 게 수 능 시험 에서 1000 점 을 받 았 다 고 말 했다.너 는 듣 자마자 그 가 허튼소리 하 는 것 을 알 았 다.데이터베이스 세 계 는 현실 세계 의 한 시사 일 뿐 현실 세계 에 존재 하 는 제약 도 당연히 데이터베이스 세계 에서 나타 나 야 한다.만약 데이터베이스 에 있 는 데이터 가 모두 현실 세계 의 제약(all defined rules)에 부합된다 면 우 리 는 이 데이터 들 이 일치 하거나 일치 성에 부합된다 고 말 합 니 다.
    이루어지다
    데이터 뱅 크 의 데이터 일치 성 을 확보 하려 면 다음 과 같은 두 가지 측면 에서 노력 해 야 한다.
    4.567917.데이터 뱅 크 의 일부 특성 을 이용 하여 일부 일치 성 수 요 를 확보한다.예 를 들 어 특정한 열 이 4.567914 라 고 성명 한다. 자,거절 합 니 다
    4.567917.대부분 은 우리 프로그래머 가 업무 코드 를 작성 할 때 보증 해 야 합 니 다
    이상 은 제 가 오늘 공유 하고 자 하 는 내용 입 니 다.이 글 이 당신 의 학습 이나 업무 에 도움 이 되 기 를 바 랍 니 다.읽 어 주 셔 서 감사합니다.

    좋은 웹페이지 즐겨찾기