در مورد دیتابیس‌های «سری‌زمانی» و معرفی InfluxDB

این مطلب به عنوان تحقیق درس پایگاه‌داده دکتر حقیقی در ترم پاییز ۹۹ نوشته می‌شود.


در جست‌وجو برای پایگاه‌داده‌های پسا-رابطه‌ای (post-relational) به عبارت‌ها و تکنولوژی‌های گوناگونی برمی‌خوریم. معمولا عبارات برپازدید NoSQL، ردیس، مونگو‌-دی‌بی و BSON هستند اما در این مطلب به موضوعی که کم‌تر به آن پرداخته‌شده و شاید برای بسیاری از ما ناشناخته باشد می‌پردازیم.


داده‌های سری‌زمانی (Time Series Data)

داده‌هایی که یک ماشین خودران جمع‌آوری می‌کند را در نظر بگیرید. قاعدتا حجم زیادی داده خام به ذهنمان می‌رسداین‌ داده‌ها که یک ویژگی مهم دارند، آن‌ها برچسب زمانی که داده تولید (گردآوری) شده را نیز به همراه دارند. بسیاری از داده‌هایی که از دستگاه‌ای اینترنت چیزها (IoT) تولید می‌شوند چنین خاصیتی دارند.

این داده‌ها گاهی خاصیت پیوستگی هم دارند مثلا شاخص‌های بورس یا دمای یک محیط در طی زمان می‌توانند به صورت (تقریبا) پیوسته ذخیره شوند.

این داده‌ها ۳ ویژگی مهم دارند:

  • داده تقریبا در همان زمانی که ثبت می‌شود، به دست ما می‌رسد.
  • داده‌ها (معمولا) به ترتیب به دست ما می‌رسند.
  • زمان ثبت یکی از شاخص‌های اهمیت داده است.

به بیان دیگر تنها عملیات، الحاق داده‌های جدید به داده‌های قبلی است. (با صرف نظر از بررسی و رفع خطا و ..)




پایگاه‌داده‌های سری‌زمانی (Time Series Databases)

پایگاه‌داده‌های سری‌زمانی (TSDB) پایگاه‌داده‌هایی هستند که به طور خاص برای نگه‌داری و کاوش در داده‌های سری‌های زمانی طراحی می‌شوند. این داده‌ها عموما به شکل زوجِ مقدار-زمان نگه‌داری می‌شوند.

پایگاه‌داده‌های TSDB برای کار با زوج مقدار-زمان بهینه شده‌اند، مثلا از الگوریتم‌های فشرده‌سازی برای مدیریت بهینه‌تر داده استفاده می‌کنند.

برخی از این پایگاه‌داده‌ها، قابلیت بررسی تغییرات داده‌ها و در آوردن به شکل گراف را نیز می‌دهند.

از مهم‌ترین پایگاه‌داده‌های TSDB می‌توان به موارد زیر اشاره کرد:

  • Riak
  • kdb+
  • IMB Informix
  • InfluxDB
  • Prometheus
  • eXtremeDB
  • IBM Informix on Cloud
  • Azure Time Series Insights
  • TimescaleDB
  • Druid
  • OpenTSDB
  • Gtaphite


در مورد مزایا و معایب هر کدام می‌توان زیاد صحبت کرد برای مثال TimescaleDB قابلیت پشتیبانی از SQL سنتی و ادغام با PostgresSQL را دارد. من در اینجا قصد معرفی پرکاربردترین آن‌ها که InfluxDB است را دارم.


چرا با دیتابیس‌های معمولی کار راه نمی‌افتد؟

سوالی که پیش می‌آید این است که مگر دیتابیس‌های رابطه‌ای (یا معمولی!) نمی‌توانند داده‌ای که برچسب زمان داشته‌باشد را مدیریت کنند؟ جواب این است که چرا می‌توانند اما دیتابیس‌های مخصوص TSDB که برای همین‌کار بهینه‌شده‌اند از ۲ جهت بهتر هستند.

  • مقیاس‌پذیری: عمدتا داده‌های سری‌زمانی با سرعت بالا تولید می‌شوند، مثلا یک خودروی خودران ۴ گیگابایت داده فقط در یک روز تولید می‌کند. دیتابیس‌های رابطه‌ای برای این حجم از داده مناسب نیستند. دیتابیس‌های NoSQL در این زمینه بسیار بهتر از رابطه‌ای ها هستند ولی در مقابل TSDBها حرفی برای گفتن ندارند.
  • قابلیت استفاده راحت: معمولا TSDBها توابع و عملیات‌هایی برای کار‌های مرسوم روی داده‌های سری‌زمانی دارند مثلا قابلیت هندل کردن «سیاست‌های نگهداری اطلاعات»، «کوئری‌های مداوم» و «واحد‌های زمانی انعطاف‌پذیر» را دارند. حتی اگر مقیاس‌پذیری جزو دغدغه‌های فعلی ما نباشد، این توابع تجربه استفاده بهتری می‌دهند.




کمی بیشتر در مورد InfluxDB

دو بازیگر اصلی TSDBها، Prometheus و InfluxDB هستند، هر دو متن‌باز هستند. ما در اینجا کمی بیش‌تر در مورد InfluxDB می‌خوانیم.

این TSDM محصول شرکت InfluxData واقع در سان‌فرانسیسکو است. در سال ۲۰۱۳ به عنوان یک پروژه کاملا متن‌باز عرضه شد که روی تمام سیستم‌عامل‌های مرسوم کنونی کار میکند. همچنین مجموعه بزرگی از زبان‌های برنامه‌نویسی (حتی لیسپ و کلوژر) را پشتیبانی می‌کند. برای بار سنگینِ نوشتن بهینه شده و به صورت هم روند بسیار موثر عمل می‌کند. از مزیت‌های دیگر آن این است که بعد از نصب با ۵ دقیقه خواندن داکیومنت‌ها، می‌توانید کار با آن را شروع کنید.

این TSDB با زبان Go نوشته‌شده و برای سرعت و دسترس‌پذیری بالا بهینه شده. از انواع داده‌ی زیر هم پشتیبانی می‌کند:

  • عدد صحیح ۶۴ بیتی
  • عدد ممیز شناور ۶۴ بیتی
  • رشته
  • بولین



منابع:

https://hazelcast.com/glossary/time-series-database/


https://blog.timescale.com/blog/what-the-heck-is-time-series-data-and-why-do-i-need-a-time-series-database-dcf3b1b18563/


https://www.trustradius.com/time-series-databases


https://medium.com/schkn/4-best-time-series-databases-to-watch-in-2019-ef1e89a72377


https://en.wikipedia.org/wiki/Time_series_database


https://www.influxdata.com/


https://en.wikipedia.org/wiki/InfluxDB