پنجشنبه ۰۶ اردیبهشت ۰۳

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

۴ بازديد

مقدمه
بسياري از برنامه ها ، مانند سيستم هاي مانيتورينگ و سيستم هاي جمع آوري داده ها ، اطلاعات را براي تجزيه و تحليل بيشتر جمع مي كنند. اين تجزيه و تحليلها اغلب به نحوه تغيير يك بخش از داده يا يك سيستم در گذشت زمان نگاه مي كنند. در اين موارد ، داده ها به عنوان يك سري زمان نمايش داده مي شوند ، و هر نقطه داده همراه با يك 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 آمريكا – خر

تا كنون نظري ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در مونوبلاگ ثبت نام کرده اید می توانید ابتدا وارد شوید.