نبرد بین نظم و انعطاف (قسمت اول از مفاهیم دیتابیس)
تصمیم دارم یک سری مجموعه از مفاهیم دیتابیس بسازم اما قرار نیست توش کد بزنیم و بگیم SELECT چیه و چه موقع از WHERE استفاده کنیم ، بلکه قراره بریم تو قلب مفاهیم و اون مهم هاشو یاد بگیریم تا طراحی بهتری داشته باشیم
توی اولین قسمت از سری مجموعه مفاهیم دیتابیس قراره خون و خون ریزی 🔪راه بیوفته بین دو نوع دیتابیس یعنی SQL و NoSQL
میخواییم یاد بگیریم که اصلا کی به وجود اومدن؟ چرا به وجود اومدن؟ چه موقع از کدوم استفاده کنیم و چه موقع استفاده نکنیم؟ مزیت و معایبشون چیه؟ به درد چه پروژه هایی میخوره ؟ اول بریم سراغ اونی که سنش بیشتره یعنی SQL ها
✅ تاریخچه ها
دیتابیس های SQL یاStructured Query Language یا ساختاریافته
این نوع دیتابیس ها راه حلی برای ذخیرهسازی و مدیریت دادههای ساختارمند به وجود اومدن تقریبا در دهه ۱۹۷۰، شرکت ابرقدرت و ابر شوکت😁 IBM با تحقیقاتی که انجام داده بود یک مدل رابطهای برای دیتابیسها معرفی کرد.
هدف از این مدل چی بود ؟؟؟ میخواست که یک روش ساختاریافته رو برای ذخیره داده درست کنه پس چی شد ؟ SQL به عنوان زبان استاندارد برای مدیریت و پرسوجوی دیتابیسهای رابطهای به دنیا اومد👼.
این دیتابیس ها در سیستمهای بانکی، تجاری، و مالی که دادهها بسیار حساس و پیچیده بودند مورد استفاده قرار گرفتن و به سرعت به عنوان استاندارد صنعتی پذیرفته شدن و خب پشت بندش دیتابیس های Oracle، MySQL، و PostgreSQL بر پایه همین SQL ساخته شدند.
دیتابیس های NoSQL یا غیرساختار یافته
رفته رفته اینترنت، شبکه های اجتماعی، موتور های جست و جو خلاصه همه چی اوج گرفت و حجم داده ا به سقف میزد و در دهه ۲۰۰۰، دیتابیس رابطهای با چالشهایی مواجه شدند مثلا برای داده های منعطف تر کارایی لازم رو نداشتن، مثلا سرعتشون کمتر بود یا برای مقیاس پذیری عمودی معمولا ساخته شده بودن
پس گوگل و آمازون دست به کار شدن مدل Not Only SQL رو اوکی کردن و پشت بندشم دیتابیس های مونگو و ردیس و امثال اینا ساخته شد
الان ممکنه یک سری از دوستان گل بگن عه عه ببین سرعت SQL کمه پس دیگه هممممه پروژه ها رو با mongo بیاریم بالا😒، ببینید ما داریم توی اسکیل گوگل و آمازون حرف میزنیم(یعنی میلیاااردی) با این حال اونا بازم دارن از sql ها استفاده میکنن و هرکدوم از این دو نوع به پروژه بستگی داره و هیچ کدوم بر دیگری برتری ندارن
✅ نوع ساختار داده ها
دیتابیس های SQL یاStructured Query Language یا ساختاریافته
این نوع دیتابیس ها از یک مدل جدولی یا همون Table استفاده میکنند. دادههای ما در جداول با ردیفها و ستونها ذخیره میشن و هر سطر، به عنوان یک رکورد شناخته میشه. این ساختار باعث میشه که SQL مناسب برای دادههای ساختارمند و دارای ارتباطات پیچیده باشد. عکس زیر گویای همه چیزه
پس وقتی دیدی خیلی ریلیشن یا ارتباط بین داده هات هست بیا سمت این نوع دیتابیسا(مقاله های آینده بیشتر توضیح میدم)
دیتابیس های NoSQL یا غیرساختار یافته
این دیتابیسها از مدلهای مختلفی برای ذخیره دادهها استفاده میکنند، مثلا دیتابیس های داکیومنتی مثل مونگو از ساختار(document-oriented) استفاده میکنن، دیتابیسی مثل ردیس از ساختار کلید-مقدار (key-value)، و دیتابیس مثل neo4j، گراف استفاده میکنه.
دادهها در NoSQL بدون نیاز به ساختار جدولی و به صورت غیرساختارمند ذخیره میشن که باعث انعطافپذیری بیشتر میشود.
مثلا توی مونگو ماشالله به هیچ دیتایی نه نمیگه هرچی بدی بهش برات ذخیره میکنه انقدی که بچه خوب و منعطفیه
✅ مقیاس پذیری
دیتابیس های SQL یاStructured Query Language یا ساختاریافته
این نوع دیتابیس ها معمولاً برای مقیاسپذیری عمودی(vertical) طراحی شدهاند. حالا این عمودی یعنی چی ؟ ببینید دو نوع مقیاس پذیری هست که توی دیتابیسا استفاده میشه یکی عمودی یکی افقی حالا وقتی میگیم برای مقیاس پذیری عمودی بهتر عمل میکنن یعنی اینکه سختافزارمون رو ارتقا بدیم مثلا برای افزایش توانایی سرور، رم یا سی پی یو یا هارد یا هرچیزی که کمک کنه اضافه کنیم
دیتابیس های NoSQL یا غیرساختار یافته
این نوع دیتابیس ها معمولاً برای مقیاسپذیری افقی (horizontal) طراحی شدهاند. توی این نوع مقیاس پذیری به جای اینکه سرور رو ارتقا بدیم میاییم سرور های دیگه رو اضافه میکنیم
مقیاس پذیری افقی مثل اضافه کردن چندتا ماشین هست و مقیاس پذیری عمودی مثل قدرتمند تر کردن اون ماشین هست
✅ چه موقع از کدوم استفاده کنیم ؟
فرض کنید یه اپلیکیشن که برای دانشگاه هستش رو میخوایین پیاده سازی کنید، خب طبیعتا دیتابیسی که میخواید طراحی کندی ارتباط میون جدول هاتون زیاد میشه مثل ارتباط بین دانشجو، استاد،درس، گروه ، واحد و ... و خب کار عقلانی اینه از دیتابیس های SQL محور استفاده کنیم
حالا فرض کنید یه فروشگاه داریم که هر نوع کالایی توش به فروش میره مثل موبایل، تلوزیون، یخچال و ... خب هرکدوم از اینا فیلد های متفاوتی دارن مثلا مشخصات یخچال قطع فرق میکنه با مشخصات یک تلوزیون و خب ممکنه خیلی هم ارتباطی بینشون نباشه پس کار بهتر اینه از مونگو که NoSql بیس هست استفاده کنیم
درکل همه چی وابسته به پروژه شما و اون چیزی که میخواید هستش ولی به شخصه من خودم سرعت آخرین معیار برای انتخابم هست😏
ببینید اینکه میگم NoSql برای داده هایی با ریلیشن زیاد خیلی مناسب نیست منظورم این نیست کلا نمیشه ریلیشن زد ها !!! توی NoSql هم ریلیشن داریم ولی یه خرده با SQL متفاوت هست مثلا توی NoSQL رفرنس و امبد داریم که قسمت بشه تو مقاله های آینده توضیح میدم
✅ نتیجه گیری :
اگه داده هات انعطاف زیادی مطلبه، مقیاس پذیری افقی معمولا به کارت میاد، حجم داده هات بشدت بالاس، داده هات غیر ساختارمند یا نیمه ساختارمند هستن و در آخرم نیاز به سرعت زیاد تری داری(جای بحث داره) بیا سمت NoSql ها
اما اگه داده هات ساختار سفت و سخت دارن و نظم بیشتر برات اهمیت داره، ریلیشن زیاد داری، تراکنش های حساس داری مثل یک سیستم بانکداری حساس که یکئارچه هستن بیا از SQL ها استفاده کن
بازم میگم همه چیز ترید آف هستش و صفر و یک مطلق نیست و بسته به پروژه متفاوت هستش و این چیزایی که گفتیم صرفا یه چیز عمومی هستش
امیدوارم مورد استفاده اتون قرار گرفته باشه
اگه دوست داشتید توی کانال تلگرامیمون هم عضو بشید LearnByLearn@