InfluxDB یک پایگاه داده سری زمانی قدرتمند و متن باز
InfluxDB یک پایگاه داده سری زمانی (Time Series Database - TSDB) متن‌باز است که توسط شرکت InfluxData توسعه یافته و به طور خاص برای ذخیره‌سازی و بازیابی با کارایی بالا داده‌های سری زمانی طراحی شده است. داده‌های سری زمانی به داده‌هایی گفته می‌شود که در طول زمان تغییر می‌کنند و با یک مهر زمانی (timestamp) مرتبط هستند. این ویژگی InfluxDB را به یک انتخاب ایده‌آل برای طیف گسترده‌ای از کاربردها تبدیل کرده است، از جمله نظارت بر عملکرد زیرساخت و برنامه‌ها، جمع‌آوری و تحلیل داده‌های حسگرهای اینترنت اشیا (IoT)، تجزیه و تحلیل داده‌های مالی و بازار سهام، مانیتورینگ سیستم‌های DevOps، و جمع‌آوری و تحلیل معیارهای برنامه‌های کاربردی. معماری InfluxDB به گونه‌ای طراحی شده است که حجم عظیمی از داده‌های دارای مهر زمانی را با سرعت بالا دریافت و ذخیره کند و همچنین امکانات قدرتمندی را برای پرس و جو و تحلیل این داده‌ها در زمان واقعی فراهم آورد.

 

یکی از ویژگی‌های کلیدی InfluxDB، مدل داده‌ای آن است که حول محور سری‌های زمانی سازماندهی شده است. هر نقطه داده در InfluxDB شامل یک مقدار (field)، یک یا چند برچسب (tag) و یک مهر زمانی است. فیلدها مقادیر واقعی هستند که اندازه‌گیری می‌شوند (مانند دمای هوا، میزان استفاده از CPU یا سرعت شبکه)، در حالی که برچسب‌ها فراداده‌هایی هستند که به داده‌ها اضافه می‌شوند و امکان فیلتر کردن و گروه‌بندی کارآمد داده‌ها را در هنگام پرس و جو فراهم می‌کنند (مانند نام سرور، نوع حسگر یا منطقه جغرافیایی). مهر زمانی نیز نشان‌دهنده زمان دقیق ثبت داده است. این ساختار داده‌ای ساده اما قدرتمند، امکان سازماندهی و جستجوی کارآمد داده‌های سری زمانی را فراهم می‌کند.

InfluxDB با هدف ارائه عملکرد بالا در نوشتن و خواندن داده‌های سری زمانی بهینه شده است. این پایگاه داده قادر است حجم بسیار زیادی از داده‌ها را در هر ثانیه دریافت و ذخیره کند و همچنین پرس و جوهای پیچیده را بر روی این داده‌ها با سرعت قابل قبولی اجرا کند. این عملکرد بالا برای کاربردهایی که نیاز به تحلیل داده‌های بلادرنگ و واکنش سریع به تغییرات دارند، بسیار حیاتی است. InfluxDB همچنین از قابلیت‌های مقیاس‌پذیری خوبی برخوردار است و می‌تواند به صورت افقی برای مدیریت حجم‌های رو به رشد داده‌ها و افزایش بار کاری، مقیاس‌بندی شود. InfluxDB از یک زبان پرس و جوی SQL به نام InfluxQL و همچنین یک زبان پرس و جو و اسکریپت‌نویسی به نام Flux پشتیبانی می‌کند. InfluxQL یک زبان قدرتمند و انعطاف‌پذیر برای پرس و جو و تحلیل داده‌های سری زمانی است که امکان فیلتر کردن، گروه‌بندی، تجمیع و انجام محاسبات مختلف بر روی داده‌ها را فراهم می‌کند. Flux یک زبان جدیدتر است که به طور خاص برای کار با داده‌های سری زمانی طراحی شده و قابلیت‌های پیشرفته‌تری برای تبدیل، فیلتر و تحلیل داده‌ها ارائه می‌دهد. یکی دیگر از ویژگی‌های مهم InfluxDB، سیاست‌های نگهداری داده (Data Retention Policies) است. این سیاست‌ها به کاربران اجازه می‌دهند تا مشخص کنند چه مدت داده‌ها باید ذخیره شوند و چگونه با گذشت زمان نمونه‌برداری (downsampling) یا حذف شوند. این قابلیت به مدیریت کارآمد فضای ذخیره‌سازی و انطباق با الزامات قانونی و تجاری مربوط به نگهداری داده‌ها کمک می‌کند.

InfluxDB همچنین از قابلیت پرس و جوهای مداوم (Continuous Queries) پشتیبانی می‌کند. این قابلیت به کاربران اجازه می‌دهد تا پرس و جوهایی را به صورت دوره‌ای اجرا کرده و نتایج آن‌ها را در یک سری زمانی جدید ذخیره کنند. این ویژگی برای انجام محاسبات و تجمیع‌های منظم بر روی داده‌ها و ایجاد دیدگاه‌های خلاصه از روندها بسیار مفید است. InfluxDB به خوبی با طیف گسترده‌ای از ابزارها و فناوری‌ها برای جمع‌آوری داده (مانند Telegraf)، تجسم‌سازی داده (مانند Grafana و Chronograf) و تحلیل داده ادغام می‌شود. Telegraf یک عامل جمع‌آوری داده متن‌باز است که از طیف وسیعی از ورودی‌ها پشتیبانی می‌کند و می‌تواند داده‌ها را به InfluxDB ارسال کند. Grafana و Chronograf ابزارهای قدرتمند برای ایجاد داشبوردهای تعاملی و تجسم‌سازی داده‌های سری زمانی ذخیره شده در InfluxDB هستند. InfluxDB به صورت متن‌باز و همچنین با ویژگی‌های تجاری برای سازمان‌های بزرگ (مانند خوشه‌بندی و دسترسی بالا) در دسترس است. این پایگاه داده از طریق APIهای HTTP، TCP و UDP داده‌ها را دریافت می‌کند و یک API RESTful را برای تعامل با آن ارائه می‌دهد. InfluxDB با فشرده‌سازی خودکار داده‌ها به مدیریت کارآمد فضای دیسک کمک می‌کند.

ویژگی‌های کلیدی InfluxDB

همان‌گونه که اشاره کردیم، InfluxDB یک پایگاه داده سری زمانی قدرتمند، مقیاس‌پذیر و با کارایی بالا است که برای مدیریت و تحلیل داده‌های دارای مهر زمانی در طیف وسیعی از کاربردها طراحی شده است. معماری بهینه شده، زبان پرس و جوی قدرتمند و ادغام آسان با سایر ابزارها، InfluxDB را به یک انتخاب محبوب برای سازمان‌هایی تبدیل کرده است که با حجم زیادی از داده‌های سری زمانی سروکار دارند و به دنبال بینش‌های بلادرنگ و عملکرد بالا هستند. این پایگاه داده به دلیل ویژگی‌های کاربردی زیر مورد توجه توسعه‌دهندگان قرار دارد:

طراحی برای داده‌های سری زمانی: InfluxDB بهینه‌سازی شده برای ذخیره و بازیابی داده‌هایی است که با زمان مرتبط هستند. هر نقطه داده (Data Point) شامل یک برچسب زمانی (Timestamp)، مقدار (Value)، و مجموعه‌ای از تگ‌ها و فیلدها برای دسته‌بندی و جستجو است.

عملکرد بالا: InfluxDB از موتور ذخیره‌سازی TSM (Time-Structured Merge Tree) استفاده می‌کند که برای نوشتن و خواندن سریع داده‌های سری زمانی بهینه شده است. این پایگاه داده می‌تواند میلیون‌ها نقطه داده را در ثانیه پردازش کند.

زبان پرس‌وجو: InfluxDB از InfluxQL (مشابه SQL) و Flux (زبان پیشرفته‌تر برای تحلیل داده‌ها) پشتیبانی می‌کند. Flux امکان انجام پرس‌وجوهای پیچیده‌تر و تجمیع داده‌ها را فراهم می‌کند.

