์๊ณ์ด DB. InfluxDB์ TimescaleDB
๋ํ์ ์ธ ์๊ณ์ด DB์ธ InfluxDB๊ฐ ๊ธฐ์กด์ DB์ ์ด๋ค ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ, ์ด๋ค ์ฅ์ ๊ณผ ๋จ์ ์ ๊ฐ๊ณ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ์ ๋ํญํ๋ TimescaleDB์ ์ด๋ค ๋ ์์ธ์ง ํ๋ฒ ๋ถ์ํด๋ณด๋ ์๊ฐ์ ๊ฐ์ง๊ฒ ๋ค.
์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค(time series database)
์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ ์ ์ฅ์ ๊ธฐ์ค์ ์๊ฐ(time)์ผ๋ก ์ผ๋ ๊ฒ์ด๋ค. ๊ธฐ๋ณธํค๋ฅผ ์ ๋ถ ํ์์คํฌํ ๊ฐ์ ๊ฐ์ผ๋ก ์ผ๋๋ค๋ ๋ป์ด๋ค.
์๊ณ์ดDB๊ฐ ๊ฐ์ฅ ์ฒ์ ์ฌ์ฉ๋ ๋ถ์ผ๋ ์ฌ๋ฌ๊ฐ์ง ์์น๊ฐ๋ค์ด ์ค์๊ฐ์ผ๋ก ์์ด๋ ํ๊ฒฝ์ด์๋ค. ์๋ฅผ ๋ค์ด, ์ผ์๋ก ์ธก์ ๋ ์์น๋ค์ ์๊ฐ๋๋ณ๋ก ์ ์ฅํ๋ค๋ ๊ฐ ํ๋ ๊ฒ๋ค ๋ง์ด๋ค.
ํ์ง๋ง ํ์ฌ์ ์ด๋ฅด๋ฌ์๋ "์๊ฐ"์ด ์ค์ํ ์์คํ ์์๋ ๊ฝค๋ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋๋ ํธ์ด๋ค. ์๋ฅผ ๋ค์ด "์ฃผ์ ๊ฑฐ๋"๋ "์ํธํํ ๊ฑฐ๋" ๋ฑ์ ๊ฑฐ๋ ์๊ฐ์ด ์ค์ํ ๊ฒฝ์ฐ์๋ ์๊ณ์ด์ ํ์ฉํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ฒด๋ก, ๋ฐ์ดํฐ ์ ์ฅ์ ์์ถ์ ์ข๋ ์ ๊ทน์ ์ผ๋ก ํ๋ ํธ์ด๋ผ ๋ํ ๋ฐ์ดํฐ ์ ์ฅ์๋ ์ ๋ฆฌํ ํธ์ด๋ค.
ํ์ง๋ง ์๊ณ์ด์ ํ์ค์ด ์๋ ๊ฒ๋ ์๋๋ผ์, DB๋ง๋ค ๊ฐ์ฑ์ด ๋๋ ทํ๊ณ ์ฐจ์ด์ ์ด ๊ต์ฅํ ํฌ๋ค. ๊ทธ๋์ ์๊ณ์ด์ด ๋ฑ ๋ญ๋ผ๊ณ ๋ช ํํ๊ฒ ์ ์ํ๊ธฐ๋ ํ๋ค๋ค.
InfluxDB
InfluxDB๋ ๋ช
์ค์๋ถํ ์๊ณ์ด์ ๋ํ์ฃผ์๋ค. ๊ฐ์ฅ ์ ๋ช
ํ๊ณ , ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ค.
์ฃผ๋ณํ๊ฒฝ์ด ํผํผํ๊ณ , ์ ์ฉ ํด๋ผ์ฐ๋ ์๋น์ค๋ ์ ์ ๊ณตํ๋ ํธ์ด๋ค. (๋
ผ๋์ด ๋ง๊ธด ํ์ง๋ง)
InfluxDB vs RDBMS
๊ธฐ์กด์ RDB๋ค์ด Tree ๊ธฐ๋ฐ์ ์ธ๋ฑ์ค๋ฅผ ํตํด ์ ์ฅ์ด ๋๋ค๋ฉด, InfluxDB๋ฅผ ์์ํ ์๊ณ์ด DB๋ค์ ์ค์ง "์๊ฐ"์ ๊ธฐ๋ฐํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
์ถ์ฒ https://devconnected.com/the-definitive-guide-to-influxdb-in-2019/
๊ทธ๋ฐ๋ฐ ์ ์ด๋ ๊ฒ ํด์ผํ ๊น?
๊ธฐ๋ณธ์ ์ผ๋ก RDB๋ค์ ๋จ์ผ ๋
ธ๋์์ ์ด๋น 20000-100000 ์์ค์ insert๋ ๊ณง์ ๊ฐ๋นํด๋ด๊ณค ํ๋ค.
ํ์ง๋ง RDB์๋ ๋งน์ ์ด ์๋นํ ๋ง์๋ฐ, ์ฃผ๋ก ์ฌ์ฉํ๋ B-Tree ๊ธฐ๋ฐ์ ์ธ๋ฑ์ค๋ ์๊ฐ์ด ์ง๋๊ณ ๋ฐ์ดํฐ ์งํฉ์ด ์ปค์ง์ ๋ฐ๋ผ insert ์ฑ๋ฅ์ด ๊ณ์ํด์ ๋จ์ด์ง ์ ์๋ค๋ ๊ฒ์ด๋ค.
๋ฐ๋ฉด ์๊ณ์ด DB๋ ์ผ์ ํ๊ณ ๋น ๋ฅธ ์์ง์ ์ต์ ํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค. ํ์์คํฌํ ์ธ๋ฑ์ค์ B-Tree๋ฅผ ์ฌ์ฉํ์ง ์์์ ๋๋ฆฐ Rebalancing ๋์์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ Time Structured Merge Tree๋ผ๊ณ ๋ถ๋ฅด๋ ํน์ํ๋ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค.
๊ทธ๋์ ๋จ์ผ ๋
ธ๋๋น 50000-100000๊ฑด ์ ๋์ insert๋ฅผ ๋ฌด๋ฆฌ์์ด ๊ฐ๋นํ ์ ์๋ค.
RDB์ ์ฑ๋ฅ์ด ์์ฃผ ํฌ๊ฒ ์ฐจ์ด๋๋ ๊ฒ์ ์๋์ง๋ง, ์์ ์ ์ผ๋ก ๊ทธ ์ฑ๋ฅ์ด ๊ณ์ ์ ์ง๋๋ค๋ ์ ์ด ์ฃผํจํ๋ค.

