교과서 데이터베이스 시스템 개념과 같은 데이터베이스 시스템 자습서에는 Buffer Pool/Buffer Manager/Pager /라는 모듈이 있습니다. 나는 그것에 대해 많은 세부 사항을 보지 못했고, 그래서 당신은 어떻게 동시의 성능을 향상 시키시겠습니까?데이터베이스 시스템에서 버퍼 풀의 동시 성능을 향상시키는 방법은 무엇입니까?
예를 들어, 우리는 Trie 지수가 있다고 가정 해 봅시다. 우리가 버퍼 풀없이 trie 내부에서 페이징을한다면 리프 노드를 동시에로드하거나 제거하는 다중 쓰레드를 쉽게 가질 수 있습니다 : 꼭 필요한 노드의 공유 잠금을 획득하고 잎 노드의 부모
그러나 버퍼 풀이 페이징 작업을 처리하도록한다면 버퍼 풀의 배타적 잠금을 획득해야 할 수도 있습니다. 그런 다음 하나의 스레드 만 동시에 페이지를로드하거나 제거 할 수 있습니다.
실제로 데이터베이스 구현에서이 작업을 시도했습니다. 이전 버전에는 v 퍼 풀이 없으며 trie 인덱스에서 페이징 작업을 관리합니다. 그리고 새 버전에는 trie 색인 자체 대신 버퍼 풀이 있습니다. 페이지 ID를 버퍼 풀의 해당 페이지에 매핑하는 해시 맵을 보호하는 큰 잠금 장치가 있습니다. 단일 스레드 테스트는 40 % 빨라지지만 10 개의 동시 스레드로 5 배 느려집니다!
자물쇠없는 데이터 구조가 도움이 될 것 같습니까? 그러나 나는 또한 그것을 똑바로 생각하기가 어려울 것이라고 생각합니다. 그렇다면 어떻게 버퍼 풀을 설계하고 구현합니까? 감사!