نحوه نصب و استفاده از TimescaleDB در Ubuntu 20.04
بسياري از برنامه ها ، مانند سيستم هاي مانيتورينگ و سيستم هاي جمع آوري داده، اطلاعات را براي تحليل بيشتر جمع مي كنند. اين تجزيه و تحليل ها اغلب به نحوه تغيير يك بخش از داده يا يك سيستم با زمان نگاه مي كنند. در اين موارد ، داده ها به عنوان يك سري زمان نمايش داده مي شوند ، و هر نقطه داده همراه با يك timestamp همراه است. نمونه اي از آن ها به اين صورت است:
2020-06-01 09:00:00 server.cpu.1 0.9
2020-06-01 09:00:00 server.cpu.15 0.8
2020-06-01 09:01:00 server.cpu.1 0.9
2020-06-01 09:01:00 server.cpu.15 0.8
…
اخيراً به لطف اينترنت اشياء (IoT) و اينترنت صنعتي اشياء، ارتباط داده هاي مجموعه زماني افزايش يافته است. اكنون تعداد بيشتر و بيشتري دستگاه وجود دارد كه اطلاعات مجموعه هاي مختلفي را جمع آوري مي كنند: از جمله ثبت كننده هاي عملكرد ورزشي ، ساعت هاي هوشمند ، ايستگاه هاي خانگي آب و هوا و سنسورهاي مختلف. اين دستگاه ها اطلاعات زيادي را جمع مي كنند و تمام اين داده ها بايد در جايي ذخيره شوند.
بانك هاي اطلاعاتي كلاسيك رابطه اي اغلب براي ذخيره داده ها استفاده مي شود ، اما وقتي صحبت از حجم عظيم داده هاي سري زماني است ، ديگر مناسب نخواهند بود. هنگامي كه نياز به پردازش ميزان زيادي داده هاي مجموعه زماني داريد ، ديتابيس رابطه اي مي تواند خيلي كند باشد. به همين دليل ، بانكهاي اطلاعاتي بهينه سازي شده اي به نام پايگاه داده هاي NoSQL ايجاد شده اند تا از مشكلات پايگاه هاي داده رابطه اي جلوگيري شود.
TimescaleDB يك پايگاه داده منبع باز است كه براي ذخيره داده هاي سري زماني بهينه شده است. اين برنامه به عنوان پسوند PostgreSQL پياده سازي شده است و سهولت استفاده از پايگاه هاي داده رابطه اي و سرعت پايگاه داده هاي NoSQL را تركيب مي كند. در نتيجه ، به شما امكان مي دهد تا از PostgreSQL براي ذخيره داده هاي كاري و داده هاي سري هاي زماني به صورت همزمان استفاده كنيد.
با دنبال كردن اين آموزش ، TimescaleDB را روي Ubuntu 20.04 تنظيم ميكنيد ، آن را پيكربندي كرده و ياد مي گيريد كه چگونه با آن كار كنيد. با ايجاد پايگاه داده هاي سري زماني و ايجاد درخواست هاي ساده اين كار را انجام خواهيد داد. در آخر ، خواهيد ديد كه چگونه داده هاي غير ضروري را حذف كنيد.
پيش نيازها
براي دنبال كردن اين آموزش ، به موارد زير نياز داريد:
يك سرور مجازي Ubuntu 20.04 كه با دنبال كردن راهنماي اوليه راه اندازي سرور مجازي با Ubuntu 20.04 نصب شده باشد، و شامل يك كاربر غير ريشه با امتيازات sudo و فايروال تنظيم شده باشد
PostgreSQL كه بر روي سرور مجازي شما نصب شده باشد. براي نصب و پيكربندي آن ، راهنماي نصب و استفاده از PostgreSQL در Ubuntu 20.04 را دنبال كنيد.
مرحله 1 – نصب TimescaleDB
TimescaleDB در منابع پكيجي پيش فرض Ubuntu در دسترس نيست ، بنابراين در اين مرحله شما آن را از منبع شخص ثالث TimescaleDB نصب خواهيد كرد.
ابتدا يك فايل منبع جديد ايجاد كنيد:
$ sudo add-apt-repository ppa:timescale/timescaledb-ppa
با زدن enter اين عمل را تاييد كنيد:
$ sudo apt update
اكنون مي توانيد مراحل نصب را ادامه دهيد. در اين آموزش از PostgreSQL نسخه 12 استفاده شده است. اگر از نسخه ديگري از PostgreSQL استفاده مي كنيد (به عنوان مثال 11 يا 10) ، مقدار مورد نظر را در دستور زير جايگزين كرده و آن را اجرا كنيد:
$ sudo apt install timescaledb-postgresql-12
توجه: در نسخه بعدي پشتيباني نسخه هاي 9.6.3+ و 10.9+ حذف خواهد شد.
TimescaleDB اكنون نصب شده و آماده استفاده است. در مرحله بعد ، آن را روشن كرده و برخي از تنظيمات مرتبط با آن را در فايل پيكربندي PostgreSQL براي بهينه سازي بانك اطلاعات تنظيم خواهيد كرد.
مرحله 2 – پيكربندي TimescaleDB
ماژول TimescaleDB با تنظيمات پيش فرض پيكربندي PostgreSQL خوب كار مي كند ، اما براي بهبود عملكرد و استفاده بهتر از منابع پردازنده ، حافظه و منابع ديسك ، توسعه دهندگان TimescaleDB پيكربندي برخي پارامترهاي فردي را پيشنهاد مي كنند. اين كار مي تواند به صورت خودكار با ابزار timescaledb-tune يا با ويرايش دستي فايل postgresql.conf سرور مجازي شما انجام شود.
در اين آموزش از ابزار timescaledb-tune استفاده خواهيد كرد. اين ابزار، فايل postgresql.conf را مي خواند و به صورت تعاملي پيشنهاد ايجاد تغييرات را مي دهد.
براي شروع wizard پيكربندي دستور زير را اجرا كنيد:
$ sudo timescaledb-tune
ابتدا از شما خواسته مي شود مسير فايل پيكربندي PostgreSQL را تأييد كنيد:
Output
Using postgresql.conf at this path:
/etc/postgresql/12/main/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.backup202005300523
در مرحله بعد از شما خواسته مي شود متغير shared_preload_libraries را تغيير دهيد تا قبل از شروع سرور مجازي PostgreSQL ، ماژول TimescaleDB را دانلود كنيد:
Output
shared_preload_libraries needs to be updated
Current:
#shared_preload_libraries = ”
Recommended:
shared_preload_libraries = ‘timescaledb’
Is this okay? [(y)es/(n)o]:
shared_preload_libraries ليستي از ماژول هاي جدا شده با كاما را به عنوان يك مقدار ميپذيرد و مشخص ميكند كه PostgreSQL بايد قبل از شروع سرور مجازي پايگاه داده كدام ماژول ها را لود كند. با ايجاد اين تغيير ، ماژول timescaledb به آن ليست اضافه مي شود.
سپس ، ماژول TimescaleDB را با تايپ y در اعلان بعدي و فشار دادن ENTER فعال كنيد:
Output
…
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.79 GB of available memory and 4 CPUs for PostgreSQL 12
Memory settings recommendations
Current:
shared_buffers = 128MB
#effective_cache_size = 4GB
#maintenance_work_mem = 64MB
#work_mem = 4MB
Recommended:
shared_buffers = 1990MB
effective_cache_size = 5971MB
maintenance_work_mem = 1019114kB
work_mem = 5095kB
Is this okay? [(y)es/(s)kip/(q)uit]:
timescaledb-tune به طور خودكار حافظه موجود سرور مجازي را تشخيص داده و مقادير توصيه شده را براي تنظيمات shared_buffers ، effective_cache_size ، maintenance_work_mem و work_mem محاسبه مي كند.
براي مثال shared_buffers مقدار حافظه اختصاص داده شده براي ذخيره داده ها را تعيين مي كند. به طور پيش فرض ، اين تنظيمات براي طيف وسيع تري از پلتفرم ها نسبتاً كم است ، بنابراين timescaledb-tune ايجاد فضاي بيشتر براي ذخيره اطلاعات مانند جستارهاي مكرر ، افزايش مقدار را پيشنهاد داده است كه استفاده بهتر از منابع را منجر ميشود. متغير 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
Recommended:
wal_buffers = 16MB
min_wal_size = 512MB
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_غير مجاز مي باشدt = 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_غير مجاز مي باشدt = 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 ها مي توانند بسياري از درخواست هاي همزمان را پردازش كنند ، بنابراين بهترين مقدار براي effective_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: /etc/postgresql/12/main/postgresql.conf
در نتيجه ، يك فايل پيكربندي آماده را در /var/lib/pgsql/12/data/postgresql.conf دريافت خواهيد كرد.
توجه: اگر نصب را از ابتدا انجام مي دهيد ، مي توانيد فرمان اوليه را نيز با فلگ هاي –quiet و –yes اجرا كنيد ، كه به طور خودكار تمام توصيه ها را اعمال مي كند و تغييراتي در فايل پيكربندي postgresql.conf ايجاد مي كند:
$ sudo timescaledb-tune –quiet –yes
براي اينكه تغييرات پيكربندي عملي شوند ، بايد سرويس PostgreSQL را مجدداً راه اندازي كنيد:
$ sudo systemctl restart postgresql.service
اكنون ديتابيس با پارامترهاي بهينه در حال اجرا است و آماده همكاري با داده هاي سري زماني ميباشد. در مراحل بعدي ، كار با اين داده ها را امتحان ميكنيد: ايجاد بانك اطلاعاتي جديد و هايپرجداول و انجام عمليات.
مرحله 3 – ايجاد يك بانك اطلاعاتي جديد و Hypertable
با بهينه سازي تنظيم TimescaleDB ، آماده كار با داده هاي سري زماني هستيد. TimescaleDB به عنوان پسوند PostgreSQL پياده سازي مي شود ، بنابراين عمليات با داده هاي سري زماني تفاوت چنداني با عمليات داده هاي رابطه اي ندارند. در عين حال ، بانك اطلاعاتي به شما امكان مي دهد تا در آينده داده هاي سري زماني و جداول رابطه اي را آزادانه تركيب كنيد.
ابتدا يك پايگاه داده جديد ايجاد مي كنيد و پسوند TimescaleDB را براي آن فعال مي كنيد. به پايگاه داده PostgreSQL وارد شويد:
$ sudo -u postgres psql
اكنون يك ديتابيس جديد ايجاد كرده و به آن متصل شويد. اين آموزش پايگاه داده را timeseries نامگذاري مي كند:
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.7.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 آن را به 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
——————————-+——————–+————-+———-
2020-05-30 05:31:27.842009+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
سپس مجموعه داده را دانلود كرده و آن را اكستركت كنيد:
$ wget https://timescaledata.blob.core.windows.net/datasets/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.49999999999998
(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 * FROM timescaledb_information.compressed_chunk_stats;
سپس ليستي از chunk ها را با وضعيت آنها مشاهده خواهيد كرد: وضعيت فشرده سازي و ميزان فضاي داده هاي فشرده نشده و فشرده شده در بايت ها.
اگر به مدت طولاني نيازي به ذخيره داده نداريد ، مي توانيد داده هاي قديمي را حذف كنيد تا حتي فضاي بيشتري آزاد شود. براي اين كار يك تابع ويژه 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 خود را با دستور زير ويرايش كنيد ، كه بايد از پوسته اجرا شود:
$ sudo crontab -e
اكنون خط زير را به انتهاي فايل اضافه كنيد:
crontab
…
0 1 * * * /usr/bin/psql -h localhost -p 5432 -U postgres -d postgres -c “SELECT drop_chunks(interva
اين كار داده هاي منسوخ را كه قديمي تر از يك روز هستند را ساعت 1 صبح هر روز حذف مي كند.
نتيجه
اكنون TimescaleDB را روي سرور مجازي Ubuntu 20.04 خود تنظيم كرده ايد. همچنين ايجاد Hypertables ، قرار دادن داده ها در آن ، جستجوي داده ها ، فشرده سازي و حذف سوابق غير ضروري را امتحان كرديد. با استفاده از اين مثالها ، مي توانيد از مزاياي كليدي TimescaleDB نسبت به سيستم هاي معمول مديريت پايگاه داده رابطه اي براي ذخيره داده هاي سري زماني استفاده كنيد ، از جمله:
• نرخ پذيرش بيشتر داده ها
• عملكرد سريعتر درخواست ها
• ويژگي هاي زمان گرا
اكنون كه مي دانيد چگونه داده هاي سري زماني را ذخيره كنيد ، مي توانيد از داده ها براي ايجاد نمودار استفاده كنيد. TimescaleDB با ابزارهاي تجسم مناسب براي PostgreSQL مانند Grafana سازگار است. براي كسب اطلاعات بيشتر در مورد اين ابزار محبوب تجسم سازي، مي توانيد از آموزش نحوه نصب و ايمن كردن Grafana در اوبونتو 20.04 استفاده كنيد. اگر مايل به كسب اطلاعات بيشتر در مورد بانكهاي اطلاعاتي هستيد ، به صفحه مبحث بانك اطلاعات ما نگاهي بيندازيد.
از اين لينك ها زير مي توانيد آمورش هاي بيشتري براي لينوكس پيدا كنيد :
دسترسي از راه دور به برنامه GUI با Docker در اوبونتو 18.04
راه اندازي سايت توسعه Jekyll در اوبونتو 20.04
نحوه راه اندازي سايت توسعه Jekyll در اوبونتو 18.04
نحوه نصب و استفاده از Docker Compose در اوبونتو 20.04
نحوه اجراي چند نسخه PHP بر روي يك سرور با استفاده از Apache و PHP-FPM در CentOS 8
نحوه نصب و استفاده از TimescaleDB در Ubuntu 20.04
نحوه نصب و راه اندازي Laravel با Docker Compose در اوبونتو 20.04
خريد vps – خريد سرور مجازي – خريد سرور – سرور هلند – فروش vps – سرور مجازي آمريكا – خريدvps – سرور مجازي هلند – فروش سرور مجازي – سرور آمريكا – vps – سرور مجازي انگليس – سرور مجازي آلمان – سرور مجازي كانادا – خريد vps آمريكا – خريد وي پي اس – سرور – خريد سرور مجازي هلند – vps خريد – سرور مجازي فرانسه – سرور مجازي هلند – خريد vps آمريكا – خريد سرور مجازي ارزان هلند – vps – خريد vps هلند – خريد سرور مجازي آمريكا – خريد vps فرانسه – تست vps – سرور مجازي تست – سرور مجازي ويندوز – ارزانترين vps – خريد وي پي اس – vps ارزان –
برچسبها:NoSQL, PostgreSQL, TimescaleDB
برچسب: ،