SQL  یا NO-SQL :کدام یک بهتر است؟

بودن یا نبودن:مسئله این است!شکسپیر وقتی این جمله را می گفت احتمالا درباره ی دیتابیس فکر نکرده بود ولی هنوز سوال مهمی است که بیشتر شرکت ها با آن روبرو هستند . وقتی نوبت به انتخاب دیتابیس می رسد بزرگترین تصمیم این است که ما از دیتابیس رابطه ای (relational Database) یا (سی-کو-ال)SQL استفاده کنیم یا از دیتابیس غیر رابطه ای (non-relational databases) یا NO-SQL . درحالی که دیتابیس رابطه ای اکثر اوقات یک گزینه ی مناسب هست! ولی برای مجموعه داده های بزرگ(Big data) و تجزیه وحلیل (Analysis) نامناسب است . این دلیل اصلی محبوبیت سیستم دیتابیس غیر رابطه (NO-SQL) در شرکت های بزرگ اینترنتی مانند گوگل(Google)،یاهو(Yahoo)،آمازون(Amazon) است.به هر حال ، تصمیم برای انتخاب پایگاه داه به همین سادگی نیست (پس واقعا چیست؟). هر دو پایگاه داده رابطه ای و غیر رابطه ای دارای ساختار های مختلف و روش های ذخیره سازی داده مختلف هستند.پس انتخاب بین (SQL)و(NO-SQL) اساسا به نوع پایگاه داده مورد نیاز برای یک پروژه خاص خلاصه می شود.SQL یا NO-SQL :کدام یک بهتر است؟چه چیزی متفاوت است؟؟هر دو پایگاه داده ها یک هدف دارند یعنی ذخیره ی اطلاعات اما آنها به روش های کاملا متفاوت عمل می کنند. چندین تفاوت بین پایگاه داده های SQLوNO-SQL وجود دارد و درک آنها برای آگاهانه تصمیم گرفتن در مورد پایگاه داده مورد نیاز ما بسیار مهم است.خب با در نظر داشتن این نکته برخی از تفاوت های مهم بین پایگاه داده SQL وNO-SQL به شرح زیر است:1-زبان(Language):بیایید تصور کنیم که در دنیای پایگاه داده همه به زبان X صحبت میکنند پس اگر در بین اونها با زبان Y شروع به حرف زدن کنید کاملا گیج کننده خواهد بود. این مورد در پایگاه داده SQL وجود دارد.پایگاه داده SQL داده هارا بر اساس زبان SQL که یکی از متنوع ترین و پرکاربردترین گزینه های موجود در پایگاه داده است که داده ها را چینش (یا به اصطلاح دستکاری)میکند.در حالی که این زبان یک انتخاب امن و مطمئن است به ویژه برای درست کردن کوئری(query) های پیچیده که می توانند آنها را محدود کند.این بدین دلیل است که نیاز دارد از طرح های از پیش تعریف شده(shema) برای تعیین ساختار داده ها قبل از اینکه شما با آن کار کنید و ساختار را تغییر بدهید که این کاملا برای شما گیج کننده خواهد بود (مثل قضیه ی استفاده از زبان Y)و حالا دوباره دنیای دیتابیس را تصور کنید که چند زبان شبیه به هم صحبت می کنند. در حالی که این دنیا کمی آشفته و بهم ریخته خواهد بود صحبت کردن به زبان Y خوب خواهد بود چو شما بالاخره یک هم زبان را پیدا خواهید کرد. این همان دیتابیس NOSQLاست که داری یک طرح(shema) پویا(dynamic) برای داده های بدون ساختار است. در اینجا داده ها از را های مختلفی ذخیره می شوند به این معنی که می توانند بصورت سند مدار(Documents-Oriented) ،ستون گرا(Cloumn- Oriented)، مبتنی بر نمودار(graph-based) و.... ذخیره می شوند. این بدین دلیل است که اسناد (Documents) می توانند بدون ساختار تعریف شده یا ثابت ایجاد کرد. بنابراین هر سندی میتواند ساختار منحصر بفرد خود را داشته باشد.2-مقیاس پذیری(Scalability): به یک ساختمان بلند در همسایگی خودتان نگاه کنید.بهتر است که طبقه های بیشتری به این ساختمان اضافه شود یا یک ساختمان جدید برای ساکنلن بیشتر ایجاد شود .کدام گزینه بهتر است؟ مشکل SQL و NO-SQL این است که پایگاه داده های SQL بطور عمودی مقیاس پذیر هستند . این بدین معنی است که با افزایش مواردی مانند CPU- RAM یاSSD می توان بار یک سرور را افزایش داد(مثال ساختمانی که طبقات بیشتری به آن اضافه شود.) از طرف دیگر پایگاه داده های NO-SQL بصورت افقی مقیاس پذیر هستند و این بدین معنی است که می توان با خُردکردن یا افزودن سرور های بیشتر در پایگاه داده NO-SQL ترافیک بیشتری را کنترل کرد(مثال اضافه کردن ساختمان جدید) در درازمدت که حساب کنیم بهتر است که ساختمان ها بیشتر از طبقه اضافه شوند زیرا پایدار تر هستند.بنابر این NO-SQL در نهایت می تواند بزرگتر و قرتمند تر شود و ایجاد پایگاه داده های NO-SQLبه گزینه برتر برای مجموعه داده های بزرگ یا داده های همیشه در حال تغییر است(Big Data و...)3-طرحواره(Schema Design):طرحواره به طرح اصلی پایگاه داده یعنی نحوه سازماندهی داده اشاره دارد. طرحواره SQLو NO-SQLبطور قابل توجهی متفاوت است.متن زیر رو برای توضیح عکس بخونید(بزارین یا یک جمله طنز بهتون بگم: 3تا مدیر پایگاه داده در ساختمان NO-SQL قدم می زدن بعد کمی که قدم زدن بیرون رفتن چون هیچ جدولی نتونستند پیدا کنن)"البته زیاد هم طنز نبود!!" این اساسا به این معنی است که مدیران پایگاه داده ضعیف نمی توانند جدولی در NO-SQL پیدا کنند چون هیچ تعریف استانداردی برای طرح پایگاه داده NO-SQL وجود ندارد. اکثر پایگاه داده های NoSQL جزو یکی از این ۴دسته قرار میگیرند که هرکدام ویژگی خودشان را دارا هستند:پایگاه داده های مبتنی بر کلید/مقدار (Key/Value Store Databases)پایگاه داده های مبتنی بر سند (Document Base Databases)پایگاه داده های مبتنی بر ستون (Column Family Databases)پایگاه داده های مبتنی بر گراف (Graph Databases)از طرفی دیگر اگر مدیران به SQL رفته بودند مطمئنا جدول هایی پیدا می کردند چون SQL طرحواره ی خودش را بر اساس جدول پیاده سازی می کند(Table-bases).این تفاوت در Shema پایگاه داد SQL را برای برنامه هایی که نیاز به معاملات چند ردیفی مثل سیستم حسابداری یا برای سیستم های قدیمی که برای یک ساختار رابطه ای ساخته شده اند گزینه ی بهتری است .با این حال پایگاه داده NO-SQL برای داده های بزرگ بسیار بهتر است زیرا انعطاف پذیری یک نیاز مهم است که توسط طرحواره پویای آن براورده می شود.4-جامعیت(Community):دیتابیس SQL یک فناوری بالغ است (مثل عموی پییر اما عاقل )و بسیاری از توسعه دهندگان با تجربه وجود دارند که آن را درک می کنند.همچنین پشتیبانی بزرگ از تمام پایگاه داده های SQL از فروشندگان آن ها در دسترس است مثل اوراکل-مایکروسافت و ...حتی بسیاری از مشاوران مستقل هستند که می توانند در پایگاه داده SQL برای استقرار در مقیاس بسیار بزرگ کمک کنند. از طرف دیگر NO-SQL نسبتا جدید است (مثل پسر عموی جوان و سرگرم کننده!) بنابراین برخی از پایگاه داده های NO-SQL به پشتیبانی جامعه متکی هستند(Free Software Foundation) همچنین تنها متخصصان محدود برای راه اندازی و استقرار در مقیاس بزرگ NO-SQL در دسترس هستند. ____سوال بزرگ؟؟____دیتابیسNO-SQL یک فناوری جدید در مقایسه با SQL است ، بنابراین به طور طبیعی سولات زیادی در رابطه به آن وجود دارد به ویژه در زمینه Big Data و تجزیه و تحلیل داده ها ،که به برخی از سولات اصلی مربوط به این موضوع پرداخته شده______1_آیا NO-SQL سریعتر از SQL است؟به طور کلی ، NO-SQL سریعتر از SQL نیست، همانطور که SQL از NO-SQL سریعتر نیست.!برای کسانی که این جمله رو درک نکردند باید بگم سرعت به عنوان عاملی برای پایگاه داده های SQL وNO-SQLبه زمینه بستگی دارد . پایگاه داده های SQL پایگاه داده هایی عادی هستند که درآن داده ها به جدول منطقی مختلف تقسیم می شوند تا از افزونگی داده ها و تکثیر داده ها جلوگیری شود. در این سناریو پایگاه داده های SQL برای پیوستن ،پرس ج.،بروزرسانی و... سریعتر از همتای خود یعنی NO-SQLاست.پایگاه داده های NO-SQLبطور خاص برای داده های بدون ساختار طراحی شده اند که می تواند ستون گرا ، مبتنی بر نمودار و مستند گرا باشد.در این حالت یک موجودیت خاص داده باهم و بصورت پارتیشن نشده ذخیره می شوند.بنابراین انجام عملیات خواندن یا نوشتن روی یک موجودیت واحد داده در مقایسه با SQL برای پایگاه داده های NO-SQL سریعتر است.______2-آیا NO-SQL برای Big data مناسب است؟؟(میگن نیاز، مادر اختراعه) این قطعا در مورد NO-SQL است.پایگاه داده های NO-SQLبرای Big dataبطور خاص توسط برترین سرکت های اینترنتی مانند گوگل ساخته شده است چون پایگاه های ارتباطی موجود قادر به کنار آمدن با افزایش نیاز به پردازش داده ها نبودند. پایگاه داده های NO-SQL دارای یک Shema پویا هستند که برای داده های بزرگ بهتر است چون انعطاف پذیری یک نیاز مهم بشمار می رود . همجنین مقادیر زیادی از داده های تحلیی را می توان در پایگاه داده های NO-SQL برای تجزیه تحلیل پیشبینی و ذخیره کرد. نمونه این داده ها از سایت های مختلف رسانه اجتماعی مثل اینستاگرام ، توییتر، فیسبوک است. NO-SQL به صورت افقی مقیاس پذیر است و در صورت لزوم می توانئ بزرگتر و قدرتمند تر شود.همه این ها باعق می شود که پایگاه داده های NO-SQL به عنوان گزینه مورد نظر برای کاربرد های کلان داده باشد.و سخن پایانی...انتخاب بین SQLو NO-SQL کاملا به شرایط فرد بستگی دارد زیرا هردو دارای معایب و مزایایی نسبت به یکدیگر هستند.SQL مدت زیادی است که با Shema ثابت (طرحواره)و ساختار مضخص ایجاد شده اند و برای برنامه هایی که معاملات چند ردیفی مانند سیستم حسابداری یا سیستم های قدیمی که برای یک ساختار رابطه ای ساخته شده اند ایده آل هستند ودر طرف دیگر NO-SQL با مقیاس پذیری و انعطاف پذیری راحت و استفاده ساده تر که برای برنامه های بدون تعریف طرحواره (Shema) خاص مانند سیستم مدیریت محتوا ، برنامه های Big Data و تجزیه و تحلیل به لحظه(Real-time) مناسب هستند.با تشکر از شماامیدوارم تونسته باشم سوالات شما رو تا حدودی جواب بدم منتظر پست های بعدی باشید.ترجمه : مهدی امجدیمنبع:https://www.geeksforgeeks.org/sql-vs-nosql-which-one-is-better-to-use/#SQL #NO_SQL #Big_Data #data_bases