influxDB๋ฅผ ์์๋ณด๊ธฐ ์ ์๊ณ์ด ๋ฐ์ดํฐ๋?
์๊ณ์ด์ ์ผ์ ๊ธฐ๊ฐ ๋์ ์์ง๋๊ณ ์๊ฐ์์ผ๋ก ์ ๋ ฌ๋ ๋ฐ์ดํฐ ์์์ ๋ชจ์์ ๋๋ค. ์๊ณ์ด์ ์ฃผ์ ํน์ง์ ์ธ๋ฑ์ฑ๋๊ฑฐ๋ ์๊ฐ ์์๋๋ก ๋์ด๋๋ค๋ ๊ฒ์ธ๋ฐ ๊ทธ๋์ ๊ทธ๋ํ์ ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ์๊ฐํ ํ ๋ ์ค์ํ ์ถ์ ์๊ฐ์ด ๋ฉ๋๋ค.
์๊ณ์ด ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ ๊ณณ์์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ๊ธฐ์ ์๋ณด
- ์ฃผ์
- ์ผ์ ๋ฐ์ดํฐ
- ์ผ(์,์ฐ)๊ฐ ๊ตฌ๋ ์
- ์๋ฒ ์์ ๋ชจ๋ํฐ๋ง ๋ฑ๋ฑ
์์ฆ ๋ค์ด ์ค๋งํธ ํฉํ ๋ฆฌ, ๋น ๋ฐ์ดํฐ, ์ฝ์ธ, ์ฃผ์ ๋ฑ์ด ํซํ๋ฐ ์ด๋ฐ ๋ฐ์ดํฐ๋ค์ ํน์ง์ ์๊ฐ์์ผ๋ก ์ธ๋ฑ์ฑ์ด ์ค์ํ๊ณ , ๋์ฉ๋ ๋ฐ์ดํฐ๋ผ๋ ์ ์ ๋๋ค. ์ด๋ฌํ ๋ฐ์ดํฐ๋ค์ ํธ๋ค๋ง ํ๋ ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค InfluxDB๊ฐ ๋๋์ฒด ์ด๋ ํ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ ์ฅํ์ฌ ๋น ๋ฅธ ์๋๋ฅผ ๋ผ ์ ์๋์ง ์ ์ด๋ ๊ฒ ์ ๋ช ํ๊ณ ๋ง์ด๋ค ์ฌ์ฉํ๋์ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
influxDB๋? (Data Principle)
influxdb๋ ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์๋ ๊ฐ์ฅ ์ ๋ช ํ ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค(time-series database)์ ๋๋ค. InfluxDB์ ํน์ง์ ๋์ดํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๊ฐ์์ผ๋ก ๊ตฌ์ฑ๋ ๊ฐ๋ค์ ์งํฉ(Point)๋ค์ ์ ์ฅ
- ์ ์ด, ๋๋ ธ์ด์ ์์ฒญ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผํ๊ธฐ ๋๋ฌธ์, ์ฐ๊ธฐ์ ์์ฃผ ํนํ๋จ
- ์ฟผ๋ฆฌ ๋ฐ ์ฐ๊ธฐ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ์ ๋ฐ์ดํธ ๋ฐ ์ญ์ ๊ธฐ๋ฅ์ ์๊ฒฉํ๊ฒ ์ ํ
- SQL๊ณผ ์ ์ฌํ InfluxQL์ ์ ๊ณต
- Continuous Query ๊ธฐ๋ฅ ์ ๊ณต
- Tag๋ผ๋ ๊ฒ์ ์ด์ฉํด ์ธ๋ฑ์ฑ ์ ๊ณต
- REST API ์ ๊ณต
Storage Engine
๊ณต์๋ฌธ์์์๋ Storage Engine์ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํฉ๋๋ค.
InfluxDB ์คํ ๋ฆฌ์ง ์์ง์ ๋ค์์ ๋ณด์ฅํฉ๋๋ค.
1. ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ์์ ํ๊ฒ ๊ธฐ๋ก๋ฉ๋๋ค.
2. ์ฟผ๋ฆฌ๋ ๋ฐ์ดํฐ๋ ์์ ํ๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ๋ฐํ๋ฉ๋๋ค.
3. ๋ฐ์ดํฐ๊ฐ ์ ํํ๊ณ ์ฑ๋ฅ์ด ์ฐ์ํฉ๋๋ค.
์ด๋ป๊ฒ ์์ ๊ฐ์ด ์ค๋ช ํ ์ ์๋์ง ๋ด๋ถ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Writing Data (API → Disk)
์คํ ๋ฆฌ์ง ์์ง์ HTTP API ์์ฒญ์ ์์ ํ ์์ ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. Point๋ค์ WAL์ ๊ธฐ๋กํจ๊ณผ ๋์์ ๋ฉ๋ชจ๋ฆฌ ๋ด ์บ์์ ๊ธฐ๋ก์์ผ ์ฆ์ ์ฟผ๋ฆฌํ ์ ์๊ฒ ๋๋นํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋ด ์บ์๋ TSM ํ์ผ ํ์์ผ๋ก ์ฃผ๊ธฐ์ ์ผ๋ก ๋์คํฌ์ ๊ธฐ๋ก๋ฉ๋๋ค. TSM ํ์ผ์ด ๋์ ๋๋ฉด ์คํ ๋ฆฌ์ง ์์ง์ ๋์ ๋ ํ์ผ์ ๋ ๋์ ์์ค์ TSM ํ์ผ๋ก ๊ฒฐํฉํ๊ณ ์์ถํฉ๋๋ค.
Write Ahead Log (WAL)
WAL์ ์คํ ๋ฆฌ์ง ์์ง์ด ๋ค์ ์์๋ ๋ influxDB ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ ์๊ฒ ๋ด๊ตฌ์ฑ์ ๋ณด์ฅํด์ค๋๋ค. ์๊ธฐ์น ์์ ์คํ ๋ฆฌ์ง ์์ง์ ์ข ๋ฃ๊ฐ ์์ ๊ฒฝ์ฐ ์ฌ์์ ๋ ๋ WAL๊ณผ Storage Engine์ Sync๋ฅผ ๋ง์ถฐ ๋ฐ์ดํฐ์ ๋ด๊ตฌ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ์ฐ๊ธฐ ์์ฒญ์ WAL ํ์ผ์ ๋์ ์ถ๊ฐ
- ๋ฐ์ดํฐ๋
fsync()
๋ฅผ ์ฌ์ฉํ์ฌ ๋์คํฌ์ ๊ธฐ๋ก - in-memory ์บ์์ ์ ๋ฐ์ดํธ
- ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์ ์ฑ๊ณต์ ์ผ๋ก ๊ธฐ๋ก๋๋ฉด ์ฐ๊ธฐ ์์ฒญ์ด ์ฑ๊ณตํ์์ ํ์ธํ๋ ์๋ต ํ์
fsync()
๋ ํ์ผ์ ๊ฐ์ ธ์์ ๋ณด๋ฅ ์ค์ธ ์ฐ๊ธฐ๋ฅผ ๋์คํฌ๊น์ง ํธ์ํฉ๋๋ค. ์์คํ
ํธ์ถ๋ก์, fsync()
์๋ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค์ง๋ง ๋ฐ์ดํฐ๊ฐ ๋์คํฌ์์ ์์ ํ๋ค๋ ๊ฒ์ ๋ณด์ฅํ๋ ์ปค๋ ์ปจํ
์คํธ ์ค์์น๊ฐ ์์ต๋๋ค.
์คํ ๋ฆฌ์ง ์์ง์ด ๋ค์ ์์๋๋ฉด WAL ํ์ผ์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ค์ ์ฝ์ด๋ค์
๋๋ค. ๊ทธ๋ฐ ๋ค์ influxDB๋ /read
์๋ํฌ์ธํธ์ ๋ํ ์์ฒญ ์๋ต.
์บ์ (Cache)
์บ์๋ WAL์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ in-memory์ ๋ณต์ ํ ๊ฒ์ด๋ฏ๋ก, WAL๊ณผ ์บ์๋ ๋ณ๊ฐ์ ์ํฐํฐ๋ฉฐ ์๋ก ์ํธ์์ฉํ์ง ์์ต๋๋ค.
- ํค(measurement, tag set, unique fields)๋ณ๋ก ๊ตฌ์ฑ๋ ํฌ์ธํธ๋ ์๊ฐ ์์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.(์์ถ X)
- ์คํ ๋ฆฌ์ง ์์ง์ด ์ฌ ์์๋ ๋๋ง๋ค WAL์์ ๊ฐ์ ธ์์ ์บ์ฑํด๋ก๋๋ค. ์ฟผ๋ฆฌ๋ฅผ ํ๋ฉด ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ TSM ํ์ผ์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ณํฉ๋ฉ๋๋ค. (๋ฐ์ดํฐ์ ์บ์๋ฅผ ์ค๋ ์ ์งํ๊ณ ์ถ๋ค๋ฉด maxSize๋ฅผ ๋๋ฆฌ๋ฉด ๋จ)
- TSM ํ์ผ์ ๊ธฐ๋ก๋๊ณ ์๋ ์บ์ ๊ฐ์ฒด๋ฅผ ์บ์ ์ค๋ ์ท์ด๋ผ๊ณ ํฉ๋๋ค.
- ์คํ ๋ฆฌ์ง ์์ง์ ๋ํ ์ฟผ๋ฆฌ๋ ์บ์์ ๋ฐ์ดํฐ๋ฅผ TSM ํ์ผ์ ๋ฐ์ดํฐ์
merge
(์๋ TSM์ ์ ์ฅ๋๋ ํํ๋ฅผ ๋ณด์๋ฉด ์ดํด๊ฐ ๊ฐ์ค๊ฒ๋๋ค)ํด์ ์๋ตํฉ๋๋ค.
Time-Structured Merge Tree (TSM)
์คํ ๋ฆฌ์ง ์์ง์ TSM ๋ฐ์ดํฐ ํ์์ ์ฌ์ฉํฉ๋๋ค. ๋์ฉ๋์ ์๊ณ์ด ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์์ถ, ์ ์ฅํ๊ธฐ ์ํด field value๋ฅผ series-key๋ณ๋ก ๊ทธ๋ฃนํํ ๋ค์ ํด๋น field value๋ฅผ ์๊ฐ๋ณ๋ก ์ ๋ ฌํฉ๋๋ค. (series-key๋ measurement, tag key, tag value, field key๋ฅผ ์๋ฏธํฉ๋๋ค)
- TSM ํํ๋ก ์ ์ฅํ๋ฉด ์๋ฆฌ์ฆ ํค๋ก ์ฝ๊ณ ๊ด๋ จ์๋ ๋ฐ์ดํฐ๋ฅผ ์๋ตํ ์ ์์ผ๋ฏ๋ก ์ฟผ๋ฆฌ ์ฑ๋ฅ์ด ๋ฐ์ด๋ฉ๋๋ค.
- TSM ํ์ผ์ ์ต์ข
์ ์ผ๋ก ์์ ํ๊ฒ ์ ์ฅ๋๋ฉด
WAL
๊ณผ์บ์
๊ฐ ์ง์์ง๋๋ค.
TSM ํ์ผ์ ์์ถ๋ series data๋ฅผ ์ด ํ์์ผ๋ก ์ ์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
measurement: weather
| timestamp | fields: wind_speed | fields: wind_direction |
| --------- | ------------------ | ---------------------- |
| 10:15 | 3.5 | 378 |
| 10:20 | 3.7 | 380 |
์ ๋ฐ์ดํฐ๋ ์ค์ ๋ก๋ ๋ค์๊ณผ ๊ฐ์ด TSM ํํ๋ก ๋์คํฌ์ ์ ์ฅ๋ฉ๋๋ค.
[measurement, tags, field key]
-----------------------------------
[weather, wind_speed]
10:15 , 3.5
10:20 , 3.7
[weather, wind_direction]
10:15 , 378
10:20 , 380
series-key(measurement, tag key, tag value, field key)๋ณ๋ก ์๊ฐ ์์๋๋ก ์ ์ฅ์ํต๋๋ค. ๊ทธ๋ฌ๋๊น ํ๋์ ๋ฐ์ดํฐ๊ฐ ์ด 2๊ฐ์ TSM ๋ฐ์ดํฐ ์ ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์ ์ฅ๋๋ค๊ณ ์๊ฐํ์๋ฉด ํธํฉ๋๋ค.
Continuous Query & Retension Policy
influxdb์ ํต์ฌ์ ์ธ ๊ธฐ๋ฅ ๋๊ฐ์ง์ ๋๋ค. ๋์ฉ๋์ ์๊ณ์ด ๋ฐ์ดํฐ์ด๋ค ๋ณด๋๊น ์ ์ฅ๊ณต๊ฐ ๊ด๋ฆฌ ์ธก๋ฉด๊ณผ ๋ฐ์ดํฐ๋ค์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ฒ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํด์ฃผ๋ ๊ฒ ๊ฐ์ต๋๋ค.
Continous Query
influxdb๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ์๋กญ๊ฒ ์ ์ฅํ๋ Down Sampling(๋ค์ด ์ํ๋ง)์ ์ผ์ ์ฃผ๊ธฐ๋ง๋ค ์คํ๋๋๋ก ํ๋ ๊ธฐ๋ฅ์ธ Continuous Query๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
์ ๊ธฐ๋ฅ์ ์ด์ฉํด์ ์ผ์ ์ฃผ๊ธฐ๋ง๋ค ๋ฐ์ดํฐ๋ค์ ๋ค์ด ์ํ๋ง ํ์ฌ ๋ฏธ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํด๋๋ฉด → ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ํจ์จ์ ์ด๊ณ ๋น ๋ฅด๊ฒ ์ฟผ๋ฆฌํ์ฌ ์๋ตํ ์ ์์ต๋๋ค.
Retension Policy
๋๋์ ๋ฐ์ดํฐ๊ฐ ์์ด๊ณ ๋์ค์ ์ ์ฅ๊ณต๊ฐ์ด ๋ถ์กฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ๋ชปํ๋ฉด ํฐ์ผ์ ๋๋ค. ์๊ณ์ด ๋ฐ์ดํฐ๊ฐ ๋๋์ผ๋ก ์์ด๊ธฐ ๋๋ฌธ์ influxdb์์๋ ์ด ๋ณด์กด ์ ์ฑ ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. (๊ธฐ๋ณธ๊ฐ: ์๊ตฌ์ ์ฅ)
๊ธฐ๋ณธ ๊ฐ์ ์๊ตฌ์ ์ผ๋ก ๊ณ์ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ์ค์ ๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ณด์กด ์ ์ฑ ์ ์ค์ ํ์ฌ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์๊ทธ๋ฌ๋ฉด ๋ฐ์ดํฐ๊ฐ ์์ฒญ๋๊ฒ ์์ฌ์ ์ ์ฅ๊ณต๊ฐ ๋ถ์กฑํ๋ฉด influxdb ์ฃฝ์ต๋๋ค..
ํ ์ด๋ธ ๊ตฌ์กฐ
RDB | InfluxDB |
---|---|
database | influxdb instance |
Table | measurement |
column | key |
indexed column | tag key (only String) |
unindexed column | field key |
row | point |
Database
In InfluxDB 2.2, a database represents the InfluxDB instance as a whole.
influxDB 2.2์์๋ ์ ์ฒด influxDB ์ธ์คํด์ค๋ฅผ ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ณธ๋ค๊ณ ํฉ๋๋ค.
Measurement
- measurement๋ RDB์์ Table๊ณผ ๊ฐ์ต๋๋ค.
- ์ด๋ค ๊ฐ์ด ์ธก์ ๋๋์ง์ ๋ํด ๋ํ๋ด๋ ์งํ๊ฐ ๋ฉ๋๋ค. (์๋ฅผ๋ค์ด, ์ ํ ์ด๋ธ์ฒ๋ผ ์ธ๊ตฌ์กฐ์ฌ์ ๋ํด์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ค๋ฉด, measurement๋ ์ธ๊ตฌ์กฐ์ฌ(census)๊ฐ ๋๊ฒ ์ฃ )
TimeStamp
- ์๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ฅ ์ค์ํ ํค๊ฐ์ธ
_time
์ปฌ๋ผ์ ์ ์ฅ๋๋ ๊ฐ์ ๋๋ค. ๋น์ฐํ ์ธ๋ฑ์ฑ์ด ๋ฉ๋๋ค. - Timestamp๋ RFC 3339(for example:
2020-01-01T00:00:00.00Z
)์ ์ฌ์ฉํฉ๋๋ค.
Field Key, Field Value
(Required) ํ์๊ฐ์ ๋๋ค. ์ค์ ์ ์ฅํ๋ ค๋ ํค/๊ฐ์ field์ ๋ฃ์ผ๋ฉด ๋ฉ๋๋ค.
- Field๋ Tag์ ๋ค๋ฅด๊ฒ ์ธ๋ฑ์ฑ์ด ์๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Field๋ฅผ ์ด์ฉํด ํํฐ๋ง์ ๊ฑธ๋ฉด ์ฑ๋ฅ ์ ํ๊ฐ ์ฌํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ฑ์ด ํ์ํ๋ค๋ฉด Tag๋ฅผ ์ฌ์ฉํ์๊ธธ ๋ฐ๋๋๋ค.
Tag Key, Tag Value
(Optional) ํ์๊ฐ์ ์๋์ง๋ง ์ธ๋ฑ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ Tag๋ฅผ ๋ฃ์ด์ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ๋์ด๋ ๊ฒ์ด ๋ฒ ์คํธ์ ๋๋ค.
- Tag Key๋ ์ฌ๋ฌ๊ฐ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์ํ ๋ฉํ๋ฐ์ดํฐ๋ค์ ์ ์ฅํฉ๋๋ค. (์: ์ง์ญ, ํ์ ๋ฑ๋ฑ)
- Tag Key๋ ๋ฌด์กฐ๊ฑด Stringํ์ ๋๋ค.
REFERENCES
- https://docs.influxdata.com/influxdb/v2/reference/internals/storage-engine
- https://docs.influxdata.com/influxdb/v2.2/reference/key-concepts/data-elements/
- https://docs.influxdata.com/influxdb/v2/reference/key-concepts/design-principles/
- https://docs.influxdata.com/influxdb/v2.2/reference/syntax/line-protocol/#elements-of-line-protocol
- https://musma.github.io/2019/07/08/getting-started-with-influxdb-time-series-database.html
- https://mangkyu.tistory.com/190
- https://www.youtube.com/watch?v=a00l1GxJszM
- https://musma.github.io/2019/07/08/getting-started-with-influxdb-time-series-database.html
- https://narup.tistory.com/169
- https://andro-jinu.tistory.com/entry/InfluxDB2?category=924198
- https://velog.io/@jee-9/InfluxDB๊ฐ-๋ฌด์์ธ๊ฐ-1