مقدمه
بسیاری از برنامه ها ، مانند سیستم های مانیتورینگ و سیستم های جمع آوری داده ها ، اطلاعات را برای تجزیه و تحلیل بیشتر جمع می کنند. این تجزیه و تحلیلها اغلب به نحوه تغییر یک بخش از داده یا یک سیستم در گذشت زمان نگاه می کنند. در این موارد ، داده ها به عنوان یک سری زمان نمایش داده می شوند ، و هر نقطه داده همراه با یک timestamp همراه است. نمونه ای از آن ها به این صورت است:
2019-11-01 09:00:00 server.cpu.1 0.9
2019-11-01 09:00:00 server.cpu.15 0.8
2019-11-01 09:01:00 server.cpu.1 0.9
2019-11-01 09:01:00 server.cpu.15 0.8

اخیراً ارتباط داده های مجموعه زمانی به لطف استقرار جدید اینترنت اشیاء (IoT) و اینترنت صنعتی اشیاء افزایش یافته است. تعداد بیشتر و بیشتری دستگاه وجود دارد که اطلاعات مجموعه های مختلفی را جمع آوری می کنند: از جمله ردیاب های بدنسازی ، ساعت های هوشمند ، ایستگاه های خانگی آب و هوا و سنسورهای مختلف. این دستگاه ها اطلاعات زیادی را جمع می کنند و تمام این داده ها باید در جایی ذخیره شوند.
بانک اطلاعاتی کلاسیک رابطه ای اغلب برای ذخیره داده ها استفاده می شود ، اما وقتی صحبت از حجم عظیم داده های سری زمانی است ، همیشه مناسب نیستند. هنگامی که نیاز به پردازش مقدار زیادی از داده های مجموعه زمانی دارید ، دیتابیس رابطه ای می تواند خیلی کند باشد. به همین دلیل ، بانکهای اطلاعاتی بهینه سازی شده ای به نام پایگاه داده های NoSQL ایجاد شده اند تا از مشکلات پایگاه های داده رابطه ای جلوگیری شود.
TimescaleDB یک پایگاه داده منبع باز است که برای ذخیره داده های سری زمانی بهینه شده است. این برنامه به عنوان پسوند PostgreSQL پیاده سازی شده است و سهولت استفاده از پایگاه های داده رابطه ای و سرعت پایگاه داده های NoSQL را ترکیب می کند. در نتیجه ، به شما امکان می دهد تا از PostgreSQL برای ذخیره داده های تجاری و سری های زمانی به صورت همزمان استفاده کنید.
با دنبال کردن این آموزش ، TimescaleDB را روی CentOS 7 تنظیم کرده ، آن را پیکربندی کرده و یاد می گیرید که چگونه با آن کار کنید. شما با ایجاد پایگاه داده های سری زمانی و ایجاد درخواست های ساده ان اجرا خواهید کرد. در آخر ، خواهید دید که چگونه داده های غیر ضروری را حذف کنید.
پیش نیازها
برای دنبال کردن این آموزش ، به موارد زیر نیاز دارید:
یک سرور مجازی CentOS 7 که با دنبال کردن راهنمای اولیه راه اندازی سرور مجازی با CentOS 7 نصب شده باشد، و شامل یک کاربر غیر ریشه با امتیازات sudo و فایروال تنظیم شده با firewalld باشد. برای راه اندازی firewalld ، قسمت “پیکربندی یک فایروال ساده” در آموزش مراحل اضافی توصیه شده برای سرور مجازی های جدید CentOS 7 را دنبال کنید.
PostgreSQL که بر روی سرور مجازی شما نصب شده باشد. برای نصب و پیکربندی آن ، راهنمای نصب و استفاده از PostgreSQL در CentOS 7 را دنبال کنید.
مرحله 1 – نصب TimescaleDB
TimescaleDB در منابع پکیجی پیش فرض CentOS در دسترس نیست ، بنابراین در این مرحله شما آن را از منبع شخص ثالث TimescaleDB نصب خواهید کرد.
ابتدا یک فایل منبع جدید ایجاد کنید:
$ sudo vi /etc/yum.repos.d/timescaledb.repo

با زدن i وارد حالت insert شده و پیکربندی زیر را در فایل پیست کنید:
/etc/yum.repos.d/timescaledb.repo
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

پس از اتمام ، ESC را فشار دهید تا از حالت insert خارج شوید ، سپس: wq و ENTER را برای ذخیره و خروج از فایل بزنید. برای کسب اطلاعات بیشتر در مورد ویرایشگر متن vi و vim جانشین آن ، از نصب و استفاده از ویرایشگر متن Vim در آموزش Cloud Server استفاده کنید.
اکنون می توانید مراحل نصب را ادامه دهید. در این آموزش از PostgreSQL نسخه 11 استفاده شده است. اگر از نسخه دیگری از PostgreSQL استفاده می کنید (به عنوان مثال 9.6 یا 11) ، مقدار مورد نظر را در دستور زیر جایگزین کرده و آن را اجرا کنید:
$ sudo yum install -y timescaledb-postgresql-11

TimescaleDB اکنون نصب شده و آماده استفاده است. در مرحله بعد ، آن را روشن کرده و برخی از تنظیمات مرتبط با آن را در فایل پیکربندی PostgreSQL برای بهینه سازی بانک اطلاعات تنظیم خواهید کرد.
مرحله 2 – پیکربندی TimescaleDB
ماژول TimescaleDB با تنظیمات پیش فرض پیکربندی PostgreSQL خوب کار می کند ، اما برای بهبود عملکرد و استفاده بهتر از منابع پردازنده ، حافظه و منابع دیسک ، توسعه دهندگان TimescaleDB پیکربندی برخی پارامترهای فردی را پیشنهاد می کنند. این کار می تواند به صورت خودکار با ابزار timescaledb-tune یا با ویرایش دستی فایل postgresql.conf سرور مجازی شما انجام شود.
در این آموزش از ابزار timescaledb-tune استفاده خواهید کرد. این ابزار فایل postgresql.conf را می خواند و به صورت تعاملی پیشنهاد ایجاد تغییر می دهد.
برای شروع wizard پیکربندی دستور زیر را اجرا کنید:
$ sudo timescaledb-tune –pg-config=/usr/pgsql-11/bin/pg_config
ابتدا از شما خواسته می شود مسیر فایل پیکربندی PostgreSQL را تأیید کنید:
Output
Using postgresql.conf at this path:
/var/lib/pgsql/11/data/postgresql.conf

Is this correct? [(y)es/(n)o]:

ابزار به طور خودکار مسیر فایل پیکربندی را تشخیص می دهد ، بنابراین با وارد کردن y این کار را تأیید کنید:
Output

Is this correct? [(y)es/(n)o]: y
Writing backup to:
/tmp/timescaledb_tune.backup201912191633

سپس ، ماژول TimescaleDB را با تایپ y در اعلان بعدی و فشار دادن ENTER فعال کنید:
Output
shared_preload_libraries needs to be updated
Current:
#shared_preload_libraries = ”
Recommended:
shared_preload_libraries = ‘timescaledb’
Is this okay? [(y)es/(n)o]: y
success: shared_preload_libraries will be updated

بر اساس ویژگی های سرور مجازی خود و نسخه PostgreSQL ، به شما پیشنهاد می شود تنظیمات خود را تنظیم کنید. برای شروع فرآیند تنظیم ، y را فشار دهید:
Output
Tune memory/parallelism/WAL and other settings? [(y)es/(n)o]: y
Recommendations based on 7.64 GB of available memory and 4 CPUs for PostgreSQL 11

Memory settings recommendations
Current:
shared_buffers = 128MB
#effective_cache_size = 4GB
#maintenance_work_mem = 64MB
#work_mem = 4MB
Recommended:
shared_buffers = 1955MB
effective_cache_size = 5865MB
maintenance_work_mem = 1001121kB
work_mem = 5005kB
Is this okay? [(y)es/(s)kip/(q)uit]:

timescaledb-tune به طور خودکار حافظه موجود سرور مجازی را تشخیص داده و مقادیر توصیه شده را برای تنظیمات shared_buffers ، effective_cache_size ، maintenance_work_mem و work_mem محاسبه می کند. اگر می خواهید در مورد چگونگی انجام این کار اطلاعات بیشتری کسب کنید ، صفحه GitHub را برای دیدن timescaledb-tune. چک کنید.
اگر این تنظیمات خوب به نظر می رسد ، y را وارد کنید:
Output

Is this okay? [(y)es/(s)kip/(q)uit]: y
success: memory settings will be updated

در این مرحله ، اگر سرور مجازی شما دارای چندین CPU باشد ، توصیه های مربوط به تنظیمات موازی را پیدا خواهید کرد. در حالی که اگر یک CPU داشته باشید ، timescaledb-tune. با استفاده از جدول زمانی شما را مستقیماً به تنظیمات WAL می فرستد.
سرور مجازی هایی که دارای چندین CPU هستند ، با توصیه هایی مانند این روبرو می شوند:
Output
Parallelism settings recommendations
Current:
missing: timescaledb.max_background_workers
#max_worker_processes = 8
#max_parallel_workers_per_gather = 2
#max_parallel_workers = 8
Recommended:
timescaledb.max_background_workers = 8
max_worker_processes = 15
max_parallel_workers_per_gather = 2
max_parallel_workers = 4
Is this okay? [(y)es/(s)kip/(q)uit]:

این تنظیمات تعداد کارگرانی که درخواست ها و کارهای پس زمینه را پردازش می کنند را تنظیم می کند. می توانید اطلاعات بیشتری در مورد این تنظیمات را از مطالب TimescaleDB و PostgreSQL کسب کنید.
y را وارد کنید و برای پذیرش این تنظیمات enter بزنید:
Output

Is this okay? [(y)es/(s)kip/(q)uit]: y
success: parallelism settings will be updated

در مرحله بعد ، توصیه هایی برای Write Ahead Log (WAL) پیدا خواهید کرد:
Output
WAL settings recommendations
Current:
#wal_buffers = -1
#min_wal_size = 80MB
#max_wal_size = 1GB
Recommended:
wal_buffers = 16MB
min_wal_size = 4GB
max_wal_size = 8GB
Is this okay? [(y)es/(s)kip/(q)uit]:

WAL یکپارچگی داده ها را حفظ می کند ، اما تنظیمات پیش فرض می تواند باعث عدم کارآیی I / O شود که عملکرد نوشتن را کند می کند. برای بهینه سازی این تنظیمات y را تایپ و وارد کنید:
Output

Is this okay? [(y)es/(s)kip/(q)uit]: y
success: WAL settings will be updated
اکنون چند توصیه متفرقه خواهید دید:
Output
Miscellaneous settings recommendations
Current:
#default_statistics_target = 100
#random_page_cost = 4.0
#checkpoint_completion_target = 0.5
#max_locks_per_transaction = 64
#autovacuum_max_workers = 3
#autovacuum_naptime = 1min
#effective_io_concurrency = 1
Recommended:
default_statistics_target = 500
random_page_cost = 1.1
checkpoint_completion_target = 0.9
max_locks_per_transaction = 64
autovacuum_max_workers = 10
autovacuum_naptime = 10
effective_io_concurrency = 200
Is this okay? [(y)es/(s)kip/(q)uit]:

تمام این پارامترهای مختلف با هدف افزایش کارایی انجام می شود. به عنوان مثال ، SSD ها می توانند بسیاری از درخواست های همزمان را پردازش کنند ، بنابراین بهترین مقدار برای eff_io_concurrency ممکن است در بین صدها مورد باشد. می توانید اطلاعات بیشتری در مورد این گزینه ها را در مستندات PostgreSQL بیابید.
برای ادامه ، y را وارد کنید و enter بزنید.
Output

Is this okay? [(y)es/(s)kip/(q)uit]: y
success: miscellaneous settings will be updated
Saving changes to: /var/lib/pgsql/11/data/postgresql.conf

در نتیجه ، یک فایل پیکربندی آماده را در /var/lib/pgsql/11/data/postgresql.conf دریافت خواهید کرد.
توجه: اگر نصب را از ابتدا انجام می دهید ، می توانید فرمان اولیه را نیز با فلگ های –quiet و –yes اجرا کنید ، که به طور خودکار تمام توصیه ها را اعمال می کند و تغییراتی در فایل پیکربندی postgresql.conf ایجاد می کند:
$ sudo timescaledb-tune –pg-config=/usr/pgsql-11/bin/pg_config –quiet –yes
برای اینکه تغییرات پیکربندی عملی شوند ، باید سرویس PostgreSQL را مجدداً راه اندازی کنید:
$ sudo systemctl restart postgresql-11.service
اکنون دیتابیس با پارامترهای بهینه در حال اجرا است و آماده همکاری با داده های سری زمانی میباشد. در مراحل بعدی ، کار با این داده ها را امتحان میکنید: ایجاد بانک اطلاعاتی جدید و جداول هایپر و انجام عملیات.
مرحله 3 – ایجاد یک بانک اطلاعاتی جدید و Hypertable
با بهینه سازی تنظیم TimescaleDB ، شما آماده کار با داده های سری زمانی هستید. TimescaleDB به عنوان پسوند PostgreSQL پیاده سازی می شود ، بنابراین عملیات با داده های سری زمانی تفاوت چندانی با عملیات داده های رابطه ای ندارند. در عین حال ، بانک اطلاعاتی به شما امکان می دهد تا در آینده داده های سری زمانی و جداول رابطه ای را آزادانه ترکیب کنید.
ابتدا یک پایگاه داده جدید ایجاد می کنید و پسوند TimescaleDB را برای آن فعال می کنید. به پایگاه داده PostgreSQL وارد شوید:
$ sudo -u postgres psql
اکنون یک دیتابیس جدید ایجاد کرده و به آن متصل شوید. این آموزش پایگاه داده را نامگذاری می کند:
Postgres=# CREATE DATABASE timeseries;
Postgres=# \c timeseries

می توانید اطلاعات دیگری در مورد کار با بانک اطلاعاتی PostgreSQL را در نحوه ایجاد ، حذف و مدیریت جداول در PostgreSQL در یک آموزش Cloud Server دریافت کنید.
در آخر ، پسوند TimescaleDB را فعال کنید:
Timeseries=# CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
خروجی زیر را مشاهده خواهید کرد:
Output
WARNING:
WELCOME TO
_____ _ _ ____________
|_ _(_) | | | _ \ ___ \
| | _ _ __ ___ ___ ___ ___ __ _| | ___| | | | |_/ /
| | | | _ ` _ \ / _ \/ __|/ __/ _` | |/ _ \ | | | ___ \
| | | | | | | | | __/\__ \ (_| (_| | | __/ |/ /| |_/ /
|_| |_|_| |_| |_|\___||___/\___\__,_|_|\___|___/ \____/
Running version 1.5.1
For more information on TimescaleDB, please visit the following links:

1. Getting started: https://docs.timescale.com/getting-started
2. API reference documentation: https://docs.timescale.com/api
3. How TimescaleDB is designed: https://docs.timescale.com/introduction/architecture

Note: TimescaleDB collects anonymous reports to better understand and assist our users.
For more information and how to disable, please see our docs https://docs.timescaledb.com/using-timescaledb/telemetry.

CREATE EXTENSION

نکته اولیه تعامل با داده های سری زمانی، hypertable ها هستند ، انتزاع بسیاری از جداول جداگانه که داده ها را نگه می دارند ، به نام chunks.
برای ایجاد یک hypertable ، با یک جدول SQL معمولی شروع کنید و سپس از طریق تابع create_hypertable آن را به تبدیل کنید.
یک جدول تهیه کنید که داده ها را برای ردیابی دما و رطوبت در کل دستگاه ها در طول زمان ذخیره کند:
Timeseries=# CREATE TABLE conditions (
Timeseries=# time TIMESTAMP WITH TIME ZONE NOT NULL,
Timeseries=# device_id TEXT,
Timeseries=# temperature NUMERIC,
Timeseries=# humidity NUMERIC
Timeseries=# );

این دستور یک جدول با نام conditions شامل چهار ستون ایجاد می کند. ستون اول جدول زمانی timestamp را ذخیره می کند که شامل منطقه زمانی است و نمی تواند خالی باشد. در مرحله بعد ، شما از ستون زمان برای تبدیل جدول خود به یک Hypertable استفاده می کنید که در زمان تقسیم می شود:
Timeseries=# SELECT create_hypertable(‘conditions’, ‘time’);

این دستور تابع create_hypertable() را فرامیخواند، که یک هایپرجدول TimescaleDB را از جدول PostgreSQL ایجاد می کند ، و جایگزین دومی می نماید.
خروجی زیر را دریافت خواهید کرد:
Output
create_hypertable
————————-
(1,public,conditions,t)
(1 row)

در این مرحله ، یک Hypertable جدید برای ذخیره داده های سری زمانی ایجاد کرده اید. اکنون می توانید با نوشتن hypertable ، آن را با داده ها پر کنید و سپس فرایند حذف آن را اجرا کنید.
مرحله 4 – نوشتن و حذف داده ها
در این مرحله داده ها را با استفاده از دستورات استاندارد SQL وارد می کنید و مجموعه های زیادی از داده ها را از منابع خارجی وارد می کنید. این به شما جنبه های پایگاه داده رابطه ای TimescaleDB را نشان می دهد.
ابتدا دستورات ساده را امتحان کنید. با استفاده از دستور استاندارد INSERT SQL می توانید داده ها را به hypertable وارد کنید. برخی از داده های دما و رطوبت نمونه را برای دستگاه تئوری weather-pro-000000 با استفاده از دستور زیر وارد کنید:
Timeseries=# INSERT INTO conditions(time, device_id, temperature, humidity)
Timeseries=# VALUES (NOW(), ‘weather-pro-000000’, 84.1, 84.1);
خروجی زیر را دریافت خواهید کرد:
Output
INSERT 0 1

همچنین می توانید چندین ردیف داده به طور همزمان وارد کنید. موارد زیر را امتحان کنید:
Timeseries=# INSERT INTO conditions
Timeseries=# VALUES
Timeseries=# (NOW(), ‘weather-pro-000002’, 71.0, 51.0),
Timeseries=# (NOW(), ‘weather-pro-000003’, 70.5, 50.5),
Timeseries=# (NOW(), ‘weather-pro-000004’, 70.0, 50.2);
خروجی زیر را دریافت خواهید کرد:
Output
INSERT 0 3

همچنین می توانید مشخص کنید که دستور INSERT با استفاده از عبارت RETURNING برخی یا تمام داده های درج شده را باز گرداند:
Timeseries=# INSERT INTO conditions
Timeseries=# VALUES (NOW(), ‘weather-pro-000002’, 70.1, 50.1) RETURNING *;

خروجی زیر را مشاهده خواهید کرد:
Output
time | device_id | temperature | humidity
——————————-+——————–+————-+———-
2019-09-15 14:14:01.576651+00 | weather-pro-000002 | 70.1 | 50.1
(1 row)

اگر می خواهید داده ها را از hypertable حذف کنید ، از دستور استاندارد DELETE SQL استفاده کنید. موارد زیر را انجام دهید تا هرکدام از داده ها که دارای دمای بالاتر از 80 یا رطوبت بالای 50 باشد ، حذف کنید:
Timeseries=# DELETE FROM conditions WHERE temperature > 80;
Timeseries=# DELETE FROM conditions WHERE humidity > 50;

پس از عمل حذف ، توصیه می شود از دستور VACUUM استفاده کنید ، تا فضایی که هنوز توسط داده هایی که حذف شده اند مورد استفاده قرار می گیرد آزاد شود.
Timeseries=# VACUUM conditions;

می توانید اطلاعات بیشتری در مورد دستور VACUUM در مستندات PostgreSQL بیابید.
این فرمان ها برای ورود داده ها در مقیاس کوچک مناسب هستند ، اما از آنجا که داده های سری زمانی اغلب داده های عظیمی را از چندین دستگاه به طور همزمان تولید می کنند ، دانستن چگونگی درج صدها یا هزاران سطر به طور همزمان ضروری است. اگر داده های منابع خارجی را به صورت ساختاری ، به عنوان مثال با فرمت csv تهیه کرده اید ، این کار را می توانید به سرعت انجام دهید.
برای آزمایش این مرحله ، از یک مجموعه داده نمونه استفاده می کنید که داده های دما و رطوبت را از مکان های مختلف نشان می دهد. این داده ها توسط توسعه دهندگان TimescaleDB ایجاد شده اند تا به شما امکان دهد پایگاه داده خود را امتحان کنید. در TimescaleDB می توانید اطلاعات بیشتری در مورد مجموعه داده های نمونه را بررسی کنید
مستند سازی
بیایید ببینیم چگونه می توانید داده ها را از مجموعه داده نمونه weather_smallبه پایگاه داده خود وارد کنید. اول ، از Postgresql خارج شوید:
Timeseries=# \q
سپس مجموعه داده را دانلود کرده و آن را اکسترکت کنید:
$ cd /tmp
$ Curl https://timescaledata.blob.core.windows.net/datasets/weather_small.tar.gz -o weather_small.tar.gz
$ tar -xvzf weather_small.tar.gz

سپس ، داده های دما و رطوبت را به پایگاه داده خود وارد کنید:
$ sudo -u postgres psql -d timeseries -c “\COPY conditions FROM weather_small_conditions.csv CSV”
این به بانک اطلاعاتی timeseries  متصل می شود و دستور \ COPY را که اجرا میکند که داده ها را از فایل انتخاب شده به قسمت conditions در hypertable کپی کند. برای چند ثانیه اجرا می شود.
پس از وارد کردن داده ها به جدول خود ، خروجی زیر را دریافت خواهید کرد:
Output
COPY 1000000

در این مرحله داده ها را به صورت دستی و در دسته هایی به hypertable اضافه می کنید. در مرحله بعدی ، به اجرای درخواست ها ادامه دهید
مرحله 5 – جستجوی داده ها
اکنون که جدول شما حاوی داده است ، می توانید درخواست های مختلفی را برای تجزیه و تحلیل آن انجام دهید.
برای شروع ، وارد پایگاه داده شوید:
$ sudo -u postgres psql -d timeseries
همانطور که قبلاً ذکر شد ، برای کار با hypertables می توانید از دستورات استاندارد SQL استفاده کنید. به عنوان مثال ، برای نشان دادن 10 ورودی گذشته از بخش conditions ، دستور زیر را اجرا کنید:
Timeseries=# SELECT * FROM conditions LIMIT 10;
خروجی زیر را مشاهده خواهید کرد:
Output
time | device_id | temperature | humidity
————————+——————–+——————–+———-
2016-11-15 12:00:00+00 | weather-pro-000000 | 39.9 | 49.9
2016-11-15 12:00:00+00 | weather-pro-000001 | 32.4 | 49.8
2016-11-15 12:00:00+00 | weather-pro-000002 | 39.800000000000004 | 50.2
2016-11-15 12:00:00+00 | weather-pro-000003 | 36.800000000000004 | 49.8
2016-11-15 12:00:00+00 | weather-pro-000004 | 71.8 | 50.1
2016-11-15 12:00:00+00 | weather-pro-000005 | 71.8 | 49.9
2016-11-15 12:00:00+00 | weather-pro-000006 | 37 | 49.8
2016-11-15 12:00:00+00 | weather-pro-000007 | 72 | 50
2016-11-15 12:00:00+00 | weather-pro-000008 | 31.3 | 50
2016-11-15 12:00:00+00 | weather-pro-000009 | 84.4 | 87.8
(10 rows)

این دستور به شما امکان می دهد ببیند چه داده ای در پایگاه داده است. از آنجا که دیتابیس حاوی یک میلیون رکورد است ، شما از LIMIT 10 برای محدود کردن خروجی به 10 ورودی استفاده کردید.
برای دیدن جدیدترین ورودی ها ، آرایه داده ها را به زمانی و به صورت نزولی مرتب کنید:
Timeseries=# SELECT * FROM conditions ORDER BY time DESC LIMIT 20;
با این کار 20 ورودی اخیر به خروجی فرستاده می شود.
همچنین می توانید یک فیلتر اضافه کنید. به عنوان مثال ، برای دیدن ورودی های دستگاه Weather-Pro-000000 ، فرمان های زیر را اجرا کنید:
Timeseries=# SELECT * FROM conditions WHERE device_id = ‘weather-pro-000000’ ORDER BY time DESC LIMIT 10;
در این حالت ، 10 مورد از آخرین داده های دما و رطوبت ثبت شده توسط دستگاه weather-pro-000000 را مشاهده خواهید کرد.
علاوه بر دستورات استاندارد SQL ، TimescaleDB همچنین تعدادی کاركرد ویژه را ارائه می دهد كه برای تجزیه و تحلیل داده های سری زمانی مفید هستند. به عنوان مثال ، برای یافتن میانه مقادیر درجه حرارت ، می توانید از query زیر با عملکرد percentile_cont استفاده کنید:
Timeseries=# SELECT percentile_cont(0.5)
Timeseries=# WITHIN GROUP (ORDER BY temperature)
Timeseries=# FROM conditions
Timeseries=# WHERE device_id = ‘weather-pro-000000’;

خروجی زیر را مشاهده خواهید کرد:
Output
percentile_cont
—————–
40.5
(1 row)

به این ترتیب ، دمای متوسط ​​را برای کل دوره مشاهده که در آن سنسور weather-pro-00000 قرار دارد مشاهده می کنید.
برای نمایش آخرین مقادیر از هر یک از سنسورها ، می توانید از آخرین عملکرد استفاده کنید:
Timeseries=# select device_id, last(temperature, time)
Timeseries=# FROM conditions
Timeseries=# GROUP BY device_id;

در خروجی لیستی از تمام سنسورها و آخرین مقادیر مربوط را مشاهده خواهید کرد.
برای بدست آوردن مقادیر اولیه از عملکرد first استفاده کنید.
مثال زیر پیچیده تر است. میانگین دما ، حداقل و حداکثر دما برای سنسور انتخاب شده در 24 ساعت گذشته را نشان می دهد:
Timeseries=# SELECT time_bucket(‘1 hour’, time) “hour”,
Timeseries=# trunc(avg(temperature), 2) avg_temp,
Timeseries=# trunc(min(temperature), 2) min_temp,
Timeseries=# trunc(max(temperature), 2) max_temp
Timeseries=# FROM conditions
Timeseries=# WHERE device_id = ‘weather-pro-000000’
Timeseries=# GROUP BY “hour” ORDER BY “hour” DESC LIMIT 24;

در اینجا شما از تابع time_bucket استفاده کرده اید که به عنوان نسخه قدرتمند تابع PostgreSQL date_trunc عمل می کند. در نتیجه خواهید دید که در کدام دوره از روز دمای هوا افزایش یا کاهش می یابد:
Output
hour | avg_temp | min_temp | max_temp
————————+———-+———-+———-
2016-11-16 21:00:00+00 | 42.00 | 42.00 | 42.00
2016-11-16 20:00:00+00 | 41.92 | 41.69 | 42.00
2016-11-16 19:00:00+00 | 41.07 | 40.59 | 41.59
2016-11-16 18:00:00+00 | 40.11 | 39.79 | 40.59
2016-11-16 17:00:00+00 | 39.46 | 38.99 | 39.79
2016-11-16 16:00:00+00 | 38.54 | 38.19 | 38.99
2016-11-16 15:00:00+00 | 37.56 | 37.09 | 38.09
2016-11-16 14:00:00+00 | 36.62 | 36.39 | 37.09
2016-11-16 13:00:00+00 | 35.59 | 34.79 | 36.29
2016-11-16 12:00:00+00 | 34.59 | 34.19 | 34.79
2016-11-16 11:00:00+00 | 33.94 | 33.49 | 34.19
2016-11-16 10:00:00+00 | 33.27 | 32.79 | 33.39
2016-11-16 09:00:00+00 | 33.37 | 32.69 | 34.09
2016-11-16 08:00:00+00 | 34.94 | 34.19 | 35.49
2016-11-16 07:00:00+00 | 36.12 | 35.49 | 36.69
2016-11-16 06:00:00+00 | 37.02 | 36.69 | 37.49
2016-11-16 05:00:00+00 | 38.05 | 37.49 | 38.39
2016-11-16 04:00:00+00 | 38.71 | 38.39 | 39.19
2016-11-16 03:00:00+00 | 39.72 | 39.19 | 40.19
2016-11-16 02:00:00+00 | 40.67 | 40.29 | 40.99
2016-11-16 01:00:00+00 | 41.63 | 40.99 | 42.00
2016-11-16 00:00:00+00 | 42.00 | 42.00 | 42.00
2016-11-15 23:00:00+00 | 42.00 | 42.00 | 42.00
2016-11-15 22:00:00+00 | 42.00 | 42.00 | 42.00
(24 rows)

می توانید عملکردهای مفیدی را در مستندات TimescaleDB بیابید.
اکنون می دانید که چگونه می توانید داده های خود را اداره کنید. در مرحله بعدی ، نحوه حذف داده های غیر ضروری و نحوه فشرده سازی داده ها را مرور خواهید کرد.
مرحله 6 – پیکربندی فشرده سازی و حذف داده ها
با جمع آوری داده ها ، فضای بیشتری در هارد دیسک شما جای می گیرد. برای صرفه جویی در فضا ، آخرین نسخه TimescaleDB یک ویژگی فشرده سازی داده را ارائه می دهد. این ویژگی به هیچ وجه نیازی به تنظیمات فایل سیستم نخواهد داشت و می توان از آن برای کارآمد ساختن سریعتر پایگاه داده استفاده کرد. برای اطلاعات بیشتر در مورد نحوه عملکرد این فشرده سازی ، به مقاله فشرده سازی از TimescaleDB نگاهی بیندازید.
ابتدا فشرده سازی hypertable خود را فعال کنید:
Timeseries=# ALTER TABLE conditions SET (
Timeseries=# timescaledb.compress,
Timeseries=# timescaledb.compress_segmentby = ‘device_id’
Timeseries=# );

داده های زیر را دریافت خواهید کرد:
Output
NOTICE: adding index _compressed_hypertable_2_device_id__ts_meta_sequence_num_idx ON _timescaledb_internal._compressed_hypertable_2 USING BTREE(device_id, _ts_meta_sequence_num)
ALTER TABLE

توجه: همچنین می توانید TimescaleDB را برای فشرده سازی داده ها در مدت زمانی مشخص تنظیم کنید. به عنوان مثال ، شما می توانید اجرا کنید:
Timeseries=# SELECT add_compress_chunks_policy(‘conditions’, INTERVAL ‘7 days’);
در این مثال ، داده ها بعد از یک هفته به طور خودکار فشرده می شوند.
می توانید آمار مربوط به داده های فشرده شده را با این دستور مشاهده کنید:
Timeseries=# SELECT *
Timeseries=# FROM timescaledb_information.compressed_chunk_stats;

سپس لیستی از بخش ها را با وضعیت آنها مشاهده خواهید کرد: وضعیت فشرده سازی و میزان فضای داده های فشرده نشده و فشرده شده در بایت ها.
اگر به مدت طولانی نیازی به ذخیره داده ندارید ، می توانید داده های قدیمی را حذف کنید تا حتی فضای بیشتری آزاد شود. برای این کار یک تابع ویژه drop_chunks وجود دارد. به شما امکان می دهد بخش هایی با داده های قدیمی تر از زمان مشخص شده را حذف کنید:
Timeseries=# SELECT drop_chunks(interval ’24 hours’, ‘conditions’);
این درخواست تمام قسمت ها را از بخش conditions در hypertable که فقط شامل داده های قدیمی تر از روز قبل است ، خالی می کند.
خروجی زیر را دریافت خواهید کرد:
Output
drop_chunks
—————————————-
_timescaledb_internal._hyper_1_2_chunk
(1 row)

برای حذف خودکار داده های قدیمی ، می توانید یک کار cron را پیکربندی کنید. برای کسب اطلاعات بیشتر در مورد نحوه استفاده از cron برای اتوماسیون کارهای مختلف سیستم ، به آموزش ما مراجعه کنید.
از پایگاه داده خارج شوید:
Timeseries=# /q
بعد ، crontab خود را با دستور زیر ویرایش کنید ، که باید از پوسته اجرا شود:
$ crontab -e
اکنون خط زیر را به انتهای فایل اضافه کنید:
crontab

0 1 * * * /usr/bin/psql -h localhost -p 5432 -U postgres -d postgres -c “SELECT drop_chunks(inte

این کار داده های منسوخ را که قدیمی تر از یک روز هستند را ساعت 1 صبح هر روز حذف می کند.
نتیجه
اکنون TimescaleDB را روی سرور مجازی CentOS خود تنظیم کرده اید. همچنین ایجاد Hypertables ، قرار دادن داده ها در آن ، جستجوی داده ها ، فشرده سازی و حذف سوابق غیر ضروری را امتحان کردید. با استفاده از این مثالها ، می توانید از مزایای کلیدی TimescaleDB نسبت به سیستم های معمول مدیریت پایگاه داده رابطه ای برای ذخیره داده های سری زمانی استفاده کنید ، از جمله:
• نرخ پذیرش بیشتر داده ها
• عملکرد سریعتر درخواست ها
• ویژگی های زمان گرا

 

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

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04

نحوه نصب و استفاده از TimescaleDB در CentOS 7

نحوه تایید صحت رمز عبور با Apache در اوبونتو 18.04 (شروع سریع)

نحوه راه اندازی Eclipse Theia Cloud IDE Platform در Debian 10

نحوه نصب و استفاده ازRadamsa برای فوز کردن برنامه ها (تکنیک تست خودکار نرم افزار) و خدمات شبکه روی Ubuntu 18.04

نحوه نصب Docker Compose در Debian 10

چگونه می توان با کتابخانه (library) درخواست ها در پایتون شروع به کار کرد

نحوه اجرای صفحه گذاری در MySQL با PHP روی اوبونتو 18.04

نحوه تنظیم پلتفرم Eclipse Theia Cloud IDE در CentOS 7

بسته بندی برنامه Laravel 6 برای توسعه با Docker Compose در اوبونتو 18.04

نحوه بهینه سازی درخواست های MySQL با ذخیره سازی ProxySQL در اوبونتو 16.04

نحوه استفاده از Ansible برای نصب و راه اندازی وردپرس با LAMP در اوبونتو 18.04

چگونه می توان پلتفرم كد سرور Cloud IDE را در اوبونتو 18.04 تنظیم كرد (شروع سریع)

چگونه می توان از رول های ansible برای انتزاع محیط زیرساختی خود استفاده کرد

نحوه پیکربندی یک خوشه Galera با MySQL در سرورهای اوبونتو 18.04

نحوه تهیه نسخه پشتیبان و بازیابی یک خوشه Kubernetes در vpsgol با استفاده از Velero

نحوه نصب و استفاده از PostgreSQL در CentOS 7

چگونه می توان پلتفرم Eclipse Theia Cloud IDE را روی اوبونتو 18.4 تنظیم کرد

نحوه استقرار و مدیریت DNS با استفاده از DNSControl در Debian 10

چگونه می توان پلتفرم Cloud IDE کد سرور را روی CentOS 7 تنظیم كرد

 

کلمات کلیدی خرید سرور

خرید vps – خرید سرور مجازی – خرید سرور – سرور هلند – فروش vps – سرور مجازی آمریکا – خریدvps – سرور مجازی هلند – فروش سرور مجازی – سرور آمریکا – vps – سرور مجازی انگلیس – سرور مجازی آلمان – سرور مجازی کانادا – خرید vps آمریکا – خرید وی پی اس – سرور – خرید سرور مجازی هلند – vps خرید – سرور مجازی فرانسه – سرور مجازی هلند – خرید vps آمریکا 

برچسب‌ها:,