[MongoDB] time-series ์ปฌ๋ ์
์์ฆ์ ์๊ณ์ด์ด ์ ํ์ธ๊ฐ?
์งฌ๋ฝํ DB์ ๊ทนํ์ ๋ฌ๋ฆฌ๋ MongoDB๋ต๊ฒ ์๊ณ์ด ๋ฐ์ดํฐ์ ๋ํ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค.
๊ธฐ๋ณธ๊ธฐ๋ฅ์ผ๋ก ๋ด์ฅ๋์ด์๊ณ , ๋ฒ์ 5.0๋ถํฐ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
2021๋
์ ์ถ์๋ ๊ธฐ๋ฅ์ด๋ผ ๋น๊ต์ ์ต์ ๊ธฐ๋ฅ์ด๋ค.
๋ค๋ฅธ ์๊ณ์ด DB๋ค๊ณผ์ ๋น๊ต
time-series ์ปฌ๋ ์ ์ด ์ง์๋์ง ์์๋๋ ๋น์ฐํ ๋ค๋ฅธ ์๊ณ์ด DB๋ค๊ณผ ๋น๊ตํ๋ฉด ๋ง์ด ๊ตฌ๋ ธ๋ค.
ํ์ง๋ง time-series๊ฐ ์ง์๋๊ณ ๋์๋ถํฐ๋ ์ฑ๋ฅ์ด๋ ์ฌ์ฉ์ฑ ๋ฉด์์ ๊ฝค๋ ์ธ๋งํด์ง ๊ฒ ๊ฐ๋ค.
๋ฐ์ดํฐ ์์ถ, ๋น ๋ฅธ ์ฝ์
, ๋ฐ์ดํฐ ๋ง๋ฃ ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
timescaleDB๋ influxDB์ ๋น๊ตํด์ ๋ ์ข๋ค๊ณ ํ๊ธฐ๋ ์ด๋ ต์ง๋ง, ๊ธฐ์กด์ MongoDB๋ฅผ ์ฌ์ฉํ๊ณ ์์๋ค๋ฉด ๊ด์ฐฎ์ ์ ํ์ด ๋ ์ ์์ ๊ฒ ๊ฐ๋ค.
์ปฌ๋ ์ ๋ง๋ค๊ธฐ
๋ชฝ๊ณ ๋ ์๋ ์ปฌ๋ ์
์ ๋ช
์์ ์ผ๋ก ๋ง๋ค์ง ์์๋ ๋์ง๋ง, ์๊ณ์ด ์ปฌ๋ ์
์ ๋ช
์๋ฅผ ํด์ค์ผ ํ๋ค.
์์ฑ ์์ ์ ์๊ณ์ด์ ๋ํ ์ค์ ์ ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฐ์์ด๋ค.
db.createCollection(
"weather",
{
timeseries: {
timeField: "timestamp",
metaField: "metadata",
granularity: "seconds"
}
}
)
timeFields๋ ์ค์ ๋ก ์๊ฐ๊ฐ์ ์ ์ฅํ ํ๋๋ช
์ด๋ค.
์ฌ๊ธฐ์ ์๊ฐ๊ฐ์ ๋ฃ์ผ๋ฉด, ๋ชฝ๊ณ db๊ฐ ๊ทธ ์๊ฐ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ์ ํ ์ต์ ํ๋ฅผ ํด์ค๋ค.
metaField๋ ๊ทธ๋ฅ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ์ฉ์ด๊ณ , granularity๋ ์๊ฐ์ ์ ์ฅํ ๋ ์ด๋ป๊ฒ ํํฐ์
๋์ ํ ๊ฑด์ง, ๊ฐ์๊ฑธ ์ ํ๋ ๊ธฐ์ค๊ฐ์ด๋ค. ๋ณดํต์ ์ด ๋จ์๋ก ํ๋๊ฒ ์ผ๋ฐ์ ์ด๊ณ , ๊ธฐ๋ณธ๊ฐ์ด๋ค.
๋ถ๋ฆฌ ๋จ์๊ฐ ์ด ๋จ์๋ผ๊ณ ๋ ํด๋ ์ค์ ์ ์ฅ์ ๋ฐ๋ฆฌ์ด ๋จ์๊น์ง ํ ์ ์๋ค.
์ฌ์ฉ
์ปฌ๋ ์
์ ๋ง๋ค๊ณ ๋๋ฉด, ๊ทธ๋ฅ ๋ชฝ๊ณ DB ์จ์๋ฏ์ด ์ธ ์ ์๋ค.
ํ์์คํฌํ ๊ฐ๋ง ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
db.weather.insertMany( [
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T04:00:00.500Z"),
"temp": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T04:00:00.000Z"),
"temp": 11
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T08:00:00.000Z"),
"temp": 11
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T12:00:00.000Z"),
"temp": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T16:00:00.000Z"),
"temp": 16
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-18T20:00:00.000Z"),
"temp": 15
}, {
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T00:00:00.000Z"),
"temp": 13
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T04:00:00.000Z"),
"temp": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T08:00:00.000Z"),
"temp": 11
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T12:00:00.000Z"),
"temp": 12
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T16:00:00.000Z"),
"temp": 17
},
{
"metadata": { "sensorId": 5578, "type": "temperature" },
"timestamp": ISODate("2021-05-19T20:00:00.000Z"),
"temp": 12
}
] )

๋ณ๋ก ๋ค๋ฅผ๊ฑด ์๋ค.

์ด์ธ์ ๋ช๊ฐ์ง ์ ํ์ฌํญ๋ ์ข ์๊ณ , ์์์ผํ ๊ฒ ๋ ์๊ธด ํ๋ค.
๋ค๋ฅธ๊ฑด ๋ฌธ์๋ฅผ ์ฐธ์กฐํ๊ธธ ๋ฐ๋๋ค.
https://www.mongodb.com/docs/v5.3/core/timeseries/timeseries-limitations/
์ฐธ์กฐ
https://www.peerislands.io/timeseries/
https://www.mongodb.com/docs/v5.3/core/timeseries-collections/