مفاهیم InfluxDB

آشنایی با اصطلاحات و مفاهیم کلیدی در InfluxDB

InfluxDB یک پایگاه داده سری زمانی (Time Series) متن باز است که برای ذخیره و بازیابی سری های زمانی به کار می رود. این برنامه به زبان GO نوشته شده است. اگر هنوز اطلاع چندانی از این پایگاه داده ندارید و می خواهید بیشتر با اینکه InfluxDB چیست آشنا شوید، پیشنهاد می کنیم ابتدا مقاله قبلی ما را در رابطه با این دیتابیس مطالعه کنید و پس از آن باید بدانید که مفاهیمی که در این مقاله آورده شده است، برای کار با InfluxDB ضروری هستند. آنها هسته اصلی نحوه نوشتن، ذخیره و دسترسی به داده های سری زمانی هستند.

پروتکل خط (Line Porotocol) چیست؟


پروتکل خط یکی از مفاهیم InfluxDB است که فرمت ورودی داده ها را مشخص می کند. از فرمت پروتکل خط برای نوشتن داده ها در InfluxDB استفاده کنید. هر خط نشان دهنده یک نقطه داده است. نقاط داده حاوی برچسب ها و فیلدها هستند.

مثال زیر یک نمونه از پروتکل خط را نشان می دهد:

environment,devId=b47f6944 Temp=21.00,Lat=50.087325,Lon=14.407154 1603091412

فضای سفید، کاما و موقعیت، همگی معانی مهمی در پروتکل خط دارند. در این بخش قسمت هایی از این کد را بررسی کنیم:

environment,devId=b47f6944 Temp=21.00,Lat=50.087325,Lon=14.407154 1603091412
|         | |            | |                                    | |        |
+---------+ +------------+ +------------------------------------+ +--------+
measurement tags           fields                                 timestamp

در قسمت اول، قطعه کد environment ارائه شده است و باید با کاما آورده شود. بعد از کاما یک مجموعه تگ، سپس یک فاصله و پس از آن یک مجموعه فیلدهای جدول قرار می گیرد. تایم استمپ اختیاری است و پس از فاصله می آید. اگر تایم استمپ ارائه نشده باشد، از زمان فعلی استفاده می شود.

منابع InfluxDB

کاربر (User):

به کاربران InfluxDB اجازه دسترسی به پایگاه داده داده شده است. کاربران به عنوان عضوی از یک سازمان اضافه می شوند و از نشانه های احراز هویت برای دسترسی به منابع استفاده می کنند.

توکن (Token):

توکن‌ها ( یا توکن‌های احراز هویت ) مجوزهای کاربر و سازمان را در InfluxDB تأیید می‌کنند. انواع مختلفی از نشانه‌های تأیید اعتبار وجود دارد:

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

سطل (Bucket):

سطل مکانی نامگذاری شده است که داده های سری زمانی در آن ذخیره می شود. همه باکت ها دارای یک سیاست حفظ هستند که مدت زمانی که هر نقطه داده باقی می ماند، اشاره می کنند. همه باکت ها متعلق به یک سازمان هستند.

سازمان (Organization):

سازمان یک فضای کاری منطقی برای گروهی از کاربران است. Organization شامل اعضا، باکت ها، وظایف و داشبوردها (همراه با تعدادی از منابع دیگر) می شود.

کاردینالیتی (Cardinality):

عملکرد در دسترسی به داده های سری زمانی می تواند تحت تأثیر اصلی بودن آن داده ها باشد. در InfluxDB، نگرانی اصلی کاردینالیته سری است.

فلاکس (Flux):

Flux زبان برنامه نویسی InfluxDB است. کد Flux را می توان توسط کد دیگری به عنوان رشته ارسال کرد تا توسط InfluxDB API اجرا شود.


یک کوئری ساده در اینفلاکس دی بی ممکن است به شکل زیر باشد:

from(bucket:"example-bucket")
  |> range(start:-1h)
  |> filter(fn:(r) =>
    r._measurement == "my-measurement" and
    r.my-tag-key == "my-tag-value"
  )

این قطعه کد داده ها را از یک Bucket با تابع ()from پرس و جو می کند. تابع ()range رکوردها را بر اساس محدوده زمانی فیلتر می کند. تابع ()filter داده ها را بر اساس شرایط تعریف شده در یک تابع (fn) فیلتر می کند.

شما می‌توانید از Flux برای کارهای مختلفی از جمله اما نه محدود به موارد زیر استفاده کنید:

  • تبدیل داده ها
  • تحلیل داده ها
  • نوشتن وظایف سفارشی، چک ها و اعلان ها

البته باید بدانید که نسخه 1 InfluxDB Cloud از توکن های مدیریت پشتیبانی نمی کند.

شرح و بررسی CSV یکی از مفاهیم InfluxDB

Annotated CSV یکی دیگر از مفاهیم InfluxDB است که در واقع فرمت خروجی یک جستجوی Flux با InfluxDB 2.0 است. برای مثال، تصور کنید در حال نوشتن داده‌هایی در مورد تعداد گربه‌های «کالیگو» و «تابی»، گربه‌های «جوان» و «بالغ» در دو پناهگاه، «الف» و «ب» هستیم. طرح داده ها به شکل زیر است:

دستهنمونه اندازه گیری
“گربه و سگ”“گربه ها”
نمونه برچسبنوع برچسب
“پناهگاه”“الف”، “ب”
“نوع نژاد گربه”“کالیگو”، “تابی”
نمونه کلیدی
“جوان”، “بالغ”

اگر داده ها را با استفاده از Query مانند زیر مورد پرس و جو قرار دهیم:

from(bucket: "cats-and-dogs")
  |> range(start: 2020-05-15T00:00:00Z, stop: 2020-05-16T00:00:00Z)
  |> filter(fn: (r) => r["_measurement"] == "cats")
  |> filter(fn: (r) => r["_field"] == "adult")
  |> filter(fn: (r) => r["shelter"] == "A")
  |> filter(fn: (r) => r["type"] == "calico")
  |> limit(n:2)Copy

نتیجه CSV به این صورت خواهد بود:

#group,false,false,true,true,false,false,true,true,true,true
#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,double,string,string,string,string
#default,_result,,,,,,,,,
,result,table,_start,_stop,_time,_value,_field,_measurement,shelter,type
,,0,2020-05-15T00:00:00Z,2020-05-16T00:00:00Z,2020-05-15T18:50:33.262484Z,8,adult,cats,A,calico
,,0,2020-05-15T00:00:00Z,2020-05-16T00:00:00Z,2020-05-15T18:51:48.852085Z,7,adult,cats,A,calico

CSV Annotated دارای سه نوع حاشیه نویسی است. ردیف های Annotation ویژگی های ستون را توصیف می کنند و با 1 شروع می شوند.

#group: یک متغیر بولی است که نشان می دهد ستون بخشی از کلید گروه است. کلید گروه، لیستی از ستون‌هایی است که هر ردیف در جدول دارای مقدار یکسانی است. بیایید تفاوت بین ستون های true و false یا ستون هایی که به ترتیب بخشی از کلید گروه هستند و نیستند را بررسی کنیم.

ستون های true: در کوئری مثال بالا، ما با یک نوع فیلد، بزرگسال، یک تگ “shelter”، “A” و یک برچسب “نوع”، “calico” فیلتر کرده ایم. این مقادیر در بین ردیف‌ها ثابت هستند، بنابراین آن ستون‌ها روی true تنظیم می‌شوند. همچنین، فیلتر کردن یک مقدار واحد در تگ ها و فیلدها به این معنی است که همه جداول ما به یک جدول تعلق دارند. بنابراین ستون جدول برای این پرس و جو نیز صادق است. ستون های _start و _stop، که توسط محدوده ما تعریف می شوند، ثابت در سراسر ردیف هستند، بنابراین این مقادیر نیز درست هستند.

ستون‌های false: ستون‌های _time و _value دارای مقادیر متفاوتی در بین سطرها هستند، به همین دلیل است که مقدار نادرست را برای مقدار Annotation# دریافت می‌کنند.

#datatype: نوع داده یا هر عنصر پروتکل خطی را که ستون نشان می دهد، توصیف می کند.

#default: مقداری که برای ردیف هایی خالی استفاده می شود. به عنوان مثال، اگر ما کوئری خود را به متغیر ourQuery اختصاص داده بودیم، این حاشیه نویسی به شکل زیر خواهد بود:

#default,ourQuery,,,,,,,,,

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *