[Clickhouse] Engine: Buffer (Legacy)
Buffer๋ ๋ณด์กฐ์ ์ธ ์ฉ๋๋ฅผ ์ํด ์กด์ฌํ๋ ์ธ๋ฉ๋ชจ๋ฆฌ ํ
์ด๋ธ ์์ง์ด๋ค.
ํนํ ์ฐ๊ธฐ ์ฒ๋ฆฌ๋์ ๋์ด๊ธฐ ์ํด์, ์ฐ๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๋ฒํผ๋งํ๋ค๊ฐ ํ๋ฒ์ ๋ถ๋ ์ฉ๋๋ก ์ด๋ค.
๋ง์ฝ ์ด๋ฐ ์์ผ๋ก ์๋ณธ ํ
์ด๋ธ์ด ์๋ค๊ณ ํ๋ฉด
๋ค์๊ณผ ๊ฐ์ด ์๋ณธ์ ๋ํ ๋ฒํผ ํ ์ด๋ธ์ ์ ์ํ ์ ์๋ค.
CREATE TABLE ๋ฒํผํ
์ด๋ธ๋ช
AS ์๋ณธํ
์ด๋ธ๋ช
ENGINE = Buffer(
currentDatabase(), -- ๋์ DB
'ํ
์ด๋ธ๋ช
', -- ๋์ ํ
์ด๋ธ
16, -- num_layers
5, 60, -- min_time, max_time
10000, 1000000, -- min_rows, max_rows
1048576, 104857600 -- min_bytes, max_bytes
);
๋์ง๋์ง ๋ถ์ ์ต์
๋ค์ด ์๋ flush ์กฐ๊ฑด์ ์ ์ํ๋ ๋ถ๋ถ๋ค์ด๋ค.
min์ ์ต์ํ ์ ๋งํผ์ ๋์ด์ผ flushํ๋ค๋ ๊ฒ์ด๊ณ , max๋ ์ต์ข
์๊ณ์ ์ด๋ค. max์ ๋๋ฌํ๋ฉด ๋ฐ๋์ ์๋ณธ ํ
์ด๋ธ์ ์ฐ๊ธฐ๋ฅผ ๋๊ธด๋ค.
๋ฒํผ์ ์์ธ ๋ฐ์ดํธ ํฌ๊ธฐ, ๋ฒํผ์ ์์ธ ์๊ฐ, ํ ๊ฐ์ ๋จ์๋ก flush ๊ท์น์ ์ ์ํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ buffer์ insertํ๋ฉด

์ฒ์์๋ ๋ฒํผ์๋ง ๋ณด์ด๋ค๊ฐ
๊ธฐ์ค์ ์ถฉ์กฑํ๋ฉด ์๋ณธ ํ
์ด๋ธ์๋ ๋ถ์ด์ง ๊ฒ์ด๋ค.
์ฐธ๊ณ ๋ก, buffer๋ ์๋ฐฉํฅ ํต์ ์ฒ๋ผ ๋์ํ๋ค.
events์ ์๋ ๋ฐ์ดํฐ๋ buffer์์๋ ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
Buffer์ ํ๊ณ
๊ทธ๋ฅ ์ผํ ๋ณด๋ฉด ์ข์๋ณด์ผ ์๋ ์๋๋ฐ, ๋จ์ ์ด ๋ง๋ค.
์ผ๋จ Buffer -> MergeTree๋ก์ Insert๋ exactly once๊ฐ ๋ณด์ฅ๋์ง ์๋๋ค, ๋์ผ ํ์ด ์ฌ๋ฌ๋ฒ Insert๊ฐ ๋ ์ ์๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋น์ฐํ์ง๋ง ์ ์ค ์ํ์ด ์๋ค. ์ธ๋ฉ๋ชจ๋ฆฌ๋ผ์ ์๋ฒ๊ฐ ์ ง๋ค์ด๋๋ฉด ์ฆ๋ฐํ๋ ๊ฒ์ด๋ค.
์์ ๊ฐ์ ๋จ์ ๋ค์ ๊ฐ์ํจ์๋, ์ฐ๊ธฐ ์ฑ๋ฅ์ด ๊ทน์ ์ด์ง๋ ์๋ค. ํนํ ํ ํ์ฉ Insertํ๋ ๊ฒ์ Buffer๋ฅผ ์ฐ๋๋ผ๋ ํจ์จ์ ์ด์ง ์ใด๋ค.
Buffer vs async Insert
๊ฒ๋ค๊ฐ Buffer๋ ํ ์์ ์๋ ๊ทธ๋ค์ง ๊ถ์ฅ๋์ง ์๋ ๊ธฐ๋ฅ์ด๋ค. clickhouse ์ปค๋ฎค๋ํฐ์์๋ Buffer๋ฅผ ๋ ๊ฑฐ์๋ก ๊ฐ์ฃผํ๊ณ , async insert ๊ธฐ๋ฅ์ ์ข์ ๋์์ผ๋ก์ ๊ถ์ฅํ๋ค.
๋ ๋ค clickhouse๊ฐ ์ธ๋ฉ๋ชจ๋ฆฌ๋ก ๋ฒํผ๋ง์ ํ๋ค๊ฐ ๋ชจ์์ ํ
์ด๋ธ์ write๋ฅผ ๋ ๋ฆฐ๋ค๋ ๋์ ์ ๋ ๊ฐ๋ค. ์ค์ ๋ก๋ async insert๊ฐ buffer๋ฅผ ๋์ฒดํ๊ธฐ ์ํด ๋์จ ๊ธฐ๋ฅ์ด๊ธฐ๋ ํ๋ค.
async insert๋ buffer๋ณด๋ค ๋ง์ ๋ณด์ฅ ์์ค์ ์ ๊ณตํ๊ณ , batch insert ์ต์ ํ๋ ์ ํด์ค๋ค.
wait_for_async_insert ๊ฐ์ ์ต์
์ด ์์ด์ ์ฐ๊ธฐ์ ๋ํ ๋ณด์ฅ์ ๊ฐ์ ธ๊ฐ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
https://blog.naver.com/sssang97/223973565751
์ฐธ์กฐ
https://clickhouse.com/docs/engines/table-engines/special/buffer