테이블 엔진
테이블 엔진 (Table Engines)
테이블 엔진(테이블 유형)은 데이터가 어디에·어떻게 저장되고, 어떤 쿼리가 어떻게 지원되며, 동시 데이터 접근, 인덱스 사용, 멀티스레드 요청 실행 가능 여부, 데이터 복제 매개변수를 결정해요.
출처: 문서
본문
테이블 엔진(테이블 유형)은 다음을 결정해요.
- 데이터를 어떻게·어디에 저장하고, 어디에 쓰고, 어디에서 읽을지.
- 어떤 쿼리가 지원되고 어떻게 지원되는지.
- 동시 데이터 접근.
- 인덱스가 있다면 그 사용.
- 멀티스레드 요청 실행이 가능한지.
- 데이터 복제 매개변수.
엔진 계열 (Engine families)
MergeTree
고부하 작업을 위한 가장 보편적이고 기능적인 테이블 엔진들이에요. 이 엔진들이 공유하는 속성은 빠른 데이터 삽입과 그에 따른 백그라운드 데이터 처리예요. MergeTree 계열 엔진은 데이터 복제(Replicated* 엔진 버전), 파티셔닝, 보조 데이터 스킵 인덱스, 그리고 다른 엔진에서 지원하지 않는 다른 기능들을 지원해요.
계열의 엔진들:
Log
최소 기능을 가진 가벼운 엔진들이에요. 많은 작은 테이블(약 1백만 행까지)을 빠르게 쓰고 나중에 전체로 읽어야 할 때 가장 효과적이에요.
계열의 엔진들:
| Log 엔진 |
|---|
| Log 엔진 계열 |
| TinyLog |
| StripeLog |
| Log |
통합(Integration) 엔진
다른 데이터 저장·처리 시스템과 통신하기 위한 엔진들이에요.
계열의 엔진들:
특수(Special) 엔진
계열의 엔진들:
| 특수 엔진 |
|---|
| 특수 테이블 엔진 |
| Alias |
| Distributed |
| Dictionary |
| Merge |
| Executable |
| File |
| Null |
| Set |
| Join |
| URL |
| View |
| Memory |
| Buffer |
| 외부 데이터(External Data) |
| GenerateRandom |
| KeeperMap |
| FileLog |
가상 컬럼 (Virtual columns)
가상 컬럼은 엔진 소스 코드에 정의된 테이블 엔진의 필수 속성이에요. CREATE TABLE 쿼리에 가상 컬럼을 지정해서는 안 되고, SHOW CREATE TABLE과 DESCRIBE TABLE 쿼리 결과에서 볼 수 없어요. 가상 컬럼은 또한 읽기 전용이라 가상 컬럼에 데이터를 넣을 수 없어요. 가상 컬럼에서 데이터를 선택하려면 SELECT 쿼리에 그 이름을 지정해야 해요. SELECT *는 가상 컬럼의 값을 반환하지 않아요. 테이블의 가상 컬럼 중 하나와 같은 이름의 컬럼으로 테이블을 만들면 가상 컬럼에 접근할 수 없게 돼요. 이렇게 하는 것은 권장하지 않아요. 충돌을 피하는 데 도움이 되도록 가상 컬럼 이름은 보통 밑줄로 접두사가 붙어요.
_table— 데이터를 읽은 테이블의 이름을 담아요. 타입: String. 사용되는 테이블 엔진과 무관하게 각 테이블은_table이라는 보편적 가상 컬럼을 포함해요. merge 테이블 엔진으로 테이블을 조회할 때WHERE/PREWHERE절에_table에 대한 상수 조건을 설정할 수 있어요(예:WHERE _table='xyz'). 이 경우_table조건이 만족되는 테이블에 대해서만 읽기 연산이 수행되므로_table컬럼이 인덱스처럼 동작해요.SELECT ... FROM (... UNION ALL ...)형식의 쿼리를 사용할 때_table컬럼을 지정해 반환된 행이 실제로 어떤 테이블에서 왔는지 결정할 수 있어요.