
مقدمه بسیاری از اپلیکیشنها، مانند سیستمهای مانیتورینگ و جمعآوری دادهها، اطلاعات را برای تحلیلهای بعدی ذخیره میکنند. این تحلیلها اغلب نحوه تغییر یک داده یا سیستم را در طول زمان بررسی میکنند. در این موارد، دادهها به صورت سریهای زمانی (Time Series) نمایش داده میشوند؛ به این معنا که هر نقطه داده با یک تایماستمپ (Timestamp) همراه است. یک نمونه از این دادهها به شکل زیر است:
اهمیت دادههای سری زمانی اخیراً به لطف استقرار جدید اینترنت اشیا (IoT) و اینترنت صنعتی اشیا (IIoT) افزایش یافته است. دستگاههای بیشتری وجود دارند که اطلاعات سری زمانی مختلفی را جمعآوری میکنند: ردیابهای تناسب اندام، ساعتهای هوشمند، ایستگاههای هواشناسی خانگی و سنسورهای مختلف. این دستگاهها اطلاعات زیادی را جمعآوری میکنند و تمام این دادهها باید در جایی ذخیره شوند.
معمولاً از پایگاههای داده رابطهای (Relational) کلاسیک برای ذخیره دادهها استفاده میشود، اما این پایگاههای داده همیشه برای حجم عظیم دادههای سری زمانی مناسب نیستند. هنگامی که نیاز به پردازش مقدار زیادی داده سری زمانی دارید، پایگاههای داده رابطهای ممکن است بسیار کُند باشند. به همین دلیل، پایگاههای دادهای که بهطور ویژه بهینهسازی شدهاند (که اغلب NoSQL نامیده میشوند) برای جلوگیری از مشکلات دیتابیسهای رابطهای ایجاد شدهاند.
TimescaleDB یک پایگاه داده متنباز است که برای ذخیره دادههای سری زمانی بهینهسازی شده است. این دیتابیس به صورت یک افزونه (Extension) برای PostgreSQL پیادهسازی شده و سهولت استفاده از پایگاههای داده رابطهای را با سرعت پایگاههای داده NoSQL ترکیب میکند. در نتیجه، به شما اجازه میدهد از PostgreSQL هم برای ذخیره دادههای تجاری و هم برای ذخیره دادههای سری زمانی در یک مکان استفاده کنید.
با دنبال کردن این آموزش، شما TimescaleDB را روی اوبونتو 24.04 نصب و پیکربندی کرده و یاد میگیرید چگونه با آن کار کنید. شما با ایجاد دیتابیسهای سری زمانی و اجرای کوئریهای ساده آشنا میشوید. در نهایت، نحوه حذف دادههای غیرضروری را خواهید دید.
پیشنیازها برای دنبال کردن این آموزش به موارد زیر نیاز دارید:
- یک سرور اوبونتو 24.04 که طبق راهنمای راهاندازی اولیه سرور اوبونتو در پارمین کلود پیکربندی شده باشد (شامل یک کاربر غیر روت با دسترسی sudo و فایروال).
- دیتابیس PostgreSQL روی سرور شما نصب باشد. (در اوبونتو 24.04، نسخه پیشفرض PostgreSQL نسخه 16 است).
مرحله ۱ — نصب TimescaleDB
TimescaleDB در مخازن پیشفرض اوبونتو موجود نیست، بنابراین در این مرحله آن را از مخزن PPA (Personal Package Archive) اختصاصی Timescale نصب خواهید کرد.
ابتدا مخزن APT تایماسکیل را اضافه کنید:
با فشردن کلید ENTER این اقدام را تایید کنید.
سپس، کش APT خود را برای بهروزرسانی لیست پکیجها بازخوانی کنید:
اکنون میتوانید نصب را ادامه دهید. از آنجایی که در اوبونتو 24.04 از PostgreSQL 16 استفاده میکنیم، دستور زیر را برای نصب TimescaleDB سازگار با این نسخه اجرا کنید:
نکته: پشتیبانی از نسخههای قدیمیتر PostgreSQL (مانند 9.6.3+ یا 10.9+) منسوخ شده و در نسخههای آینده حذف خواهد شد.
TimescaleDB اکنون نصب شده و آماده استفاده است. در مرحله بعد، آن را فعال کرده و برخی تنظیمات مربوط به آن را در فایل پیکربندی PostgreSQL تغییر میدهید تا دیتابیس بهینه شود.
مرحله ۲ — پیکربندی TimescaleDB
ماژول TimescaleDB با تنظیمات پیشفرض PostgreSQL بهخوبی کار میکند، اما برای بهبود عملکرد و استفاده بهتر از منابع پردازنده، حافظه و دیسک، توسعهدهندگان TimescaleDB پیشنهاد میکنند برخی پارامترها را بهصورت اختصاصی تنظیم کنید. این کار را میتوان بهطور خودکار با ابزار timescaledb-tune یا با ویرایش دستی فایل postgresql.conf انجام داد.
در این آموزش از ابزار timescaledb-tune استفاده میکنید. این ابزار فایل postgresql.conf را میخواند و بهصورت تعاملی پیشنهاد اعمال تغییرات را میدهد.
برای شروع جادوگر پیکربندی، دستور زیر را اجرا کنید:
ابتدا از شما خواسته میشود مسیر فایل پیکربندی PostgreSQL را تایید کنید:
ابزار بهطور خودکار مسیر فایل پیکربندی (مربوط به نسخه 16) را تشخیص میدهد، بنابراین با وارد کردن y آن را تایید کنید:
سپس، از شما خواسته میشود متغیر shared_preload_libraries را برای پیشبارگذاری ماژول TimescaleDB هنگام старт سرور PostgreSQL تغییر دهید:
این متغیر لیستی از ماژولها را میپذیرد که PostgreSQL باید قبل از راهاندازی سرور دیتابیس آنها را بارگذاری کند. با تایید این بخش، timescaledb به این لیست اضافه میشود. با تایپ y و فشردن ENTER این ماژول را فعال کنید:
بر اساس مشخصات سرور شما، پیشنهادهایی برای بهینهسازی تنظیمات ارائه میشود. برای شروع فرآیند تنظیم (Tuning)، y را بزنید:
ابزار timescaledb-tune بهطور خودکار حافظه در دسترس سرور شما را تشخیص داده و مقادیر پیشنهادی برای تنظیماتی مانند shared_buffers و work_mem را محاسبه میکند. به عنوان مثال، shared_buffers حافظه اختصاص یافته برای کش کردن دادهها را تعیین میکند که بهطور پیشفرض پایین است و ابزار آن را برای استفاده بهتر از منابع سرور شما افزایش میدهد.
برای تایید مقادیر پیشنهادی، y را وارد کنید:
در مراحل بعدی، پیشنهادهایی برای تنظیمات موازیسازی (Parallelism)، لاگ پیشنویس (WAL) و تنظیمات متفرقه ارائه میشود. در هر مرحله کافیست y و سپس ENTER را بزنید تا تنظیمات بهینه روی سرور شما اعمال شود:
در نتیجه، شما یک فایل پیکربندی آماده و بهینهشده در مسیر /etc/postgresql/16/main/postgresql.conf خواهید داشت.
برای اعمال تغییرات پیکربندی، باید سرویس PostgreSQL را ریاستارت کنید:
اکنون دیتابیس با پارامترهای بهینه اجرا میشود و آماده کار با دادههای سری زمانی است.
مرحله ۳ — ایجاد یک دیتابیس جدید و Hypertable
با بهینهسازی TimescaleDB، شما آماده کار با دادههای سری زمانی هستید. TimescaleDB بهعنوان افزونهای برای PostgreSQL پیادهسازی شده است، بنابراین عملیات با دادههای سری زمانی تفاوت زیادی با عملیات دادههای رابطهای ندارد.
ابتدا وارد حساب کاربری PostgreSQL شوید:
یک دیتابیس جدید به نام timeseries ایجاد کرده و به آن متصل شوید:
سپس، افزونه TimescaleDB را برای این دیتابیس فعال کنید:
نقطه اصلی تعامل با دادههای سری زمانی در TimescaleDB، Hypertable ها هستند. یک Hypertable یک انتزاع از چندین جدول مجزاست که دادهها را در قالب قطعات (Chunks) نگه میدارند.
برای ایجاد یک Hypertable، ابتدا یک جدول معمولی SQL میسازید و سپس آن را از طریق تابع create_hypertable به Hypertable تبدیل میکنید. در این آموزش، جدولی میسازیم که دما و رطوبت دستگاههای مختلف را در طول زمان ثبت میکند:
این دستور جدولی با نام conditions و چهار ستون ایجاد میکند. ستون اول زمان را با منطقه زمانی ذخیره میکند و نمیتواند خالی باشد. اکنون از ستون time برای تبدیل جدول به یک Hypertable که بر اساس زمان پارتیشنبندی شده استفاده میکنیم:
خروجی زیر را دریافت خواهید کرد:
مرحله ۴ — درج (Write) و حذف (Delete) دادهها
در این مرحله، دادههایی را با استفاده از دستورات استاندارد SQL درج میکنید. دادهها را میتوان با دستور استاندارد INSERT در Hypertable قرار داد. دادههای نمونه زیر را برای دستگاه فرضی weather-pro-000000 درج کنید:
همچنین میتوانید چندین ردیف داده را بهطور همزمان وارد کنید:
اگر میخواهید دادهای را حذف کنید، از دستور استاندارد DELETE استفاده کنید. دستور زیر دادههایی با دمای بالاتر از ۸۰ یا رطوبت بالاتر از ۵۰ را حذف میکند:
پس از عملیات حذف، توصیه میشود از دستور VACUUM استفاده کنید تا فضای اشغالشده توسط دادههای حذف شده بازگردانده شود:
برای درج حجم عظیمی از دادهها (مثلاً از یک فایل CSV)، از پایگاه داده خارج شوید (\q) و سپس دیتاست نمونه را دانلود و استخراج کنید:
سپس دادهها را به دیتابیس خود وارد (Import) کنید:
پس از تکمیل ورود اطلاعات، خروجی زیر را مشاهده خواهید کرد:
مرحله ۵ — کوئری گرفتن (Querying) از دادهها
اکنون که جدول شما حاوی داده است، میتوانید کوئریهای مختلفی برای تحلیل آن اجرا کنید. مجدداً وارد دیتابیس شوید:
برای نمایش ۱۰ رکورد آخر از Hypertable، دستور زیر را اجرا کنید:
برای مشاهده جدیدترین رکوردها، دادهها را بهصورت نزولی بر اساس زمان مرتب کنید:
علاوه بر دستورات استاندارد SQL، TimescaleDB توابع خاصی برای تحلیل دادههای سری زمانی ارائه میدهد. به عنوان مثال، برای یافتن میانه (Median) مقادیر دما از تابع percentile_cont استفاده کنید:
برای نمایش آخرین مقادیر ثبت شده هر سنسور، از تابع last استفاده کنید:
مثال زیر پیچیدهتر است. این کوئری میانگین، حداقل و حداکثر دمای ساعتی را برای یک سنسور خاص در ۲۴ ساعت گذشته نشان میدهد:
در اینجا از تابع قدرتمند time_bucket استفاده شده است که نسخه پیشرفتهتر تابع date_trunc در PostgreSQL محسوب میشود.
مرحله ۶ — پیکربندی فشردهسازی و حذف دادهها
با انباشت دادهها، فضای بیشتری روی هارد دیسک شما اشغال میشود. برای ذخیره فضا، TimescaleDB قابلیت فشردهسازی دادهها را ارائه میدهد.
ابتدا فشردهسازی را برای Hypertable خود فعال کنید:
همچنین میتوانید TimescaleDB را تنظیم کنید تا دادهها را پس از یک دوره زمانی مشخص بهطور خودکار فشرده کند:
اگر نیازی به نگهداری طولانیمدت دادهها ندارید، میتوانید دادههای قدیمی را حذف کنید. برای این کار تابع خاصی به نام drop_chunks وجود دارد:
این کوئری تمام قطعات (Chunks) دارای دادههایolder از ۲۴ ساعت گذشته را از جدول conditions حذف میکند.
برای خودکارسازی حذف دادههای قدیمی، میتوانید یک وظیفه Cron ایجاد کنید. از دیتابیس خارج شوید (\q) و سپس crontab را ویرایش کنید:
خط زیر را به انتهای فایل اضافه کنید:
این وظیفه هر روز ساعت ۱:۰۰ بامداد، دادههای قدیمیتر از یک روز را بهطور خودکار حذف میکند.
نتیجهگیری شما اکنون موفق به نصب و راهاندازی TimescaleDB روی سرور اوبونتو 24.04 خود در پارمین کلود شدهاید. شما یاد گرفتید چگونه یک Hypertable ایجاد کنید، داده درج کنید، کوئری بگیرید، دادهها را فشرده کرده و رکوردهای غیرضروری را حذف کنید. با استفاده از این مثالها، میتوانید از مزایای کلیدی TimescaleDB نسبت به سیستمهای مدیریت دیتابیس رابطهای سنتی برای ذخیره دادههای سری زمانی بهرهمند شوید.
اکنون میتوانید از این دادهها برای ایجاد نمودار استفاده کنید. TimescaleDB با ابزارهای مصورسازی (Visualization) که از PostgreSQL پشتیبانی میکنند، مانند Grafana، سازگار است.
از همراهی شما با پارمین کلود سپاسگزاریم.




