데이터베이스 파일 구조

개발기록·2024년 7월 2일

CS

목록 보기
3/6

파일 구조

  • 레코드가 파일에 저장될 때 파일 구조에 따라 다양한 방식으로 저장된다

Heap

  • 레코드를 아무 빈 공간에 채워 넣는 방식이다
  • 한 번 저장된 레코드는 이동 시키지 않는다
  • 빈 메모리 공간을 찾기 위해 Free-space map을 사용한다
  • Free-space map은 block 마다 하나의 엔트리를 사용하여 block의 빈 공간의 비율을 나타낸다
  • 위의 배열은 하나의 block 마다 3비트를 사용하여 표현한 것으로 첫 번째 block은 4/8의 공간이 비어있음을 알 수 있다
  • 이를 메모리 공간을 더 효율적으로 사용하기 위해 n개의 block 마다 빈 공간의 비율을 나타내도록 할 수 도 있다
  • 매번 데이터의 삽입/삭제 마다 free-space map을 수정하는 것은 비효율적이고 free-space map에 약간의 오차는 허용되기 때문에 주기적으로 update를 하는 방식을 사용한다

Sequential

  • Sequential 파일 구조는 레코드 순서가 필요한 경우 사용한다
  • search-key에 의해 레코드를 순서대로 저장한다
  • 그림과 같이 새로운 데이터가 들어오면 search-key를 통해 들어갈 자리를 탐색한다
  • 해당 block에 자리가 있으면 저장을 하고 pointer를 수정하면 된다
  • 자리가 없으면 다른 overflow block에 저장하고 pointer를 수정해야 하기 때문에 추가적인 I/O를 사용하게 된다
  • 시간이 지날 수 록 overflow block이 많아지기 때문에 주기적으로 파일을 재구성하여 순서를 정리한다

Multitable Clustering

  • 이 방식은 서로 다른 테이블에 있는 레코드 여도 서로 연관된 레코드라면 하나의 블록에 저장하도록 하여 I/O를 줄이는 방식이다
  • JOIN과 같은 연산에 유리하다는 장점이 있다
  • 하지만 단일 테이블에 대해서 조회하는 경우에 비효율적일 수 있다
  • 레코드의 종류를 구분하기 위해 같은 레코드인 경우 pointer로 연결하여 구분 할 수 있다

Data Dictionary Storage

  • 이는 Meta Data를 저장하는 공간이다
    • relation 이름
    • attribute의 이름, 길이 , type
    • view 이름, definition 정보
    • 통계 데이터
    • 유저 정보
    • 물리 저장 정보 (파일 구조 등등)
    • 인덱스 정보
  • 메타 데이터는 DBMS에 의해 매우 자주 사용되는 데이터이다
  • 따라서 메타데이터 자체를 RDB에 저장해두고 SQL을 이용하여 조회하여 사용한다
  • 이 때 성능을 위해 아예 메모리에 올려두고 사용하는 방법도 있다

0개의 댓글