Log 엔진 계열에 속합니다. Log 엔진 계열 문서에서 Log 엔진의 공통 속성과 차이점을 확인하십시오.
Log는 컬럼 파일과 함께 작은 “마크” 파일이 저장된다는 점에서 TinyLog와 다릅니다. 이 마크는 각 데이터 블록마다 기록되며, 지정된 수의 행을 건너뛰기 위해 파일 읽기를 시작할 위치를 나타내는 오프셋을 포함합니다. 따라서 여러 스레드에서 테이블 데이터를 읽을 수 있습니다.
동시 데이터 액세스 시 읽기 작업은 동시에 수행할 수 있지만, 쓰기 작업은 읽기 작업과 다른 쓰기 작업을 차단합니다.
Log 엔진은 인덱스를 지원하지 않습니다. 또한 테이블에 대한 쓰기가 실패하면 테이블이 손상되며, 이후 읽기를 수행하면 오류가 반환됩니다. Log 엔진은 임시 데이터, 한 번만 쓰는 테이블, 테스트 또는 데모 용도에 적합합니다.
테이블 생성
데이터 쓰기
Log 엔진은 각 컬럼을 별도의 파일에 기록하여 데이터를 효율적으로 저장합니다. 각 테이블에 대해 Log 엔진은 지정된 저장 경로에 다음 파일을 기록합니다:
<column>.bin: 각 컬럼의 데이터 파일로, 직렬화되고 압축된 데이터를 포함합니다.__marks.mrk: 삽입된 각 데이터 블록의 오프셋과 행 수를 저장하는 마크 파일입니다. 마크는 읽기 시 관련 없는 데이터 블록을 건너뛸 수 있게 하여 엔진이 쿼리를 효율적으로 실행할 수 있도록 합니다.
쓰기 과정
Log 테이블에 기록되면:
- 데이터는 직렬화되고 압축되어 블록으로 만들어집니다.
- 각 컬럼에 대해 압축된 데이터가 해당
<column>.bin파일에 추가됩니다. - 새로 삽입된 데이터의 오프셋과 행 수를 기록하기 위해, 이에 대응하는 항목이
__marks.mrk파일에 추가됩니다.
데이터 읽기
SELECT 쿼리는 행을 예측할 수 없는 순서로 반환합니다. 행을 정렬하려면 ORDER BY 절을 사용하십시오.
사용 예시
INSERT 쿼리를 사용해 <column>.bin 파일 안에 두 개의 데이터 블록을 생성했습니다.
ClickHouse는 데이터를 조회할 때 여러 스레드를 사용합니다. 각 스레드는 서로 다른 데이터 블록을 읽고, 작업이 끝나는 대로 결과 행을 독립적으로 반환합니다. 따라서 출력에서 행 블록의 순서는 입력에 있는 동일한 블록의 순서와 일치하지 않을 수 있습니다. 예시는 다음과 같습니다: