ویرگول
ورودثبت نام
آرمان راد
آرمان رادوردپرس و زیرساخت وب می‌نویسم. تجربه‌های واقعی از هاست، دیتابیس و راه‌اندازی سایت برای کسی که می‌خواد کمتر خطا کند.
آرمان راد
آرمان راد
خواندن ۳ دقیقه·۴ روز پیش

چرا در پروژه‌های جدیدم گاهی PostgreSQL را انتخاب می‌کنم و گاهی MySQL

سال‌ها برای من دیتابیس یعنی MySQL بود. وردپرس با آن کار می‌کرد، هاست‌ها پیش‌فرض داشتندش و هر آموزشی که می‌دیدم با آن شروع می‌شد. اولین بار که یک پروژه Django را با PostgreSQL شروع کردم، بیشتر از سر کنجکاوی بود. حالا هر دو را استفاده می‌کنم و فهمیدم سوال «کدام بهتر است» سوال درستی نیست.

سوال درست این است: این پروژه به چه چیزی نیاز دارد و تیم با چه چیزی راحت است.

وقتی بدون فکر MySQL را انتخاب می‌کنم

اگر پروژه وردپرس یا ووکامرس است، بحثی نیست. وردپرس برای MySQL و MariaDB ساخته شده و کل اکوسیستم افزونه‌ها روی همین فرض نوشته شده. همین‌طور برای بیشتر CMSهای PHP و پروژه‌های Laravel قدیمی که روی MySQL نوشته شده‌اند.

یک دلیل دیگر هم هست که کمتر درباره‌اش صحبت می‌شود: تیم. اگر تیمی سال‌ها با MySQL کار کرده و ابزارها و عادت‌هایش را می‌شناسد، عوض کردن دیتابیس فقط به خاطر مد، هزینه یادگیری دارد که معمولا ارزشش را ندارد.

وقتی سراغ PostgreSQL می‌روم

در پروژه‌های جدیدم با Django یا FastAPI یا Node، اغلب PostgreSQL را انتخاب می‌کنم. چند دلیل مشخص دارم:

داده نیمه‌ساختاریافته. در یک پروژه تنظیمات هر مشتری شکل متفاوتی داشت. با نوع JSONB در PostgreSQL توانستم این داده را ذخیره کنم و روی فیلدهای داخلش ایندکس بگذارم. در MySQL هم JSON هست، ولی برای این کار PostgreSQL را راحت‌تر یافتم.

افزونه‌ها. وقتی خواستم جستجوی معنایی روی متن‌ها بسازم، pgvector را نصب کردم و بردارها را کنار بقیه داده نگه داشتم. برای داده مکانی هم PostGIS هست. این‌ها دلیل اصلی بودند که بعضی پروژه‌ها را به PostgreSQL بردم.

گزارش‌گیری. در پروژه‌ای که گزارش‌های پیچیده با چند join و تابع پنجره‌ای داشت، کار با PostgreSQL برایم روان‌تر بود.

درباره فارسی

یک نگرانی رایج این است که کدام فارسی را بهتر پشتیبانی می‌کند. تجربه من این است که هر دو مشکلی ندارند، به شرطی که درست تنظیم شوند. در MySQL حتما کدگذاری utf8mb4 را انتخاب می‌کنم، چون utf8 قدیمی همه کاراکترها را پوشش نمی‌دهد. مرتب‌سازی الفبایی فارسی در هر دو به collation وابسته است و همیشه با داده واقعی تستش می‌کنم، چون ی و ک عربی و فارسی می‌توانند نتیجه را عوض کنند.

اشتباهی که کردم

یک بار پروژه‌ای را با MySQL شروع کردم و یک سال بعد خواستم ببرمش روی PostgreSQL. ابزار انتقال داده وجود دارد و کار شدنی است، ولی کوئری‌های خامی که نوشته بودم، رفتار متفاوت مقایسه رشته‌ها و تفاوت نوع داده‌ها، چند هفته وقتم را گرفت. از آن به بعد، انتخاب دیتابیس را جدی‌تر و در همان روز اول انجام می‌دهم.

قاعده سرانگشتی من

  • وردپرس و PHP قدیمی: MySQL

  • پروژه جدید با JSON زیاد، جستجوی معنایی یا داده مکانی: PostgreSQL

  • تیمی که فقط یکی را می‌شناسد و پروژه نیاز خاصی ندارد: همان که می‌شناسد

نگهداری را دست کم نگیرید

انتخاب موتور فقط نصف ماجراست. بکاپ منظم، تست بازگردانی و آپدیت نسخه، کارهایی است که من در سرورهای شخصی‌ام بارها عقب انداختم. اگر شما هم حوصله نگهداری دیتابیس را ندارید، پیشنهادم این است که سراغ یک دیتابیس مدیریت‌شده بروید. خودم این روزها از دیتابیس مدیریت‌شده پاستاکلود استفاده می‌کنم که هم PostgreSQL دارد هم MySQL و بکاپ زمان‌بندی‌شده می‌گیرد؛ هر سرویس دیگری هم که این کارها را برایتان انجام دهد، به همان اندازه وقت آزاد می‌کند.

mysqlpostgresqlدیتابیسبرنامه نویسی وب
۱
۰
آرمان راد
آرمان راد
وردپرس و زیرساخت وب می‌نویسم. تجربه‌های واقعی از هاست، دیتابیس و راه‌اندازی سایت برای کسی که می‌خواد کمتر خطا کند.
شاید از این پست‌ها خوشتان بیاید