DBMS의 구조
사용자는 SQL을 통해 데이터베이스에 접근할 수 있습니다.
그리고 사용자가 요청한 SQL 쿼리는 DBMS 내부에서 처리되는데, 아래와 같은 레이어를 거칩니다.
1. Query 파싱 & 최적화
사용자가 입력한 SQL 쿼리가 올바른지 체크한 후 해당 쿼리를 수행하는데 시간이 적게 걸리는 효율적인 Relational 쿼리로 변환하는 작업을 진행합니다.
2. File(Index) Management
데이터베이스의 테이블과 레코드들을 페이지로 나누어서 관리하기 위한 레이어입니다. 페이지로 나누는 이유는 원하는 레코드를 더 용이하게 찾기 위함입니다.
4. Disk Space Management
실제 디스크에 접근하여 I/O 작업을 수행하는 레이어입니다. File Management에서 logical한 페이지 번호를 통해 특정 페이지에 대한 요청이 들어오면, 이를 물리적인 주소로 변환하여 입출력을 수행합니다.
즉, DBMS가 사용자가 원하는 레코드에 대한 정보를 File Manager에 전달하면, File Manager는 해당 레코드가 어떤 page에 저장되어 있는지를 찾아서 Disk Manager에게 전달하고, Disk Manager는 해당 페이지의 물리적 위치를 찾아 디스크에 입출력을 수행합니다.
여기서, 디스크와 메모리의 속도 차이때문에, File Management에서 매번 디스크로 I/O작업을 요청하면 오버헤드가 매우 커지게됩니다. 이를 해결하기 위해 2번과 4번 레이어 사이에 추가적인 레이어를 둘 수 있습니다.
3. Buffer Management
디스크에서 읽어온 페이지들을 메인메모리(RAM, Buffer)에 저장해두어 요청이 더 빠르게 수행될 수 있도록 합니다.
만약 요청이 들어온 페이지가 버퍼에 존재한다면, 디스크에 접근하지 않고 메인메모리에서 바로 읽어오게 됩니다. 따라서 데이터베이스가 마치 메인메모리에 존재하는 듯한 착각을 주며 빠르게 동작할 수 있게 됩니다.
없어도 데이터를 읽고쓰는 측면에서는 문제가 없지만, 속도에 유의미한 차이가 생기기 때문에 거의 필수적인 레이어입니다.
각 레이어는 인접한 레이어와만 상호작용을 할 수 있습니다. 예를 들어, Disk Manager에서 File Manager를 바로 접근할 수 없고, 항상 Buffer layer를 통해야만합니다.
또한 상위 레이어는 하위 레이어가 하는 일에 대해 신경쓸 필요가 없습니다. 따라서 하위 레이어에서 문제가 생겨도, 상위레이어에는 전혀 영향이 가지 않습니다.
위의 조건을 만족하는 DBMS는 관리가 편리하고, 용이하게 성능을 측정할 수 있습니다.

그리고 데이터베이스가 해결해야하는 큰 문제에는 다음의 두 가지가 있습니다.
1. Concurrency Control : 여러 명의 사용자가 데이터베이스에 함께 접근할 때, 정확한 동작을 보장하는 것 (마치 각 사용자들이 데이터베이스를 혼자 사용하는 것 같이 만들어주는 것)
2. Recovery : 데이터베이스 사용 중 Crash와 같은 문제가 발생하는 경우 데이터의 신뢰성을 보장하는 것

데이터베이스의 테이블은 왼쪽 사진과 같이 파일에 저장됩니다.
파일은 여러 페이지로 이루어지고, 각 페이지는 레코드들로 이루어집니다.
레코드가 페이지에 저장되는 방식에는 다양한 방식이 있을 수 있습니다.
그리고 파일 내의 페이지들은 B+ 트리등의 자료구조를 이용해 효율적으로 관리할 수 있습니다.
'데이터베이스' 카테고리의 다른 글
| 06. 데이터베이스 - Buffer Management (0) | 2022.08.10 |
|---|---|
| 05. 데이터베이스 - File Management, Index (0) | 2022.08.08 |
| 04. 데이터베이스 - Disk Space Management (0) | 2022.08.06 |
| 02. 데이터베이스 - SQL (0) | 2022.07.30 |
| 01. 데이터베이스 Intro (0) | 2022.07.30 |