[ClickHouse] ClickHouse JOIN์ด ๋А๋ฆฐ ์ด์œ ์™€ ์ตœ์ ํ™” ์ „๋žต
ยท
Backend/Database
ClickHouse๋ฅผ ์ฒ˜์Œ ์“ฐ๋‹ค ๋ณด๋ฉด ํ•œ ๋ฒˆ์ฏค ์ด๋Ÿฐ ๊ฒฝํ—˜์„ ํ•œ๋‹ค. MySQL์—์„œ๋Š” ์•„๋ฌด ๋ฌธ์ œ ์—†์ด ๋Œ์•„๊ฐ€๋˜ JOIN ์ฟผ๋ฆฌ๊ฐ€ ClickHouse์—์„œ๋Š” ์œ ๋… ๋А๋ฆฌ๊ฑฐ๋‚˜, WHERE ์กฐ๊ฑด์„ ๋‹ค ๊ฑธ์—ˆ๋Š”๋ฐ๋„ ํ’€์Šค์บ” ์ˆ˜์ค€์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๊ทธ ์ด์œ ๋ฅผ ClickHouse์˜ ๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹์—์„œ ์ฐพ๊ณ , ์‹ค์ œ๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ตœ์ ํ™” ์ „๋žต์„ ์ •๋ฆฌํ•œ๋‹ค. ์–ด๋–ค ์ƒํ™ฉ์ธ๊ฐ€ ์ˆ˜์–ต ๊ฑด์˜ ์œ ์ € ํ–‰๋™ ๋กœ๊ทธ(page_view_log)์™€ ์ฃผ๋ฌธ ๋ฐ์ดํ„ฐ(order_log)๋ฅผ JOINํ•ด์„œ ํŽ˜์ด์ง€๋ฅผ ๋ณธ ํŠน์ • ๊ธฐ๊ฐ„, ํŠน์ • ์œ ์ €์˜ ๊ตฌ๋งค ๊ฑด์ˆ˜๋ฅผ ์ง‘๊ณ„ํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž. ์•„๋ž˜์ฒ˜๋Ÿผ ์“ฐ๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฝ๋‹ค.SELECT count(*)FROM default.page_view_log p JOIN default.order_log o ON ..
[DB] READ_UNCOMMITTED์—์„œ DELETE๊ฐ€ ํƒ€์ž„์•„์›ƒ ๋‚˜๋Š” ์ด์œ 
ยท
Backend/Database
๋ฌธ์ œ ์ƒํ™ฉ ํŠน์ • ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๊ด„ ์‚ญ์ œํ•˜๋Š” ๋ฐฐ์น˜์—์„œ ๋‘ ์ข…๋ฅ˜์˜ ํƒ€์ž„์•„์›ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.Lock wait timeout exceeded; try restarting transaction ← ์„œ๋ธŒ์ฟผ๋ฆฌ DELETE ๋‹จ๊ณ„Query execution was interrupted (max_statement_time exceeded) ← PK ๊ธฐ๋ฐ˜ SELECT+DELETE ๋‹จ๊ณ„ ๋‘ ์—๋Ÿฌ๋Š” ๋™์‹œ์— ๋ฐœ์ƒํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์„œ๋ธŒ์ฟผ๋ฆฌ DELETE๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ Lock wait timeout์ด ๋ฐœ์ƒํ–ˆ๊ณ , PK ๊ธฐ๋ฐ˜ SELECT+DELETE๋กœ ์ „ํ™˜ํ•œ ๋’ค max_statement_time exceeded๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ํƒ€์ž„์•„์›ƒ ์ข…๋ฅ˜๊ฐ€ ๋ฐ”๋€ ๊ฒƒ ์ž์ฒด๊ฐ€ ๋ถ„์„ ํฌ์ธํŠธ๋‹ค. ์ดˆ๊ธฐ ์ฝ”๋“œ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ DELETE ๊ตฌ์กฐ์˜€๋‹ค.DELET..
[ClickHouse] Distributed ํ…Œ์ด๋ธ” - DROP PARTITION์ด ์™œ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋งŒ ์ง€์›Œ์งˆ๊นŒ?
ยท
Backend/Database
ClickHouse ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ๋‹นํ™ฉ์Šค๋Ÿฝ๋‹ค. ๋ถ„๋ช…ํžˆ ํŠน์ • ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ–ˆ๋Š”๋ฐ, ์กฐํšŒํ•ด๋ณด๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ์ „ํžˆ ๋‚จ์•„์žˆ๋‹ค. ๋ถ„๋ช… DROP PARTITION์„ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ. ์•Œ๊ณ  ๋ณด๋ฉด ์‚ญ์ œ๋œ ๊ฑด ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์ผ๋ถ€ Shard์˜ ๋ฐ์ดํ„ฐ๋ฟ์ด๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์™œ ์ด๋Ÿฐ ์ผ์ด ์ƒ๊ธฐ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ •๋ฆฌํ•œ๋‹ค. ๋ฐฐ๊ฒฝ: Distributed ํ…Œ์ด๋ธ”์€ ๋ผ์šฐํ„ฐ๋‹ค์•ž์„  ๊ธ€์—์„œ ๋‹ค๋ค˜์ง€๋งŒ ๋‹ค์‹œ ์งš๊ณ  ๋„˜์–ด๊ฐ€์ž.ClickHouse ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ…Œ์ด๋ธ”์€ ๋‘ ๋ฒŒ์ด๋‹ค.default.user_events ← Distributed ํ…Œ์ด๋ธ” (๋ผ์šฐํ„ฐ, ๋ฐ์ดํ„ฐ ์—†์Œ)local.user_events_local ← ๋กœ์ปฌ ํ…Œ์ด๋ธ” (์‹ค์ œ ๋ฐ์ดํ„ฐ ์ €์žฅ..
[ClickHouse] ๋ฐ์ดํ„ฐ ์‚ญ์ œ - ALTER DELETE vs DROP PARTITION
ยท
Backend/Database
ClickHouse์—์„œ ์ž˜๋ชป ์ ์žฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์›Œ์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ƒ๊ฒผ๋‹ค. MySQL์ด๋ผ๋ฉด ๊ทธ๋ƒฅ DELETE FROM ... WHERE ... ๋‚ ๋ฆฌ๋ฉด ๋์ธ๋ฐ, ClickHouse ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ทธ๊ฒŒ ์•ˆ ๋œ๋‹ค. DELETE FROM ๋ฌธ๋ฒ• ์ž์ฒด๋Š” ์กด์žฌํ•˜์ง€๋งŒ, ON CLUSTER๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„ ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์— ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ALTER TABLE ... DELETE๋‚˜ DROP PARTITION์„ ์จ์•ผ ํ•œ๋‹ค. ์ด ๊ธ€์€ ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์„ ์ „์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ธ ALTER DELETE์™€ DROP PARTITION์„ ๋น„๊ตํ•˜๊ณ , ๊ฐ๊ฐ ์–ธ์ œ ์“ฐ๋Š” ๊ฒŒ ๋งž๋Š”์ง€ ์ •๋ฆฌํ•œ๋‹ค. ๋ฐฉ๋ฒ• ์„ ํƒ์˜ ๊ธฐ์ค€์€ ๋ฐ์ดํ„ฐ ์–‘์ด ์•„๋‹ˆ๋ผ ์‚ญ์ œ ํŒจํ„ด์ด๋‹ค. ์ž‘์€ ์–‘์ด๋ผ๋„ ALTER DELETE๋Š” ํŒŒํŠธ..
[ClickHouse] ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์กฐ - Shard, Replica, Distributed ํ…Œ์ด๋ธ”
ยท
Backend/Database
ClickHouse๋ฅผ ์ฒ˜์Œ ์ ‘ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ํ˜ผ๋ž€์Šค๋Ÿฌ์› ๋˜ ๊ฑด ์šฉ์–ด์˜€๋‹ค. MySQL์ด๋‚˜ MariaDB์—์„œ๋Š” ๊ทธ๋ƒฅ ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ณ  ์ฟผ๋ฆฌ ๋‚ ๋ฆฌ๋ฉด ๋๋Š”๋ฐ, ClickHouse๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ "Shard", "Replica", "Distributed ํ…Œ์ด๋ธ”", "ZooKeeper"๊ฐ€ ํŠ€์–ด๋‚˜์˜จ๋‹ค. ์‹ฌ์ง€์–ด ํ…Œ์ด๋ธ”๋„ ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ClickHouse ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์–ด๋–ค ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”์ง€, ๊ฐ ๊ฐœ๋…์ด ๋ฌด์Šจ ์—ญํ• ์„ ํ•˜๋Š”์ง€ ํ•œ ๋ˆˆ์— ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •๋ฆฌํ•ด๋ณธ๋‹ค. ClickHouse๋Š” ์™œ ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์กฐ๋ฅผ ์“ธ๊นŒ? ClickHouse๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ถ„์„ ์ฟผ๋ฆฌ์— ์ตœ์ ํ™”๋œ ์ปฌ๋Ÿผํ˜• DB๋‹ค. ์ˆ˜์–ต ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ง‘๊ณ„ํ•˜๋Š” ๊ฒŒ ์ฃผ ๋ชฉ์ ์ด๋‹ค ๋ณด๋‹ˆ, ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋‚˜๋ˆ  ์ €์žฅํ•˜๊ณ  ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๊ธฐ๋ณธ์ด ..
[MySQL] access denied for user 'root'@'localhost' (using password: yes) - mysql ๋กœ๊ทธ์ธ ์˜ค๋ฅ˜ / MySQL Workbench์—์„œ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜
ยท
Backend/Database
์ด๋ฒˆ์— ๋งฅ๋ถ์„ ์ƒˆ๋กœ ์‚ฌ๊ฒŒ ๋˜๋ฉด์„œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ƒˆ๋กœ ์ƒˆํŒ…ํ•˜๊ณ , ๊ธฐ์กด์— ์œˆ๋„์šฐ์—์„œ ๊ฐœ๋ฐœํ–ˆ๋˜ Spring Boot ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค. ๊ทผ๋ฐ MySQL DB๊ฐ€ ์—ฐ๊ฒฐ์ด ์•ˆ๋˜๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ์ƒˆ๋กœ ์ƒˆํŒ…ํ•œ MySQL์˜ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ์•ˆ๋งž๋Š” ๋ฌธ์ œ๋กœ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ์˜€๋‹ค. ์—๋Ÿฌaccess denied for user 'root'@'localhost' (using password: yes) ํ•ด๊ฒฐ ๊ตฌ๊ธ€๋ง ํ•ด๋ณด๋‹ˆ ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ‹€๋ ธ์„ ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ์˜ค๋ฅ˜๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žฌ์„ค์ •ํ•ด๋ณด์•˜๋‹ค. + ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ MySQL 8์—์„œ๋Š” ๋ณด์•ˆ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด 8์ž๋ฆฌ๋ถ€ํ„ฐ ๊ฐ€๋Šฅํ•˜๋‹ˆ 8์ž๋ฆฌ ์ด์ƒ์œผ๋กœ๋„ ๋ฐ”๊ฟ”๋ณด๊ธฐ!!! ๋‹ค๋ฅธ ๋ฌธ์ œ๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋Š” ์•„๋ฌด๋ฆฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žฌ์„ค์ •ํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๋ ค๊ณ  ํ•ด๋„ ์—ฐ๊ฒฐ์ด ๋˜์ง€ ์•Š์•˜๋‹ค...
giraffe_
'Backend/Database' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก