์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค(timeseries db,
์ฑ
์ ๋ถ์ธ: ๋์ด๋ ๋ฌธ์ ๋ InfluxDB ๋ฒ์ 1.7.4์ ์ ์ฉ๋ฉ๋๋ค.
์ ์๊ณ์ด์ธ๊ฐ?
์ด ํ๋ก์ ํธ๋ ๋ค์ํ ๋ธ๋ก์ฒด์ธ์ ๊ฑฐ๋๋ฅผ ์ถ์ ํ๊ณ ํต๊ณ๋ฅผ ํ์ํ๋ ๊ฒ์
๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก๋ ์คํ
์ด๋ธ ์ฝ์ธ์ ๋ฐฐ์ถ๊ณผ ์๊ฐ์ ์ดํด๋ณธ๋ค(
ํธ๋์ญ์ ์ ๋ถ์ํ๋ ๋์ InfluxDB ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ธฐ๋ณธ ์ ์ฅ์๋ก ์ฌ์ฉํ๋ ์์ด๋์ด๊ฐ ๋ ์ฌ๋์ต๋๋ค. ๊ฑฐ๋๋ ํน์ ์์ ์ด๋ฉฐ ์๊ณ์ด ๋ชจ๋ธ์ ์ ๋ค์ด๋ง์ต๋๋ค.
์ง๊ณ ๊ธฐ๋ฅ๋ ๋งค์ฐ ํธ๋ฆฌํด ๋ณด์์ต๋๋ค. ์ฅ๊ธฐ๊ฐ ์ฐจํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ด์์ ์ ๋๋ค. ์ฌ์ฉ์๋ 365๋ ๋์์ ์ฐจํธ๊ฐ ํ์ํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ XNUMX๋ถ ๋จ์์ ๋ฐ์ดํฐ ์ธํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๊ทธ์๊ฒ ์ญ๋ง ์ ์ ๋ชจ๋ ๋ณด๋ด๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๊ธด ์ฒ๋ฆฌ ์๊ฐ์ ์ ์ธํ๋ฉด ํ๋ฉด์ ๋ง์ง๋ ์์ต๋๋ค. ๊ธฐ๊ฐ์ ๋๋ฆฌ๋ ๊ตฌํ์ ์ง์ ์์ฑํ๊ฑฐ๋ Influx์ ๋ด์ฅ๋ ์ง๊ณ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ค์ ๋์์ ๋ฐ์ ๋ ์ง๋ณ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๊ณ ํ์ํ XNUMX๊ฐ ํฌ์ธํธ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์งํ ์์ง์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค๋ ์ ์ด ์ฝ๊ฐ ํผ๋์ค๋ฌ์ ์ต๋๋ค. ์๋ฒ, IoT ์ฅ์น, "ํ๋ฆ" ํํ์ ์๋ฐฑ๋ง ํฌ์ธํธ๊ฐ ์๋ ๋ชจ๋ ๊ฒ์ ๋ชจ๋ํฐ๋งํฉ๋๋ค: [<์๊ฐ> - <๋ฉํธ๋ฆญ ๊ฐ>]. ๊ทธ๋ฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋๊ท๋ชจ ๋ฐ์ดํฐ ํ๋ฆ์์ ์ ์๋ํ๋ค๋ฉด ์์ ๋ณผ๋ฅจ์ด ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ด๋ฅผ ์ผ๋์ ๋๊ณ ์ฐ๋ฆฌ๋ InfluxDB๋ฅผ ์์ ์ ์ฌ์ฉํ์ต๋๋ค.
InfluxDB์์ ๋ ๋ฌด์์ด ํธ๋ฆฌํ๊ฐ์?
์ธ๊ธ๋ ์ง๊ณ ํจ์ ์ธ์๋ ๋ ๋ค๋ฅธ ์ข์ ์ ์ด ์์ต๋๋ค. ์ฐ์ ์ฟผ๋ฆฌ (
๋ํ์๋ค ๋ณด์กด ์ ์ฑ
(
- ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํ ์ด๋ธ์ ์ง๊ณํ๊ธฐ ์ํ ์ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ ํ ์ด๋ธ์ ๋ํด ๊ฐ์ ์ฃผ๋ณด๋ค ์ค๋๋ ์งํ๋ฅผ ์ญ์ ํ๋ ์ ์ฑ ์ ์ ์ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ Influx๋ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์ค์ด๊ณ ๋ถํ์ํ ๊ฒ์ ์ญ์ ํฉ๋๋ค.
์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ํ์ฌ
์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ ๋ง์ง ์์ต๋๋ค. ์ฝ 70๋ง ๊ฑด์ ๊ฑฐ๋์ ์์ฅ ์ ๋ณด๊ฐ ํฌํจ๋ ๋ฐฑ๋ง ํฌ์ธํธ๊ฐ ์ถ๊ฐ๋ฉ๋๋ค. ์ ํญ๋ชฉ ์ถ๊ฐ - ํ๋ฃจ์ 3000ํฌ์ธํธ๋ฅผ ๋์ง ์์ต๋๋ค. ์ฌ์ดํธ์ ๋ํ ์ธก์ ํญ๋ชฉ๋ ์์ง๋ง ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ์์ผ๋ฉฐ ๋ณด์กด ์ ์ฑ ์ ๋ฐ๋ผ ํ ๋ฌ ์ด์ ์ ์ฅ๋์ง ์์ต๋๋ค.
๋ฌธ์
์๋น์ค ๊ฐ๋ฐ ๋ฐ ํ์ ํ ์คํธ ๊ณผ์ ์์ InfluxDB ์ด์์ ์ ์ ๋ ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
1. ๋ฐ์ดํฐ ์ญ์
๊ฑฐ๋์ ๊ด๋ จ๋ ์ผ๋ จ์ ๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.
SELECT time, amount, block, symbol FROM transactions WHERE symbol='USDT'
๊ฒฐ๊ณผ :
๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ผ๋ ๋ช
๋ น์ ๋ณด๋
๋๋ค.
DELETE FROM transactions WHERE symbol=โUSDTโ
๋ค์์ผ๋ก ์ด๋ฏธ ์ญ์ ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํด ๋ฌ๋ผ๊ณ ์์ฒญํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Influx๋ ๋น ์๋ต ๋์ ์ญ์ ํด์ผ ํ๋ ๋ฐ์ดํฐ์ ์ผ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค.
์ ์ฒด ํ ์ด๋ธ์ ์ญ์ ํ๋ ค๊ณ ํฉ๋๋ค.
DROP MEASUREMENT transactions
ํ ์ด๋ธ ์ญ์ ๋ฅผ ํ์ธํฉ๋๋ค.
SHOW MEASUREMENTS
๋ชฉ๋ก์ ํ ์ด๋ธ์ด ํ์๋์ง ์์ง๋ง ์ ๋ฐ์ดํฐ ์ฟผ๋ฆฌ๋ ์ฌ์ ํ ๋์ผํ ํธ๋์ญ์ ์งํฉ์ ๋ฐํํฉ๋๋ค.
์ญ์ ์ฌ๋ก๊ฐ ๋จ๋
์ฌ๋ก์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๋ ๋ฑ ํ ๋ฒ ๋ฐ์ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋์์ ๋ถ๋ช
ํ "์ฌ๋ฐ๋ฅธ" ์์
์ ํ์ ๋ง์ง ์์ต๋๋ค. ๋์ค์ github์์ ์ด๋ฆฐ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ญ์ ํ ํ ๋ณต์ํ๋ ๊ฒ์ด ๋์์ด ๋์์ต๋๋ค.
2. ๋ถ๋ ์์์ ์ซ์
InfluxDB์ ๋ด์ฅ๋ ํจ์๋ฅผ ์ฌ์ฉํ ๋ ์ํ ๊ณ์ฐ์๋ ์ ํ๋ ์ค๋ฅ๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ด ์ด์ํ ๊ฒ์ ์๋์ง๋ง ๋ถ์พํฉ๋๋ค.
์ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ์ ๊ธ์ต์ ์ธ ์์๊ฐ ํฌํจ๋์ด ์์ด ๋์ ์ ํ๋๋ก ์ฒ๋ฆฌํ๊ณ ์ถ์ต๋๋ค. ์ด๋ก ์ธํด ์ง์์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ํฌ๊ธฐํ ๊ณํ์ ๋๋ค.
3. ์ฐ์ ์ฟผ๋ฆฌ๋ ๋ค๋ฅธ ์๊ฐ๋์ ์ ์ฉํ ์ ์์ต๋๋ค.
์ด ์๋น์ค์๋ ์ผ์ผ ๊ฑฐ๋ ํต๊ณ๊ฐ ํฌํจ๋ ํ
์ด๋ธ์ด ์์ต๋๋ค. ๋งค์ผ ํด๋น ๋ ์ง์ ๋ชจ๋ ๊ฑฐ๋๋ฅผ ๊ทธ๋ฃนํํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ ์ฌ์ฉ์์ ํ๋ฃจ๋ ์๋ก ๋ค๋ฅธ ์๊ฐ์ ์์๋๋ฏ๋ก ๊ฑฐ๋ ์ธํธ๋ ๋ฌ๋ผ์ง๋๋ค. UTC ๊ธฐ์ค ์
InfluxDB์์๋ ์๊ฐ๋ณ๋ก ๊ทธ๋ฃนํํ ๋ ๋ชจ์คํฌ๋ฐ ์๊ฐ(UTC+3)๊ณผ ๊ฐ์ด ๊ต๋ ๊ทผ๋ฌด๋ฅผ ์ถ๊ฐ๋ก ์ง์ ํ ์ ์์ต๋๋ค.
SELECT MEAN("supply") FROM transactions GROUP BY symbol, time(1d, 3h) fill(previous)
๊ทธ๋ฌ๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค. ์ด๋ค ์ด์ ๋ก ๋ ์ง๋ณ๋ก ๊ทธ๋ฃนํ๋ ๋ฐ์ดํฐ๋ 1677๋ ๋ถํฐ ์์๋ฉ๋๋ค(InfluxDB๋ ๊ณต์์ ์ผ๋ก ์ฌํด๋ถํฐ ๊ธฐ๊ฐ์ ์ง์ํฉ๋๋ค).
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋น์ค๋ฅผ ์ผ์์ ์ผ๋ก UTC+0์ผ๋ก ์ ํํ์ต๋๋ค.
4. ์ฑ๋ฅ
InfluxDB์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋น๊ตํ๋ ๋ง์ ๋ฒค์น๋งํฌ๊ฐ ์ธํฐ๋ท์ ์์ต๋๋ค. ์ผํ ๋ณด๋ฉด ๋ง์ผํ ์๋ฃ์ฒ๋ผ ๋ณด์์ง๋ง, ์ง๊ธ ๋ณด๋ ๊ทธ ์์ ์ด๋ ์ ๋ ์ง์ค์ด ๋ค์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ด ๊ฒฝ์ฐ๋ฅผ ๋งํด์ฃผ์ง.
์ด ์๋น์ค๋ ๋ง์ง๋ง ๋ ์ ํต๊ณ๋ฅผ ๋ฐํํ๋ API ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ณ์ฐ์ ์ํํ ๋ ๋ฉ์๋๋ ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ธ ๋ฒ ์ฟผ๋ฆฌํฉ๋๋ค.
SELECT * FROM coins_info WHERE time <= NOW() GROUP BY symbol ORDER BY time DESC LIMIT 1
SELECT * FROM dominance_info ORDER BY time DESC LIMIT 1
SELECT * FROM transactions WHERE time >= NOW() - 24h ORDER BY time DESC
์ค๋ช :
- ์ฒซ ๋ฒ์งธ ์์ฒญ์์๋ ์์ฅ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ฝ์ธ์ ๋ง์ง๋ง ํฌ์ธํธ๋ฅผ ์ป์ต๋๋ค. ์ ๊ฒฝ์ฐ์๋ ๋์ XNUMX๊ฐ์ XNUMX์ ์ ๋๋ค.
- ๋ ๋ฒ์งธ ์์ฒญ์ ์ต์ ํฌ์ธํธ ์ค ํ๋๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ์ธ ๋ฒ์งธ๋ ์ง๋ XNUMX์๊ฐ ๋์์ ๊ฑฐ๋ ๋ชฉ๋ก์ ์์ฒญํ๋ฉฐ ๊ทธ ์ค ์๋ฐฑ ๊ฐ๊ฐ ์์ ์ ์์ต๋๋ค.
InfluxDB๋ ํ๊ทธ์ ์๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์๋์ผ๋ก ๊ตฌ์ถํ์ฌ ์ฟผ๋ฆฌ ์๋๋ฅผ ๋์ธ๋ค๋ ์ ์ ๋ถ๋ช ํ ํ๊ฒ ์ต๋๋ค. ์ฒซ ๋ฒ์งธ ์์ฒญ์์๋ ์์ง ํ๊ทธ์ ๋๋ค.
์ด API ๋ฉ์๋์ ๋ํด ์คํธ๋ ์ค ํ ์คํธ๋ฅผ ์คํํ์ต๋๋ค. 25RPS์ ๊ฒฝ์ฐ ์๋ฒ๋ XNUMX๊ฐ CPU์ ์ ์ฒด ๋ก๋๋ฅผ ์์ฐํ์ต๋๋ค.
๋์์ NodeJs ํ๋ก์ธ์ค๋ ์ ํ ๋ก๋๋ฅผ ์ ๊ณตํ์ง ์์์ต๋๋ค.
์คํ ์๋๋ ์ด๋ฏธ 7-10 RPS๋งํผ ์ ํ๋์์ต๋๋ค. ํ ํด๋ผ์ด์ธํธ๊ฐ 200ms ๋ด์ ์๋ต์ ๋ฐ์ ์ ์๋ค๋ฉด 10๊ฐ์ ํด๋ผ์ด์ธํธ๋ 25์ด๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ์ต๋๋ค. 500RPS๋ ์์ ์ฑ์ด ์ ํ๋๋ ํ๊ณ์ด๋ฉฐ XNUMX๊ฐ์ ์ค๋ฅ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ฐํ๋์์ต๋๋ค.
์ด๋ฌํ ์ฑ๋ฅ์ผ๋ก ์ธํด ์ฐ๋ฆฌ ํ๋ก์ ํธ์์๋ Influx๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋์ฑ์ด, ๋ชจ๋ํฐ๋ง์ ๋ง์ ํด๋ผ์ด์ธํธ์๊ฒ ์์ฐํด์ผ ํ๋ ํ๋ก์ ํธ์์๋ ์ ์ฌํ ๋ฌธ์ ๊ฐ ๋ํ๋ ์ ์์ผ๋ฉฐ ๋ฉํธ๋ฆญ ์๋ฒ๊ฐ ๊ณผ๋ถํ๋ ์ ์์ต๋๋ค.
์ถ๋ ฅ
์ป์ ๊ฒฝํ์์ ์ป์ ๊ฐ์ฅ ์ค์ํ ๊ฒฐ๋ก ์ ์ถฉ๋ถํ ๋ถ์ ์์ด๋ ์๋ ค์ง์ง ์์ ๊ธฐ์ ์ ํ๋ก์ ํธ์ ๋์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. github์์ ๊ณต๊ฐ๋ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ ๊ฒ์ฌํ๋ฉด InfluxDB๋ฅผ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ์ฅ์๋ก ์ ํํ์ง ์๋๋ก ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
InfluxDB๋ ๋ด ํ๋ก์ ํธ ์์ ์ ์ ํฉํด์ผ ํ์ง๋ง ์ค์ต์์ ์ ์ ์๋ฏ์ด ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ์ง ๋ชปํ๊ณ ๋ฒ๊ทธ๊ฐ ๋ง์ต๋๋ค.
ํ๋ก์ ํธ ์ ์ฅ์์์ ์ด๋ฏธ ๋ฒ์ 2.0.0-๋ฒ ํ๋ฅผ ์ฐพ์ ์ ์์ผ๋ฉฐ, ๋ ๋ฒ์งธ ๋ฒ์ ์์๋ ์๋นํ ๊ฐ์ ์ด ์ด๋ฃจ์ด์ง๊ธฐ๋ฅผ ๋ฐ๋ ๋ฟ์
๋๋ค. ๊ทธ๋์ TimescaleDB ๋ฌธ์๋ฅผ ๊ณต๋ถํ๋ฌ ๊ฐ๊ฒ ์ต๋๋ค.
์ถ์ฒ : habr.com