데이터베이스 관련 지식이 "를 달성하기 위해 데이터베이스 시스템", "고성능의 MySQL"과를 참조하십시오. 포괄적 인 두 권의 책이 더 잘. "고성능 MySQL은"보기, 원칙의 관점에서 "달성하기 위해 데이터베이스 시스템"의 관점에서 시작합니다. 보류, 결과는 읽을 수 없습니다 : 관련 지식 학습 강박 관념의 데이터베이스를 가지고 사용하는 경우, 우리는 그것을 구현하는 방법을 이해해야합니다, 직접 "이노 디비 스토리지 엔진 MySQL의 커널을"샀다.
지식 데이터베이스는, 개인적으로 다음과 같은 순서가 합리적이라고 생각합니다.
하드 디스크
두 번째 장에서 "달성하기 위해 데이터베이스 시스템은"혼자 장 디스크 스토리지의 원리를 설명. 컴퓨터 하드웨어에 하드 전용 디스크, 소프트웨어 굴복의 영구 저장 용량의 내장 된 구성 요소를 가지고 있기 때문이다. 따라서 순서대로 디스크 스토리지의 특성을 이해하는 것은 설계 소프트웨어의 뒤에 논리를 이해합니다. 디스크 스토리지는 다음과 같은 특징이 있습니다 :
-
특성 A : CPU 지연 비교는, 디스크 대기 시간이 매우 크다. 1 ~ 10ms의 기계적 하드 드라이브를 하나 개의 I / O 지연, 3.3GHz의 CPU를 들어, 일 비교에서 "최고 성능"에있다, 지시주기는 0.3ns이다. 사이의 차이는 CPU 명령어주기가 1 초, I / O를 지연 한 12 개월 후 기계적인 하드 디스크의 경우 얼마나. 꽃이 감사까지 정말 기다립니다.
-
특징 B : 디스크 블록 장치는, 각 블록에 의해 기록된다. 일반적으로 블록 512byte. 하드 드라이브를 사용하는 것을주의해야한다
不能用轮船只运输一个土豆到美国
. - 특성 C : 랜덤 IO 성능의 IO 성능의 순서보다 훨씬 높은. IO의 순서는 피할 수 있기 때문에 시간과 회전 지연 시간을 추구합니다.
상기의 기능은, 예를 들어, 데이터베이스의 디자인뿐만 아니라 운영 시스템 설계에 지대한 영향을 영향을뿐만 아니라,page cache
읽기 및 쓰기
데이터베이스의 동작은 기본적으로 고차원의 능력이다 : 우리가 가장 자주 작동을 사용하여 데이터베이스를 업데이트 / 선택하고 삭제합니다. 따라서 데이터베이스가 핵심 문제를 해결 고성능 읽기 및 쓰기 달성하기 위해 데이터를 구성하는 방법입니다.
### 트랜잭션
고성능 동시 읽기를 무시하고 동시 시나리오 쓸 수없는, 데이터 일관성 문제가있을 것입니다. 그래서 事务
데이터 일관성의 문제를 해결하는 데 사용됩니다.
기본 각 SQL 문은 트랜잭션이, 당신은 수동으로이 규칙 시점 변화를 저지 설정할 수 있습니다
MySQL의에서, 트랜잭션 격리 수준은 네 가지가 있습니다. 네 사실이 아닌 기계적, 응용 프로그램 시나리오에서 파생 될 수 없습니다.
확약 읽기
수정 된 기록 일 A는하지 제출, 트랜잭션 B는 테이블, 읽기 트랜잭션을 읽습니다. 이다 未提交读
. 우리의 자신의 디자인 데이터베이스의 경우, 제어하는 다른 방법이없는 경우, 그것은 동시성에서 일어날 것입니다, 원본 데이터의 필드를 수정합니다. 더티 데이터를 판독하기 때문에, 또한, 더티 판독이라고.这里我们也可以将事务换一个熟悉的概念:线程来理解
커밋 된 읽기
위의 내용은 未提交读
변경 범위의 내정에 저장하면 문제 때문에 커밋되지 않은 데이터는 다른 트랜잭션에 영향을주지 않습니다. 이 격리 수준은 읽기 최선을 다하고 있습니다. 또한 비 반복 읽기라고도합니다. 두 번 실수의 구현 때문에 서로 다른 결과를 얻을 수 있습니다 내부.
반복 읽기
에 직면 읽어 제출 비 반복 읽기의 질문에 可重复读
격리 수준에 따라 피했다. 그것은 반복적으로 거래를 보장 같은 레코드가 변경되지 않습니다 읽을 수 있습니다. 물론, 경우 내부 업무 기록의 변화, 다른 하나는 말했다. 이 문제는 다른 레벨 [팬텀 판독]에 의해 발생된다. 이 잘 이해된다 : 두 개의 트랜잭션을. 인 읽기 트랜잭션이 존재하지 않는 기록을 작성, B의 거래 기록이 기록됩니다. 거래 쓰기 오류의 가능한 경우가 발생합니다.
직렬화
트랜잭션 실행 순서. 최소 성능 연습.
색인
쿼리 데이터는 일반적으로 두 가지 일반적인 시나리오를 가지고 等值查询
와 区间查询
. 즉 select * from table where field=a
또는 select * from table where field between a and b
. 인덱스없이, 유일한 방법은 전체 테이블 스캔입니다. 그것은 건초 더미 접근 방식에서 바늘입니다. 어떻게 최적화 문제 : 프로그래머는 일반적으로 두 가지 점에 초점을 맞 춥니 다. 에 해당하는 쿼리의 경우, 가장 좋은 방법은 해시를 최적화 할 수 있습니다. 정렬 : 그것은 숨겨진 논리를 가지고 있기 때문에 범위 쿼리의 경우,하지 해시 알고리즘에 온다. 정렬 된 어레이, 링크드리스트 : 통상적으로, 데이터 구조를 정렬하는 기능을 구비한다. 테이블을 이동합니다. AVL 나무, 레드 - 블랙 트리, B 트리, B + 트리.
왜 B의 + 트리?
- 하드 블록 장치. A B + 트리를 사용하여 세 개의 층을 초과하지 않는 B 트리의 레벨을 제어하는, 상기 N 개의 요소에 동일한 블록에 수용 될 수있다. IO의 수를 감소.
- B +는 노드 목록을 잎입니다. 주문 디스크 IO 작업을 용이하게한다.
공연
성능 응답 시간입니다. 아이디어는 성능 문제를 하향식 (top-down) 방식으로 문제를 해결하는 것입니다 :
- CPU는, 메모리, 네트워크, IO는, 하드 디스크는 OK입니까?
- 아니 OK에만 삼가지 경우 : 충분한 마진 또는 구성 불합리한 또는 순서가.
- 인덱스 최적화, 테이블의 구조를 최적화, 쿼리가 손에 머리를 최적화.
성능 문제는 운영 체제에 관한 더 많은 지식이 필요합니다.
복사
이것은 MySQL의 살인자입니다. 복제하지 않고, MySQL은 인기가 될 수 없습니다. 복사 기능에서 일어나 :,로드 밸런싱, 고 가용성, 장애 복구, 백업을 별도의 읽기 및 쓰기 테스트를 업그레이드합니다. 메인 스트리트는 학대의 개념이다.
방법의 복사 : 기반 로그 및 행 기반 복제를 복사합니다.
확장 성
확장 성 자원 용량을 증가시켜 시스템 용량을 개선하는 것입니다. 이러한 분리하여 MySQL을로 읽기 및 쓰기, 노예 각 노드를 추가, 데이터베이스 동시성 수준의 읽기 능력이 향상되었습니다. 물론, 시스템 계층 있기 때문에, 각 레벨은 전체 시스템의 확장 성 확장 성을 위해 자격 지원합니다.
데이터베이스 수준의 공통 전략은 이러한 전략의 하위 라이브러리 서브 테이블을 확장하는 것입니다.
또한, 시스템의 성능과 확장 성이 다른 두 가지입니다. 하이브 예를 들어, 낮은 성능,하지만 그것의 확장에 영향을주지 않습니다.
고 가용성
가용성은 본질적으로 가동 중단 시간입니다. 만약 컴퓨터, 50 %의 사람, 1 일 8 시간 근무, 사람들의 33 % 가용성의 일반적인 가용성의 관점에서 다른 사람.
고 가용성 하향식, 두 가지 방법을 사용하는 아이디어는 : 提升平均失效时间间隔
짧은에, 가능한 한 두 시간 간격의 중간에 시스템을 만드는 것입니다, 降低平均恢复时间
짧은에, 복구하는 시간이있다 더 짧은. 따라서, 더 고 가용성 아키텍처는 MySQL과의 상호 백업,로드 밸런싱과 같은 것들의 수준이다.
백업
백업은 쉽게 항목을 간과한다. 일반적으로 그 중요한 순간 중 하나가 내 휴대 할 필요가보고 기다립니다. 세 가지 기본 백업 역할이 있습니다 재해 복구, 감사, 테스트.
"고성능 MySQL은"책은 깊이와 폭 균형의, 순전히 독서의 개발을위한 세부 사항의 원칙이다. 좀 더 깊이있는 연구를 원하는 경우, 추정 "데이터베이스 시스템 구현은"더 적절한 책이다.