์ฅ์
์ง์์ ์ธ ๋ฐ์ดํฐ ๋๋์์ง์ ์ ๋ฆฌํ๋ค.
InfluxDB ๊ทธ๋ฃน์ ๊ธฐ์ ์ง์์ ๋ฐ์ ์ ์๋ค. (์ ๋ฃ)
๋จ์
์๋ฆฌ์ฆ ์นด๋๋๋ฆฌํฐ, ๊ทธ๋ฌ๋๊น ํ๊ทธ๋ ํ๋์ ์ํด ์ธ๋ฑ์ฑ๋๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋์์ง์๋ก? insert๋ read ์ฟผ๋ฆฌ๊ฐ ์ฌ๊ฐํ๊ฒ ๋๋ ค์ง๊ณ ๋ฆฌ์์ค๋ฅผ ๊ณผ๋ํ๊ฒ ์๋ชจํ๋ค.
์ฌ๊ฐํ ๊ฒฝ์ฐ์๋ ์๋ฐฑ๋ง-์์ฒ๋ง๊ฐ๊ฐ ๋๋ ์ํ์์ ์ฝ๊ฐ์ ๋ถ์ ์ฟผ๋ฆฌ๋ง ์ฌ์ฉํด๋ ์์ญ์ด-๋ถ ๋จ์๊น์ง ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์๋ค.
์ด๊ฑด ๋ฐ์ดํฐ ์์ฒด๋ฅผ ์๊ฐ์ผ๋ก๋ง ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์๊ธฐ๋ ํ๊ณ์ธ๋ฐ, ๋ฌด์กฐ๊ฑด ํ์ค์บ์ ๋๋ ค์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๊ณ ๋ถ์์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๊ธฐ๋ ํ๋ค.
TimescaleDB
TimescaleDB๋ PostgreSQL ์์ง์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค.
๊ทธ๋์ ๊ธฐ๋ณธ์ ์ธ ์ ์ฅ ์ ๋ต์ ๊ธฐ์กด์ RDB๋ค๊ณผ ํฌ๊ฒ ๋ค๋ฅผ ๊ฒ์ ์๋ค. ์ฌ๋ฌ๊ฐ์ง ํธ๋ฆญ๋ค๊ณผ ์ค๊ฐ ์ถ์ํ๋ฅผ ์ ์ฉํด์ ์๊ณ์ด DB์ฒ๋ผ "๋ณด์ด๊ฒ" ๊ตฌํํ ๊ฒ์ด๋ค.
๊ทธ๋๋ ์์ ๊ฒ์ ๋ค ์๋ค.
์๊ณ์ด DB๋ค ํน์ ์ ๋ฐ์ดํฐ ์์ถ์ ํตํ ์ ์ฅ๊ณต๊ฐ ํจ์จํ๋ ์ ๊ณตํ๊ณ , ์์ฃผ ํ๋ฅญํ SQL ๊ธฐ๋ฐ์ ๋ถ์ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค. RDB๋ฅผ ๊ทธ๋๋ก ๊ฐ๋ค์ผ์ผ๋ ๋น์ฐํ RDB ์์ค์ ๋ถ์์ฑ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค.
InfluxDB๊ฐ ๊ฐ์ง๊ณ ์๋ ์นด๋๋๋ฆฌํฐ ๋ฌธ์ ๊ฐ ์๋ค.
๊ทธ๋ฆฌ๊ณ B-Tree ์ธ๋ฑ์ค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ์ง๋ง, Tree์ ์๊ฐ ๊ฐ์ ๊ธฐ๋ฐํ Chunk ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถํ ์ ์ฅํด์ ์๊ณ์ด ํน์ ์ ์์ ์ ์ธ insert ์ฑ๋ฅ๋ ๋ณด์ฅํ๋ค.
์ฌ๋ฌ๋ชจ๋ก InfluxDB์ ๋จ์ ๋ค์ ์ ๊ทน๋ณตํ ํ๋ฅญํ ์๊ณ์ดDB๋ก ํ๊ฐ๋ฅผ ๋ฐ๋ ๊ฒ ๊ฐ๋ค.
์๋๋ InfluxDB์ ๋ฒค์น๋งํฌ๋ฅผ ๋๋ฆฐ ํ๋ค.
https://www.timescale.com/blog/timescaledb-vs-influxdb-for-time-series-data-timescale-influx-sql-nosql-36489299877/
์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์ ๋๋ InfluxDB๊ฐ ๋ ๋น ๋ฅด์ง๋ง, ์นด๋๋๋ฆฌํฐ๊ฐ ์กฐ๊ธ๋ง ๋ ์ฌ๋ผ๊ฐ๋ timescaleDB์ ์ฑ๋ฅ์ด ๋ ๋์์ง๋ ๋ฉด์ด ์๋ค.
์ฅ์
RDB์ ํ๋ถํ ๊ธฐ๋ฅ์ ์ ๋ถ ๋ค ํ์ฉํ ์ ์๋ค. ์ธ๋ฑ์ค ์ถ๊ฐ๋ฅผ ํตํ read ์ฟผ๋ฆฌ ์ต์ ํ์๋ ์ ํ์ด ์๋ค.
์นด๋๋๋ฆฌํฐ ๋ฌธ์ ๊ฐ ์๋ค.
๋จ์
์นด๋๋๋ฆฌํฐ๊ฐ ๋ฎ์ ๋๋ InfluxDB๋ณด๋ค ๋๋ฆด ์ ์๋ค.
์ฐธ์กฐ
https://stackoverflow.com/questions/34492966/what-is-time-series-database
https://stackoverflow.com/questions/47581703/influx-index-and-high-cardinality