[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/