2024-05-28
1. Log-Structured Storage
앞선 챕터에서 slotted-page를 설명했는데 이는 몇가지 문제가 있을 수 있다. 강의에서는 아래 3가지 경우로 설명 한다.
- Fragmentation : 조각화되는 구조에 대해서 문제가 있다. 만약 tuple이 제거 된다면 남는 공간이 낭비되는 것이다.
- 불필요한 DISK I/O : Tuple은 Page내부에 모두 존재하기 때문에 1개의 tuple을 읽을 때도 Memeory에 Page가 없다면 이를 전부 읽어와야 하는 상황이 된다.
- 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
- 압축에는 2가지 방식이 존재한다. 그림으로 설명
-
단점은 이러한 compaction이 매우 비싸다는 것이다. 이러한 데이터들이 크면 클 수록 증폭되기 때문에 이에 대한 섬세한 제어가 필요하다.
2. Index-Organized Storage
index를 사용하게 되면 좀 더 빠르게 저장을 진행 할 수 있다고 한다. 다만 이는 좀 뒤에서 배우게 됨으로 나중에 다룬다고 이야기 하심.
3. Data Representation
데이터 베이스의 데이터 타입에 대해서 이야기하게 된다. 데이터 tuple은 단순히 byte의 배열로 구성된다. 이런 상황이면 약속된 word-aligned으로 적혀져 있어야 CPU가 접근해서 예외없이 읽을 수 있게 되는 것이다.
(word-aligned : 단어에 맞게 정렬 이런 뜻인데 완벽하게 이해가 되지 않슴다…)
이런 상황을 만들기 위해서 2 방식이 있다
- padding: empty bit를 추가해서 각 tuple을 word-aligned한다.
- 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라는 개념이 등장하는데 이는 시스템의 메타데이터를 저장하고 관리하는 특별한 데이터 베이스가 된다. 이는 데이터에 대한 데이터를 포함하고 있으며 아래와 같은 정보를 표기한다.
- table schema
- index
- view
- constraints
- previleges 등의 정보를 가지고 있게 된다.