تسلط بر تقسیم جدول PostgreSQL برای پایگاه داده های مقیاس پذیر
با رشد مجموعه داده ها ، عملکرد و قابلیت مدیریت می تواند رنج ببرد. تقسیم جدول PostgreSQL راهی برای تقسیم جداول بزرگ به قطعات کوچکتر و قابل کنترل تر ارائه می دهد – بدون تغییر نحوه پرس و جو از داده ها. در این راهنما ، ما به نحوه طراحی و پیاده سازی استراتژی های پارتیشن بندی کارآمد در PostgreSQL شیرجه خواهیم زد.
1. تقسیم جدول چیست؟
پارتیشن بندی اجازه می دهد تا یک جدول بزرگ به جداول کوچکتر و از نظر جسمی جداگانه به نام پارتیشن ها تقسیم شود. این پارتیشن ها مانند یک جدول واحد برای کاربر رفتار می کنند اما مزایای عملکرد عمده ای را برای مجموعه داده های بزرگ ارائه می دهند.
2. انواع پارتیشن بندی در postgresql
- پارتیشن بندی دامنه: بر اساس طیف مداوم مقادیر (به عنوان مثال ، تاریخ).
- لیست پارتیشن بندی: بر اساس لیستی از ارزشهای گسسته (به عنوان مثال ، کشورها یا مناطق).
- پارتیشن بندی هش: ردیف های شبه تصادفی را بر اساس یک عملکرد هش توزیع می کند.
3. ایجاد یک جدول تقسیم شده
بیایید یک جدول ساده با دامنه ای برای یک جدول سیاهههای مربوط به ماه تقسیم شده توسط ماه ایجاد کنیم:
CREATE TABLE logs (
id SERIAL PRIMARY KEY,
log_date DATE NOT NULL,
message TEXT
) PARTITION BY RANGE (log_date);
CREATE TABLE logs_2024_01 PARTITION OF logs
FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');
CREATE TABLE logs_2024_02 PARTITION OF logs
FOR VALUES FROM ('2024-02-01') TO ('2024-03-01');
4. خودکار سازی ایجاد پارتیشن
شما می توانید این فرآیند را با استفاده از روشها یا ابزارهای ذخیره شده مانند خودکار انجام دهید pg_partman
برای نگهداری طولانی مدت آسان تر.
5. پرس و جو جداول تقسیم شده
نمایش داده شدگان با میزهای معمولی یکسان به نظر می رسند:
SELECT * FROM logs WHERE log_date >= '2024-01-15';
PostgreSQL به طور خودکار پارتیشن هایی را که با فیلتر پرس و جو مطابقت ندارند ، هرس می کند – عالی برای عملکرد.
6. مزایای عملکرد
- هرس پارتیشن: PostgreSQL از اسکن پارتیشن های بی ربط جلوگیری می کند.
- شاخص های سریعتر: شاخص های پارتیشن های کوچکتر سریعتر اسکن می شوند.
-
نگهداری داده ها: رها کردن داده های قدیمی به آسانی می شود
DROP TABLE logs_2023_12
بشر
7. استراتژی های نمایه سازی برای پارتیشن ها
شاخص ها توسط پارتیشن ها به ارث نمی رسند. هر یک باید به طور جداگانه ایندکس شوند.
CREATE INDEX idx_logs_2024_01_date ON logs_2024_01(log_date);
برای جلوگیری از شگفتی در برنامه های پرس و جو ، نمایه سازی را در بخش های پارتیشن حفظ کنید.
8. Caveats و Gotchas
- کلیدهای خارجی پشتیبانی نمی شوند در جداول تقسیم شده (از PostgreSQL 15).
- اگر تعداد پارتیشن ها خیلی بزرگ شود ، ممکن است درج عملکرد کاهش یابد.
- همیشه منطق تقسیم بندی خود را با مجموعه داده های واقع گرایانه و الگوهای پرس و جو تست کنید.
9. نظارت و نگهداری
-- See what partitions exist
SELECT tablename FROM pg_tables WHERE tablename LIKE 'logs_%';
-- See query plan to verify partition pruning
EXPLAIN SELECT * FROM logs WHERE log_date="2024-02-10";
پایان
پارتیشن بندی جدول یک تکنیک قدرتمند در PostgreSQL برای مدیریت مجموعه داده های بزرگ با ظرافت و سرعت است. هنگامی که به درستی طراحی و نگهداری می شود ، می تواند عملکرد پرس و جو و مقیاس پذیری طولانی مدت را به شدت بهبود بخشد.
اگر این پست به شما کمک کرد ، از من حمایت کنید: buymeacoffee.com/hexshift