2024-05-28

1. Log-Structured Storage

앞선 챕터에서 slotted-page를 설명했는데 이는 몇가지 문제가 있을 수 있다. 강의에서는 아래 3가지 경우로 설명 한다.

  1. Fragmentation : 조각화되는 구조에 대해서 문제가 있다. 만약 tuple이 제거 된다면 남는 공간이 낭비되는 것이다.
  2. 불필요한 DISK I/O : Tuple은 Page내부에 모두 존재하기 때문에 1개의 tuple을 읽을 때도 Memeory에 Page가 없다면 이를 전부 읽어와야 하는 상황이 된다.
  3. Random Disk I/O : 20개의 각기 다른 Tuple을 읽기 위해서는 20개의 각기 다른 Page를 읽어야한다.

이러한 구조를 개선한 구조가 Log-Structued Storage가 된다. 최근에 대부분의 데이터 베이스가 채택하는 저장 방식이며 기억에는 spark 또한 RDD라는 구조를 가지는 데 이 구조가 Log-Structued Storage와 유시하다.

이 구조는 DMBS가 record(tuple의 변화 기록)를 저장한다. 이러한 record는 Memory에 저장이 되고 순차적으로 데이터 베이스이 변화를 기록한다.

  • Record는 Tuple의 고유 값 (unique identifier)를 가진다. 이렇게 해야 어떤 데이터가 변화했는지 확인 할 수 있다. 대신 PUT/DELETE만을 사용해서 기록을 진행한다.

  • 데이터를 읽기위해서 DBMS는 모든 log file을 가장 나중에 저장된 것부터 읽고 값을 리턴한다.

  • 쓰는 것은 마지막에만 추가하기 때문에 굉장히 빠르지는 읽는 것은 느릴 수 있다.

  • 이러한 긴 읽기 시칸을 피하기 위해 DBMS는 index를 사용할 수 있다. (나중에 나올 예정이다.)

  • log는 매우 클 수 있다. 따라서 DBMS는 어떤 주기를 가지고 데이터를 Compact(압축)한다.

  • 압축후에는 필요에 의해 unique identifier를 기준으로 정렬을 진행할 수 있다.

    • 압축에는 2가지 방식이 존재한다. 그림으로 설명
      • Level Compection
      A B C D
      A BC D
      ABC D
      ABCD
      
      • Universal Compection
      Level0 A B
      Level1 AB 
      |
      Level0 C D
      Level1 AB CD
      Level2 ABCD
      
  • 단점은 이러한 compaction이 매우 비싸다는 것이다. 이러한 데이터들이 크면 클 수록 증폭되기 때문에 이에 대한 섬세한 제어가 필요하다.

2. Index-Organized Storage

index를 사용하게 되면 좀 더 빠르게 저장을 진행 할 수 있다고 한다. 다만 이는 좀 뒤에서 배우게 됨으로 나중에 다룬다고 이야기 하심.

3. Data Representation

데이터 베이스의 데이터 타입에 대해서 이야기하게 된다. 데이터 tuple은 단순히 byte의 배열로 구성된다. 이런 상황이면 약속된 word-aligned으로 적혀져 있어야 CPU가 접근해서 예외없이 읽을 수 있게 되는 것이다.

(word-aligned : 단어에 맞게 정렬 이런 뜻인데 완벽하게 이해가 되지 않슴다…)

이런 상황을 만들기 위해서 2 방식이 있다

  1. padding: empty bit를 추가해서 각 tuple을 word-aligned한다.
  2. recordering: 각기 다른 데이터 type을 가장 완벽한 순서에 맞게 정렬하는 작업이다. 이중 두번째 recordering은 비용이 많이 들기 때문에 잘 사용하지 않을 수 있다.

Integers : INTEGER, BIGINT, SMALLINT, TINYINT

Variable Precision Number : FLOAT, REAL

Fixed-Point Precision Number : NUMERIC, DECIMAL

Variable-Length Data : VARCHAR, VARBINARY, TEXT, BLOB

Dates and Times : TIME, DATE, TIMESTAMP

Null DATA TYPE

이중에 궁금한 부분은 Variable Precision Number 와 Fixed-Point Precision의 차이이다.

  • Variable Precision Number : 가변 정밀도 숫자
    • 정밀도가 가변적이며 필요한 수만큼의 자리수를 이용해서 숫자를 표기한다.
    • 3이라는 값은 정도에 아래와 같이 구분되며 이에 값이 달라질 수 있다.
      • 3.000000000000
      • 2.999999999999
    • 장점은 매우 큰 숫자나 작은 숫자를 표현할 수 있으며 정밀도와 범위가 유동적이다.
    • 단점은 계산속도가 느릴 수 있으며, 메모리 사용량이 증가할 수 있다.
  • Fixed-Point Precision Number : 고정 소수점 숫자
    • 소수점 이하의 자릿수가 고정되어 있으며 일반적으로 수수점 이하의 자리수는 동일하게 유지된다.
    • 장점은 계산속도가 빠르고 일정한 정밀도를 유지할 수 있다.
    • 단점은 표기하는 숫자의 범위가 제한적이며 overflow || underflow가 발생할 수 있다.

4. System Catalogs

이 장은 schema에 관한 이야기인데 tuple은 cpu가 읽기 위해서 특정한 meta-data가 필요하다는 것이다. 이를 Internal-Cagtalog라고 한다

여기서 Metadata Contents라는 개념이 등장하는데 이는 시스템의 메타데이터를 저장하고 관리하는 특별한 데이터 베이스가 된다. 이는 데이터에 대한 데이터를 포함하고 있으며 아래와 같은 정보를 표기한다.

  1. table schema
  2. index
  3. view
  4. constraints
  5. previleges 등의 정보를 가지고 있게 된다.