PostgreSQL 11: تکامل پارتیشن بندی از Postgres 9.6 به Postgres 11

جمعه خوبی برای همه داشته باشید! زمان کمتر و کمتری تا شروع دوره باقی می ماند "DBMS رابطه ای"، بنابراین امروز ترجمه یک مطلب مفید دیگر را در مورد این موضوع به اشتراک می گذاریم.

در مرحله توسعه PostgreSQL 11 کارهای قابل توجهی برای بهبود پارتیشن بندی جدول انجام شده است. جداول پارتیشن بندی - این تابعی است که برای مدت طولانی در PostgreSQL وجود داشت، اما به اصطلاح، اساساً تا نسخه 10 وجود نداشت که در آن به یک تابع بسیار مفید تبدیل شد. قبلاً بیان کردیم که وراثت جدول پیاده سازی ما از پارتیشن بندی است و این درست است. فقط این روش شما را مجبور کرد که بیشتر کارها را به صورت دستی انجام دهید. برای مثال، اگر می‌خواهید تاپل‌ها در طول INSERT‌ها در بخش‌ها درج شوند، باید تریگرها را برای انجام این کار برای شما پیکربندی کنید. پارتیشن بندی از طریق وراثت بسیار کند بود و توسعه عملکردهای اضافی در بالای آن دشوار بود.

در PostgreSQL 10، ما شاهد تولد "پارتیشن بندی اعلامی" بودیم، یک ویژگی طراحی شده برای حل بسیاری از مشکلات غیرقابل حل با استفاده از روش وراثت قدیمی. این منجر به ابزار بسیار قدرتمندتری شد که به ما اجازه داد داده ها را به صورت افقی تقسیم کنیم!

مقایسه ویژگی ها

PostgreSQL 11 مجموعه قابل توجهی از ویژگی های جدید را معرفی می کند که به بهبود عملکرد کمک می کند و جداول پارتیشن بندی شده را برای برنامه ها شفاف تر می کند.

PostgreSQL 11: تکامل پارتیشن بندی از Postgres 9.6 به Postgres 11
PostgreSQL 11: تکامل پارتیشن بندی از Postgres 9.6 به Postgres 11
PostgreSQL 11: تکامل پارتیشن بندی از Postgres 9.6 به Postgres 11
1. استفاده از استثناهای محدود کننده
2. فقط گره ها را اضافه می کند
3. فقط برای یک جدول پارتیشن بندی شده که به جدول غیرپارتیشن بندی شده ارجاع می دهد
4. ایندکس ها باید شامل تمام ستون های کلیدی پارتیشن باشند
5. محدودیت های بخش در هر دو طرف باید مطابقت داشته باشد

کارایی

اینجا هم خبرهای خوبی داریم! روش جدید اضافه شد حذف بخش ها. این الگوریتم جدید می‌تواند بخش‌های مناسب را با مشاهده شرایط پرس و جو تعیین کند WHERE. الگوریتم قبلی، به نوبه خود، هر بخش را بررسی کرد تا تعیین کند که آیا می تواند شرایط را برآورده کند یا خیر WHERE. این منجر به افزایش اضافی در زمان برنامه ریزی با افزایش تعداد بخش ها شد.

در 9.6، با پارتیشن بندی از طریق وراثت، مسیریابی تاپل ها به پارتیشن ها معمولاً با نوشتن یک تابع ماشه انجام می شد که حاوی یک سری دستورات IF برای درج تاپل در پارتیشن صحیح بود. اجرای این توابع ممکن است بسیار کند باشد. با اضافه شدن پارتیشن بندی اعلامی در نسخه 10، این کار بسیار سریعتر انجام می شود.

با استفاده از یک جدول پارتیشن بندی شده با 100 پارتیشن، می توانیم عملکرد بارگذاری 10 میلیون ردیف را در جدولی با 1 ستون BIGINT و 5 ستون INT ارزیابی کنیم.

PostgreSQL 11: تکامل پارتیشن بندی از Postgres 9.6 به Postgres 11

عملکرد جستجوی این جدول برای یافتن یک رکورد نمایه شده و اجرای DML برای دستکاری یک رکورد (فقط با استفاده از 1 پردازنده):

PostgreSQL 11: تکامل پارتیشن بندی از Postgres 9.6 به Postgres 11

در اینجا می بینیم که عملکرد هر عملیات از زمان PG 9.6 به طور قابل توجهی افزایش یافته است. درخواست ها SELECT بسیار بهتر به نظر می رسند، به خصوص آنهایی که می توانند چندین پارتیشن را در طول برنامه ریزی پرس و جو حذف کنند. این بدان معناست که برنامه‌ریز می‌تواند بسیاری از کارهایی را که قبلاً باید انجام می‌داد، رها کند. به عنوان مثال، مسیرها دیگر برای بخش های غیر ضروری ساخته نمی شوند.

نتیجه

پارتیشن بندی جدول در حال تبدیل شدن به یک ویژگی بسیار قدرتمند در PostgreSQL است. این به شما امکان می‌دهد تا داده‌ها را به‌سرعت به‌صورت آنلاین نمایش دهید و آن‌ها را آفلاین کنید، بدون اینکه منتظر بمانید تا عملیات DML آهسته و عظیم تکمیل شود.. این همچنین به این معنی است که داده‌های مرتبط را می‌توان با هم ذخیره کرد، به این معنی که داده‌های مورد نیاز می‌توانند بسیار کارآمدتر دسترسی داشته باشند. بهبودهای انجام شده در این نسخه بدون توسعه دهندگان، بازبینان و متولیان که به طور خستگی ناپذیر روی همه این ویژگی ها کار می کردند امکان پذیر نبود.
با تشکر از همه آنها! PostgreSQL 11 فوق العاده به نظر می رسد!

در اینجا یک مقاله کوتاه اما بسیار جالب است. نظرات خود را به اشتراک بگذارید و فراموش نکنید که در آن ثبت نام کنید روز باز، که در آن برنامه دوره به تفصیل بیان خواهد شد.

منبع: www.habr.com

اضافه کردن نظر