2016년 6월 20일 월요일

Storing(데이터 저장)


Database in Files

  • 데이터베이스는 파일의 집합으로 저장된다. 각 파일은 레코드의 연속이고, 레코드는 필드의 연속이다.
  • 간단한 접근
    • 레코드의 크기가 정해져 있다
    • 각 파일은 한 가지 타입의 레코드로만 이루어져 있다
    • 서로 다른 파일은 서로 다른 릴레이션을 위해 사용된다. 이 경우가 가장 구현하기 쉽다. 가변 길이 레코드는 나중에 살펴본다
  • Fixed-Length Records (고정 길이 레코드, 크기 n)
    • i 번째 레코드는 byte n * (i - 1) 에 위치한다
    • 레코드의 접근은 간단하지만 레코드가 디스크 블록에 걸쳐서 나뉘어질 수 있다
      • 하지만 레코드가 경계에 걸쳐있지 않게 해야 한다
  • 레코드의 삭제
    • 레코드를 실제로 지우는 것이 아니라 삭제할 레코드를 free list 에 링크한다


Free List

  • 첫 번째로 삭제된 레코드의 주소를 파일의 헤더에 저장한다
  • 이 첫 번째 레코드에 두 번째로 삭제된 레코드의 주소가 저장된다. 계속 반복한다 (linked list)
  • 주소가 저장된다는 것은 해당 레코드의 주소를 가리키는 "포인터"를 저장한다는 것이다
  • 공간 효율을 높이기 위해서
    • 일반 값들을 저장하기 위해 있는 공간을 재사용 하여 다음 빈 레코드의 포인터를 저장한다
    • 사용 중인(값이 들어있는) 레코드에는 포인터를 저장하지 않는다
  • 새 레코드를 추가할 때 free list의 항목들을 사용한다

Variable-Length Records

  • 가변 길이 레코드는 데이터베이스 시스템에서 몇 가지 경우에 가끔 사용된다
    • 한 파일에 여러 타입의 레코드를 저장할 때
    • 레코드의 타입이 한 개 이상의 필드에서 가변 길이를 허용할 때
  • 가변 길이 레코드는 Slotted Page Structure를 가진다
    • 파일은 페이지의 집합이다
    • Slotted Page의 헤더는 다음의 정보를 포함한다
      • 레코드 엔트리의 개수
      • 블록의 빈 공간의 마지막의 위치
      • 각 레코드의 위치와 크기
      • 페이지 안에서 레코드의 위치가 옮겨질 수 있다. 이렇게 하면 각 레코드 사이에 빈 공간이 없이 유지할 수 있다. 이를 위해 헤더의 레코드에 대한 진입점이 업데이트 되어야 한다
    • 포인터는 레코드를 직접적으로 가리키면 안 된다
      • 대신 레코드는 헤더에 저장된 레코드에 대한 진입점을 가리켜야 한다


Organization of Records in Files

  • Heap
    • 레코드의 위치는 파일 안에 공간이 있다면 어디던 위치할 수 있다
  • Sequential
    • 각 레코드의 search-key를 기준으로 레코드를 순서대로 저장한다
  • Hashing
    • 각 레코드의 일부 속성에 해시 함수가 계산되어 있다
      • 결과는 파일 내 어떤 블록에 레코드가 위치해야 할지 알려준다
  • 각 릴레이션의 레코드는 서로 다른 파일에 저장될 수 있다. 
  • multi-table clustering file organization 에서는 서로 다른 릴레이션의 레코드가 같은 파일에 저장될 수 있다
    • 연관된 레코드를 같은 블록에 저장함으로써 I/O를 최소화하기 위함이다

Sequential File Organization

  • 모든 파일을 순서대로 접근해야 하는 경우에 적합하다
  • search-key를 기준으로 레코드 내 파일이 정렬된다
    • 정렬된 파일은 효율적으로 검색이 가능하지만 유지하기가 어렵다
  • 삭제
    • 포인터 체인을 이용하여 삭제된 튜플을 건너뛴다
  • 삽입
    • 레코드가 삽입되어야 할 위치를 찾는다
      • 만약 빈 공간이 있으면 그 곳에 삽입한다
      • 만약 없다면, overflow block에 삽입한다
      • 두 경우 모두 포인터 체인이 갱신 되어야 한다

Multi-table Clustering


  • 멀티 테이블 클러스터링을 사용하여 여러 개의 관계를 한 개의 파일에 저장한다
    • 여러 개의 릴레이션을 모두 조회해야 하는 쿼리에는 적합하다
    • 한 개의 릴레이션만 조회해야 하는 쿼리에는 좋지 않다
  • 다양한 크기의 레코드가 결과로 나온다
  • 포인터 체인을 추가하여 특정 릴레이션의 레코드를 연결할 수 있다


Data Dictionary Storage

  • Data Dictionary( 혹은 system catalog )는 메타데이터를 저장한다
    • 릴레이션들에 대한 정보
      • 릴레이션의 이름
      • 각 릴레이션의 속성의 타입의 이름
      • 뷰의 정의와 이름
      • 제약 조건
    • 사용자와 비밀번호 같은 접근 정보
    • 뷰와 그 뷰의 정의
    • 물리적인 파일 구조 정보
      • 어떻게 릴레이션이 저장되어 있는가(sequential/hash/...)
      • 릴레이션의 물리적 위치
      • 인덱스
    • 카탈로그식 구조
      • 디스크의 관계적 표현
    • 카탈로그 표현의 예
      • 릴레이션의 집합

댓글 없음:

댓글 쓰기