مقیاس‌پذیری: نسخه سازمانی InfluxDB از معماری خوشه‌ای (Clustering) پشتیبانی می‌کند که امکان مقیاس‌پذیری افقی را فراهم می‌کند. نسخه متن‌باز برای سیستم‌های تک‌نود مناسب است.

حفظ و فشرده‌سازی داده‌ها: InfluxDB قابلیت تنظیم سیاست‌های حفظ داده (Retention Policies) را دارد که به کاربران اجازه می‌دهد داده‌های قدیمی را به طور خودکار حذف یا فشرده کنند.

یکپارچگی با ابزارهای دیگر: InfluxDB به راحتی با ابزارهای مانیتورینگ مانند Grafana، Prometheus، و Telegraf ادغام می‌شود. این ادغام‌ها آن را به یک انتخاب محبوب برای داشبوردهای بصری تبدیل کرده‌اند.

پشتیبانی از پروتکل‌های متنوع: InfluxDB از پروتکل‌های ورودی مانند HTTP، UDP، و Line Protocol پشتیبانی می‌کند، که ورود داده‌ها از منابع مختلف را آسان می‌کند.

معماری InfluxDB

معماری InfluxDB حول یک هسته سفارشی‌سازمان‌یافته برای مدیریت کارآمد داده‌های سری زمانی طراحی شده است. در سطح بالا، InfluxDB از چندین جزء کلیدی تشکیل شده است که با هم تعامل می‌کنند تا عملکرد بالا در نوشتن و خواندن داده‌ها، مقیاس‌پذیری و قابلیت اطمینان را فراهم آورند. در قلب معماری InfluxDB، مفهوم "مخزن داده" (Data Store) قرار دارد که مسئول ذخیره‌سازی و بازیابی داده‌های سری زمانی است. InfluxDB از یک موتور ذخیره‌سازی سفارشی تحت عنوان TSM Tree  سرنام Time-Structured Merge Tree استفاده می‌کند که به طور خاص برای مدیریت کارآمد حجم بالای داده‌های دارای مهر زمانی بهینه شده است. TSM Tree داده‌ها را در فایل‌های بهینه‌سازی‌شده برای خواندن و نوشتن سریع ذخیره می‌کند و از تکنیک‌هایی مانند فشرده‌سازی و فهرست‌بندی برای بهبود عملکرد پرس و جو استفاده می‌کند. این موتور ذخیره‌سازی به InfluxDB اجازه می‌دهد تا نرخ ورودی داده بسیار بالایی را تحمل کند و در عین حال، پرس و جوهای پیچیده را با سرعت مناسبی اجرا کند.

در لایه ورودی داده، InfluxDB از طریق پروتکل‌های مختلفی مانند HTTP، TCP و UDP داده‌ها را دریافت می‌کند. این انعطاف‌پذیری به InfluxDB اجازه می‌دهد تا به راحتی با طیف گسترده‌ای از منابع داده، از جمله عوامل جمع‌آوری داده مانند Telegraf، برنامه‌های کاربردی و حسگرهای IoT، ادغام شود. هنگامی که داده‌ها به InfluxDB می‌رسند، پردازش شده و در موتور ذخیره‌سازی TSM Tree ذخیره می‌شوند. InfluxDB از یک مدل داده‌ای بدون طرح (schemaless) استفاده می‌کند، به این معنی که نیازی به تعریف پیشاپیش ساختار داده‌ها نیست و می‌توان به سادگی داده‌ها را با فیلدها و برچسب‌های مختلف نوشت. با این حال، برای اطمینان از عملکرد بهینه، درک ساختار داده‌های مورد انتظار و استفاده consistent از برچسب‌ها توصیه می‌شود.

