PostgreSQL یکی از شناخته شدهترین سیستمهای مدیریت بانک اطلاعاتی است که توسط شرکتها و استارتاپهای بسیاری مورد استفاده قرار میگیرد.
از ویژگیهای کلی پستگرس میتوان به رایگان و متنباز بودن، سازگاری بالا با زبانها و تکنولوژیهای برنامهنویسی مختلف، نرخ مقیاسپذیری بالا و… اشاره کرد.
از آنجایی که تعداد بسیار زیادی از کاربران همروش از این دیتابیس استفاده میکنند، در این مطلب تصمیم گرفتیم تا با ترفندها و روشهایی (Best Practices) آشنا شویم که با استفاده از آنها میتوانید خروجی بهتری از کار با پستگرس را تجربه کنید.
مواردی را که در ادامه خواهید خواند، از کامیونیتیها و انجمنهای برنامهنویسی مختلف جمعآوری شدهاند، در نتیجه تمام این موارد به خوبی تست شدهاند و تجربیات واقعی پشت آنها وجود دارد.
۱- استفاده از Environment Variable برای ذخیره Credential
یکی از مهمترین کارهایی که در فرایند مدیریت دیتابیس پستگرس باید انجام دهید این است که اطلاعات Credential مربوط به دیتابیس را داخل کدها ذخیره نکنید. کدها ذاتا مکان امنی برای اطلاعات حساس نیستند و نمیتوان بهعنوان یک منبع مطمئن به آنها نگاه کرد.
در نتیجه پیشنهاد میشود که اطلاعات ورود و ارتباطگیری با دیتابیس را بهصورت یک متغیر محیطی یا Environment Variable بهصورت (DATABASE_URL) ذخیره کنید. بیشتر فریمورکها نیز از این روش پشتیبانی میکنند و بهخوبی میتوانند با دیتابیس ارتباط برقرار کنند. جنگو و لاراول از جمله فریمورکهایی هستند که از این حالت پشتیبانی میکنند.
۲- تغییر Credential بهصورت مداوم
اطلاعات ورود به سیستم جزو مواردی هستند که نیاز دارند در دورههای مختلفی تغییر کرده و بهروزرسانی شوند. برای دیتابیسها نیز این موضوع استثنا نبوده و نیاز است که مراقب آنها باشید.
تعیین بازههای زمانی به عهده خودتان است، برای مثال میتوانید هر شش ماه یکبار این کار را انجام دهید. اما جدای از بازههای زمانی، براساس اتفاقاتی که در محیط کاری و ساختار پروژه میافتد نیز این کار را انجام دهید. برای مثال اگر یک توسعه دهنده شرکت را ترک میکند حتما این کار را انجام دهید.
۳- اعمال نکردن تغییرات بهصورت مستقیم
اگر قصد اعمال تغییرات و یا اضافه کردن چیز جدیدی به دیتابیس را دارید، بهصورت مستقیم روی دیتابیس در حال اجرا (Production) این کار را انجام ندهید. بهتر است همواره یک دیتابیس در محیط Development داشته باشید و تغییرات را ابتدا روی آن اعمال بکنید. اگر همه چیز بهدرستی پیش رفت و مشکلی بهوجود نیامد، میتوانید تغییرات را در محیط Production نیز اعمال کنید.
درست است که این پروسه کمی زمانبر بوده و ممکن است وقت قابل توجهی از تیمهای مختلف گرفته شود اما در نهایت یک رویکرد مطمئن و امن بوده و باعث بهوجود آمدن خطا در اپلیکیشنتان نمیشود.
۴- ایجاد Point In Time Recovery
ایجاد سازوکاری برای داشتن نقاط امن یکی از مهمترین کارهای یک مدیر دیتابیس است. منظور از نقطه امن، زمانهایی است که همه چیز بهدرستی کار میکند و خطایی در کلیت سیستم وجود ندارد. در این حالت نیاز است که از وضعیت مطلوب یک بکاپ تهیه کنید تا اگر در آینده نزدیک، مشکلی بهوجود آمد که قابل حل کردن نبود، بتوانید به همان حالت که آخرین نسخه پایدار و مطلوب از دیتابیس است، مراجعه کنید. البته برای پیادهسازی این موضوع، پستگرس با داشتن ابزار Barman میتواند به شما کمک بکند.
۵- استفاده از Connection Pooler
در محیط پروداکشن هیچوقت نباید بهصورت مستقیم به دیتابیس PostgreSQL متصل شوید. بهجای آن پیشنهاد میشود که حتما سراغ یک Connection Pooler مانند PgBouncer بروید.
از آنجایی که بهکارگیری سیستم Pooler باعث میشود تا میزان استفاده از حافظه اصلی و CPU برای ارتباطات باز کاهش پیدا کند، استفاده از PgBouncer باعث میشود تا بهرهوری و پرفورمنس اپلیکیشن بالاتر برود و با Down-Time روبهرو نشوید.
۶- استفاده از BIGINT برای کلید اصلی
یکی از اشتباهاتی که بسیاری از افراد مرتکب آن میشوند این است که بهجای «BIGINT» برای کلید اصلی (Primary Key) از «INT» استفاده میکنند. برخی از فریمورکها و سیستمهای ORM نیز همین اشتباه را انجام میدهند.
زمانی که شما از INT استفاده کنید، در آینده نه چندان دور با مشکل «کمبود فضای ذخیرهسازی» مواجه میشوید و مجبور خواهید بود که فیلد مورد نظر را به BIGINT تبدیل کنید. انجام این کار نیز معمولا چندین ساعت زمان نیاز داشته و ممکن است باعث ایجاد مشکلاتی شود.
۷- حفظ یکپارچگی دادهها
ناهمخوانی و ناسازگاری دادهها در نهایت باعث میشود تا دیتابیس شما به یک دیتابیس نامرتب تبدیل شود. از این جهت نیاز است تا همواره دادهها را بررسی کنید و از ورود اطلاعات مرتبط به جداول و فیلدهای مختلف مطمئن شوید.
نرمالسازی در دیتابیس یک رویکرد عملی و بسیار کاربردی برای حفظ یکپارچگی دادههاست که نیاز است هر چند وقت یکبار آن را انجام دهید.
یادتان باشد که هرچقدر دیتابیس پیچیدهتر و بزرگتری داشته باشید، حفظ یکپارچگی دادههایتان دشوارتر خواهد بود. در نتیجه اگر میدانید که دیتابیس شما از ساختار پیچیدهای بهره میبرد، روی حفظ یکپارچگی دادهها وقت زیادی بگذارید.
۸- خودداری از Public Schema
با ایجاد یک دیتابیس جدید، پستگرس بهصورت خودکار یک Public Schema ایجاد کرده و به کاربری با نام Public دسترسیهای لازم برای استفاده از این دیتابیس را میدهد. همچنین اگر یک جدول جدید ایجاد کنید و Schema آن را بهصورت واضح تعریف نکنید، پستگرس از Public Schema برای آن استفاده میکند.
این مسئله ریسک افزایش مشکلات امنیتی را افزایش میدهد و ممکن است در آینده به مشکل بزرگی تبدیل شود.
برای حل این مسئله همواره سعی کنید برای هر موجودیت (Entity) از Schema جداگانهای استفاده کنید و از بهکارگیری Public Schema خودداری نمایید.
۹- رهگیری تغییرات
رهگیری تغییراتی که روی دیتابیس اعمال میشود، یکی از وظایف اصلی مدیران دیتابیس بوده و باعث میشود تا امنیت سیستم افزایش پیدا کند. منظور از رهگیری تغییرات این است که شما دید کاملی نسبت به تمام تغییرات اتفاق افتاده در سیستم داشته باشید.
برای مثال اگر شخصی یک جدول را اضافه یا حذف میکند، بدانید که این فرد کیست، چه زمانی این کار را انجام داده، تغییری که اعمال کرده کدام است و… .
اغلب دیتابیسها از چنین رویکردی پشتیبانی میکنند. PostgreSQL نیز از این قاعده مستثنی نیست. برای استفاده از این قابلیت نیاز است تا از ویژگی Audit Tiggers استفاده کنید.
همچنین ابزارهای داخلی و خارجی مختلفی وجود دارند که به شما قابلیت مانیتورینگ فعالیتهای مربوط به دیتابیس را میدهند. برای آشنایی کامل با این موضوع، مبحث Monitoring در قسمت مستندات پستگرس را مطالعه کنید.
در کنار هر دو این موارد، استفاده کردن از لاگهای تولید شده توسط خود پستگرس به شما کمک میکند تا با تغییرات و حتی مشکلات آشنا شوید. در واقع لاگها یک منبع معتبر برای یافتن اتفاقاتی هستند که برای دیتابیس میافتد.
۱۰- استفاده از Perseas
نسخهبندی کدها توسط یک سیستم کنترل نسخه مانند Git یکی از رویکردهای اصلی تمام برنامهنویسان دنیا است. در ارتباط با دیتابیس نیز نیاز است تا نسخههای مختلفی از Database Schema را ایجاد کنید. با استفاده از Perseas میتوانید این کار را انجام دهید.
در واقع Perseas یک ابزار کمکی است که تمام Objectهای داخل یک Schema را به یک فایل YAML تبدیل میکند. این موضوع فواید بسیاری زیادی برای شما خواهد داشت. برای مثال اگر بخواهید دیتابیستان را به یک محیط دیگر انتقال دهید، میتوانید از این ابزار استفاده کنید. همچنین میتوانید نسخههای مختلفی از دیتابیس را با استفاده از این قابلیت ایجاد کنید.
سرویس دیتابیس مدیریت شده
با وجود تمام مزایا و امکاناتی که پستگرس در اختیار ما قرار میدهد، اما در نهایت مدیریت دیتابیس کار چندان سادهای نبوده و پیچیدگیهای مربوط به خود را دارد. در این نقطه است که سرویس دیتابیس مدیریت شده همروش وارد کار میشود.
سرویس دیتابیس مدیریت شده به شما این امکان را می دهد تا بدون نیاز به نگرانی در ارتباط با راهاندازی و مدیریت پایگاههای داده خود، از قابلیتهای مختلف یک سیستم مدیریت دیتابیس استفاده کنید. در همروش جدای از PostgreSQL از MySQL، MongoDB و Redis نیز پشتیبانی بعمل میآید.
جمعبندی
پستگرس از جمله دیتابیسهای پرکاربرد بوده و به همین دلیل نیاز است تا روی یادگیری کامل آن سرمایهگذاری کنید. در این مطلب از وبلاگ همروش شما را با بهترین رویکردها و ترفندها برای استفاده بهینه از امکانات PostgreSQL آشنا کردیم. تمام موارد ذکر شده در این مطلب، تجربیات و رویکردهای تست شدهای هستند که از کامیونیتیهای مختلف جمعآوری شدهاند.