در لایه پرس و جو، InfluxDB از زبان پرس و جوی خود به نام InfluxQL و همچنین زبان جدیدتر Flux پشتیبانی می‌کند. InfluxQL یک زبان SQL-مانند است که به طور خاص برای کار با داده‌های سری زمانی طراحی شده است. این زبان امکان فیلتر کردن داده‌ها بر اساس زمان، برچسب‌ها و فیلدها، گروه‌بندی داده‌ها بر اساس برچسب‌ها و بازه‌های زمانی، انجام توابع تجمیعی (مانند میانگین، مجموع، حداکثر و حداقل) و اعمال تبدیل‌های مختلف بر روی داده‌ها را فراهم می‌کند. Flux یک زبان پرس و جو و اسکریپت‌نویسی قدرتمندتر است که امکانات پیشرفته‌تری برای دستکاری و تحلیل داده‌های سری زمانی ارائه می‌دهد و برای انجام تحلیل‌های پیچیده‌تر و ایجاد گردش‌های کاری داده مناسب است. موتور پرس و جوی InfluxDB برای استفاده بهینه از ساختار داده‌های TSM Tree طراحی شده است و تلاش می‌کند تا پرس و جوها را با کارایی بالا اجرا کند.

InfluxDB همچنین از مفاهیم کلیدی دیگری مانند "بانک داده" (Database) و "نگهدارنده" (Retention Policy) برای سازماندهی و مدیریت داده‌ها استفاده می‌کند. بانک داده یک فضای منطقی برای گروه‌بندی سری‌های زمانی مرتبط است، در حالی که سیاست‌های نگهداری مشخص می‌کنند که داده‌ها برای چه مدت زمانی ذخیره شوند و چگونه با گذشت زمان مدیریت شوند (مانند حذف یا نمونه‌برداری). این مفاهیم به کاربران اجازه می‌دهند تا داده‌های خود را به طور منطقی سازماندهی کرده و چرخه عمر داده‌ها را مدیریت کنند. برای مدیریت و پیکربندی InfluxDB، یک رابط کاربری گرافیکی به نام Chronograf نیز ارائه شده است که بخشی از پلتفرم InfluxData است. Chronograf به کاربران اجازه می‌دهد تا بانک‌های داده و سیاست‌های نگهداری را مدیریت کنند، پرس و جوها را اجرا کنند و داشبوردهای تجسم‌سازی داده ایجاد کنند. علاوه بر Chronograf، InfluxDB با ابزارهای تجسم‌سازی محبوب دیگری مانند Grafana نیز به خوبی ادغام می‌شود. در معماری InfluxDB، مفهوم "خوشه‌بندی" (Clustering) برای مقیاس‌پذیری و دسترسی بالا نیز وجود دارد، اما این ویژگی در نسخه متن‌باز در دسترس نیست و بخشی از نسخه تجاری InfluxDB Enterprise است. در معماری خوشه‌ای، چندین گره InfluxDB با هم کار می‌کنند تا حجم بیشتری از داده‌ها را مدیریت کنند و در صورت خرابی یک گره، از دسترسی به داده‌ها اطمینان حاصل کنند. معماری خوشه‌ای شامل گره‌های داده برای ذخیره‌سازی داده‌ها و گره‌های متا برای مدیریت فراداده‌های خوشه است.

کاربردهای InfluxDB

مانیتورینگ زیرساخت‌ها: InfluxDB برای نظارت بر سرورها، شبکه‌ها، و برنامه‌ها استفاده می‌شود. ابزارهایی مانند Telegraf معیارهای سیستم را جمع‌آوری کرده و به InfluxDB ارسال می‌کنند.

اینترنت اشیا (IoT): InfluxDB برای ذخیره و تحلیل داده‌های حسگرهای IoT، مانند داده‌های دما، رطوبت، یا مصرف انرژی، ایده‌آل است.

تحلیل بلادرنگ: شرکت‌های مالی از InfluxDB برای تحلیل داده‌های بازار سهام یا رمز ارزها در زمان واقعی استفاده می‌کنند.

مدیریت  InfluxDB: دوآپس در کنار Grafana برای ایجاد داشبوردهای مانیتورینگ CI/CD و عملکرد برنامه‌ها به کار می‌رود.

تحلیل داده‌های محیطی: سازمان‌های علمی از InfluxDB برای ذخیره داده‌های آب‌وهوا، کیفیت هوا، یا سایر معیارهای محیطی استفاده می‌کنند.

نسخه‌های InfluxDB

نسخه متن‌باز: نسخه رایگان و متن‌باز InfluxDB برای پروژه‌های کوچک تا متوسط مناسب است. این نسخه اکثر ویژگی‌های اصلی را ارائه می‌دهد اما از خوشه‌بندی پشتیبانی نمی‌کند.

نسخه سازمانی: نسخه تجاری InfluxDB شامل قابلیت‌های پیشرفته مانند مقیاس‌پذیری افقی، پشتیبانی از خوشه‌ها، و ابزارهای مدیریت پیشرفته است.

InfluxDB Cloud: یک سرویس ابری مدیریت‌شده که نیاز به نصب و نگهداری سرور را حذف می‌کند. این نسخه برای تیم‌هایی که به دنبال راه‌حل‌های سریع و مقیاس‌پذیر هستند مناسب است.

نصب و راه‌اندازی

برای نصب InfluxDB متن‌باز:

دانلود و نصب: بسته به سیستم‌عامل (Linux، macOS، Windows)، می‌توانید InfluxDB را از وب‌سایت رسمی دانلود کنید.

# برای Ubuntu/Debian

wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.5_amd64.deb

sudo dpkg -i influxdb2-2.7.5_amd64.deb

راه‌اندازی سرویس:

bash

sudo systemctl start influxdb

دسترسی به رابط کاربری: InfluxDB یک رابط وب در http://localhost:8086 ارائه می‌دهد که برای پیکربندی و مدیریت استفاده می‌شود.

ایجاد دیتابیس و نوشتن داده: با استفاده از InfluxQL یا API می‌توانید داده‌ها را وارد کنید:

curl -XPOST "http://localhost:8086/write?db=mydb" --data-binary 'cpu_usage,host=server1 value=0.64'

نمونه کد و پرس‌وجو

مطمئناً، در اینجا چند نمونه کد برای نوشتن داده در InfluxDB و همچنین چند نمونه پرس و جو با استفاده از InfluxQL آورده شده است.

پیش‌نیاز: فرض بر این است که شما یک نمونه InfluxDB در حال اجرا دارید و می‌دانید چگونه با آن ارتباط برقرار کنید (مثلاً از طریق خط فرمان influx یا یک کتابخانه کلاینت).

1. نوشتن داده در InfluxDB:

InfluxDB از یک پروتکل خطی (Line Protocol) برای نوشتن داده‌ها استفاده می‌کند. هر خط در این پروتکل شامل موارد زیر است:

اندازه‌گیری (Measurement): نامی که سری زمانی را توصیف می‌کند (مانند cpu_usage).

برچسب‌ها (Tags): جفت‌های کلید-مقدار اختیاری که فراداده را برای سری زمانی مشخص می‌کنند (مانند host=server01,region=eu-west).

فیلدها (Fields): جفت‌های کلید-مقدار که مقدار واقعی داده و نوع آن را مشخص می‌کنند (مانند value=78.5).

مهر زمانی (Timestamp): زمان وقوع داده (اختیاری؛ اگر ارائه نشود، زمان سرور InfluxDB استفاده می‌شود).

در اینجا چند نمونه نحوه نوشتن داده با استفاده از پروتکل خطی آورده شده است:

cpu_usage,host=server01,region=eu-west value=78.5

memory_usage,host=server01 value=65.2

http_requests,status=200,method=GET value=120

نوشتن داده با استفاده از کلاینت پایتون:

برای نوشتن داده‌ها به صورت برنامه‌نویسی، می‌توانید از کتابخانه‌های کلاینت مختلفی برای زبان‌های برنامه‌نویسی مختلف استفاده کنید. در اینجا یک مثال با استفاده از کتابخانه کلاینت پایتون influxdb-client آورده شده است:

from influxdb_client import InfluxDBClient, Point, WriteOptions

from datetime import datetime

# جزئیات اتصال به InfluxDB را جایگزین کنید

url = "http://localhost:8086"

token = "YOUR_INFLUXDB_TOKEN"

org = "YOUR_INFLUXDB_ORG"

bucket = "YOUR_INFLUXDB_BUCKET"

with InfluxDBClient(url=url, token=token, org=org) as client:

    write_api = client.write_api(write_options=WriteOptions(batch_size=1000,

                                                            flush_interval=10_000,

                                                            retry_interval=5_000))

    point1 = Point("cpu_usage") \

        .tag("host", "server02") \

        .tag("region", "us-east") \

        .field("value", 82.1) \

        .time(datetime.utcnow())

    point2 = Point("memory_usage") \

        .tag("host", "server02") \

        .field("value", 70.5) \

        .time(datetime.utcnow())

    points = [point1, point2]

    write_api.write(bucket=bucket, record=points)

    print("داده‌ها با موفقیت نوشته شدند.")

2. نمونه پرس و جو با استفاده از InfluxQL:

InfluxQL یک زبان پرس و جوی SQL-مانند است که برای بازیابی و تحلیل داده‌های سری زمانی در InfluxDB استفاده می‌شود. در اینجا چند نمونه پرس و جو آورده شده است:

انتخاب تمام فیلدها و برچسب‌ها از یک اندازه‌گیری:

SELECT * FROM cpu_usage;

انتخاب فیلد value از اندازه‌گیری cpu_usage برای یک هاست خاص:

SELECT value FROM cpu_usage WHERE host = 'server01';

انتخاب میانگین مقدار value از اندازه‌گیری cpu_usage و گروه‌بندی بر اساس هاست:

SELECT mean(value) FROM cpu_usage GROUP BY host;

انتخاب حداکثر مقدار value از اندازه‌گیری cpu_usage و گروه‌بندی بر اساس هاست و منطقه، در بازه زمانی 5 دقیقه‌ای:

SELECT max(value) FROM cpu_usage WHERE time >= now() - 1h GROUP BY host, region, time(5m);

استفاده از تابع WHERE با چندین شرط:

SELECT value FROM http_requests WHERE status = '200' AND method = 'GET';

انتخاب تعداد نقاط داده در یک اندازه‌گیری:

SELECT count(*) FROM memory_usage;

استفاده از ORDER BY برای مرتب‌سازی نتایج بر اساس زمان:

SELECT value FROM cpu_usage ORDER BY time DESC LIMIT 10;

استفاده از LIMIT برای محدود کردن تعداد نتایج:

SELECT value FROM cpu_usage LIMIT 5;

نحوه اجرای پرس و جو

شما می‌توانید این پرس و جوها را با استفاده از کلاینت خط فرمان influx اجرا کنید. پس از اتصال به نمونه InfluxDB خود، می‌توانید پرس و جوها را مستقیماً وارد کنید. همچنین، بسیاری از ابزارهای تجسم‌سازی مانند Grafana به شما امکان می‌دهند تا پرس و جوهای InfluxQL را برای ایجاد نمودارها و داشبوردها بنویسید.

ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را می‌توانید از کتابخانه‌های عمومی سراسر کشور و نیز از دکه‌های روزنامه‌فروشی تهیه نمائید.

ثبت اشتراک نسخه کاغذی ماهنامه شبکه     
ثبت اشتراک نسخه آنلاین

 

کتاب الکترونیک +Network راهنمای شبکه‌ها

  • برای دانلود تنها کتاب کامل ترجمه فارسی +Network  اینجا  کلیک کنید.

کتاب الکترونیک دوره مقدماتی آموزش پایتون

  • اگر قصد یادگیری برنامه‌نویسی را دارید ولی هیچ پیش‌زمینه‌ای ندارید اینجا کلیک کنید.

ایسوس

نظر شما چیست؟