نو اس کیو ال

آنچه در این صفحه می خوانید:

معرفی NOSQL

پایگاه داده NoSQL یا غیر رابطه ای مکانیزمی را برای ذخیره و بازیابی داده فراهم می کند که به معنای دیگری غیر از روابط جدولی مورد استفاده در پایگاه داده های رابطه ای، مدل سازی شده است. چنین بانک های اطلاعاتی از اواخر دهه 1960 وجود داشته اند، اما موفق به کسب نتیجه "NoSQL" نشدند تا اینکه در اوایل قرن بیست و یکم محبوبیت پیدا کرد و این امر ناشی از نیاز شرکت های وب بود. پایگاه داده های NoSQL به طور فزاینده ای در داده های بزرگ و برنامه های وب در Real-time استفاده می شوند. سیستم های NoSQL نیز گاهی اوقات Not Only SQL خوانده می شوند تا تأکید کنند که ممکن است از زبان های پرس و جو مانند SQL پشتیبانی کنند یا در معماری های ماندگار در چند زبانه در کنار بانک های اطلاعاتی SQL بنشینند.

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

بسیاری از پایگاه های NoSQL سازگاری را به نفع دسترسی، تحمل پارتیشن و سرعت به خطر می اندازند. موانع پذیرش بیشتر پایگاه های NoSQL شامل استفاده از زبان های پرس و جو سطح پایین به جای SQL، به عنوان مثال، عدم توانایی انجام پیوستن به صورت جداگانه در جداول، عدم وجود رابط های استاندارد و سرمایه گذاری های عظیم قبلی در پایگاه داده های رابطه ای موجود است. اکثر پایگاه های NoSQL فاقد تعاملات ACID واقعی هستند.

در عوض، اکثر بانکهای اطلاعاتی NoSQL مفهومی از سازگاری نهایی ارائه می دهند که در آن تغییرات پایگاه داده به همه گره ها سرانجام به طور معمول در میلی ثانیه پخش می شود، بنابراین ممکن است کوئری های به روز نشده را فوراً بازگرداند یا ممکن است منجر به خواندن داده های دقیق نباشد. علاوه بر این، برخی از سیستم های NoSQL ممکن است نوشتن های گمشده و اشکال دیگر از دست دادن داده ها را نشان دهند. برخی از سیستم های NoSQL مفاهیمی مانند ورود به سیستم را برای جلوگیری از از دست رفتن داده ها ارائه می دهند. برای پردازش معاملات توزیع شده در چندین پایگاه داده، سازگاری داده ها یک چالش بزرگتر است که هم برای NoSQL و هم برای پایگاه داده های رابطه ای دشوار است.

آشنایی با پایگاه داده غیر رابطه ای

پایگاه داده غیر رابطه ای یک پایگاه داده است که از شماتیک جدولی سطرها و ستون های موجود در اکثر سیستم های سنتی پایگاه داده استفاده نمی کند. در عوض، از یک مدل ذخیره سازی استفاده می کنند که برای نیازهای خاص نوع داده ذخیره شده بهینه شده است. به عنوان مثال، داده ها ممکن است به صورت اسناد JSON یا به عنوان یک نمودار متشکل از edges و گراف به صورت جفت های ساده کلید یا مقدار ذخیره شوند. آنچه این پایگاه های داده مشترک دارند این است که از یک مدل رابطه ای استفاده نمی کنند. همچنین، آنها تمایل دارند که در نوع داده ای که پشتیبانی می کنند و نحوه استعلام داده ها خاص تر باشند. به عنوان مثال، پایگاه های داده time-series برای نمایش داده ها از طریق توالی داده های مبتنی بر زمان بهینه می شوند، در حالی که پایگاه های داده گرافیکی برای کاوش در روابط وزنی بین موجودات بهینه شده اند.

اصطلاح NoSQL به پایگاه های داده اطلاق می شود كه از SQL برای نمایش داده ها استفاده نمی كنند و در عوض از سایر زبان ها و برنامه نویسی ها برای جستجوی داده ها استفاده می كنند. در عمل، "NoSQL" به معنای "پایگاه داده غیر رابطه ای" است، حتی اگر بسیاری از این پایگاه های داده از نمایش داده های سازگار با SQL پشتیبانی می کنند. با این حال، استراتژی زیربنایی اجرای پرس و جو معمولاً با روشی که RDBMS سنتی همان سؤال SQL را اجرا می کند بسیار متفاوت است.

معماری پایگاه داده های NOSQL

جنبش NoSQL همچنان که توسعه دهندگان همچنان به خسته شدن از مدیریت سنتی بانک اطلاعاتی مبتنی بر SQL می پردازند و به دنبال پیشرفت در فناوری ذخیره هستند و به پیشرفت خود ادامه می دهد. اخیرا، گردآوری بسیاری از فناوری های جدید در این زمینه به ویژه با تمرکز بر رویکردهای مختلف تکثیر و پارتیشن بندی ارائه شده است. فن آوری های جدید بسیار خوبی در دسترس است، اما استفاده از یک پایگاه داده NoSQL فقط یک جایگزین مستقیم برای سرور SQL نیست. از بسیاری جهات قوانین را تغییر می دهد و استفاده از بانک اطلاعاتی NoSQL به بهترین وجه با تغییر مربوطه در معماری برنامه همراه است.

رویکرد پایگاه داده NoSQL با دور شدن از پیچیدگی سرورهای مبتنی بر SQL مشخص می شود. منطق اعتبار، كنترل دسترسی، نقشه برداری از داده های نمایه شده با پرسشنامه، ارتباط داده های مرتبط، حل و فصل تعارض، حفظ محدودیت های یکپارچگی، و رویه های شروع شده از لایه بانک اطلاعات منتقل می شود. این امر موتورهای پایگاه داده NoSQL را قادر می سازد تا بر عملکرد استثنایی و مقیاس پذیری تمرکز کنند. البته این نگرانی های اساسی داده های مربوط به یک برنامه از بین نمی رود بلکه باید به یک لایه برنامه نویسی منتقل شود. یکی از مهمترین مزیت های معماری محور NoSQL این است که اکنون این منطق می تواند در زبان های برنامه نویسی آشنا، قدرتمند، انعطاف پذیر، بجای تکیه بر مجموعه وسیع API ها و زبان های پیچیده در یک سرور SQL، رمزگذاری شود ( ستون داده ها، تعاریف، کوئری، رویه های ذخیره شده و غیره).

به منظور درک نحوه صحیح معماری برنامه های کاربردی با پایگاه داده های NoSQL، باید جدایی نگرانی ها را بین مدیریت داده و ذخیره داده ها درک کنید. در پایگاه داده های مبتنی بر SQL تلاش شده است تا هر دو نگرانی را با بانکهای اطلاعاتی برآورده سازد. این بسیار دشوار است و به ناچار برنامه ها بخشی از وظیفه مدیریت داده ها را به عهده می گیرند، وظایف خاصی برای اعتبارسنجی ارائه می دهند و منطق مدل سازی را اضافه می کنند. یکی از مفاهیم اصلی جنبش NoSQL این است که DB ها بر روی وظیفه ذخیره سازی داده های با کارایی بالا تمرکز کنند و دسترسی کم به لایه مدیریت داده را به روشی فراهم کنند که وظایف مدیریت داده به راحتی نوشته شود.

پردازش داده های رابطه ای

از آنجا که اکثر بانکهای اطلاعاتی NoSQL فاقد امکان پیوستن به کوئری ها هستند، به طور کلی طرح پایگاه داده باید متفاوت طراحی شود. سه روش اصلی برای پردازش داده های رابطه در یک پایگاه داده NoSQL وجود دارد.

Multiple queries: به جای بازیابی همه داده ها با یک پرس و جو، انجام چندین پرس و جو برای بدست آوردن داده های دلخواه متداول است. پرس و جوی NoSQL اغلب سریعتر از پرس و جو های SQL سنتی است، بنابراین هزینه انجام کوئری های اضافی ممکن است قابل قبول باشد. اگر تعداد زیادی پرس و جو ضروری باشد، یکی از دو رویکرد دیگر مناسب تر است.

Caching, replication and non-normalized data: به جای اینکه فقط کلیدهای خارجی را ذخیره کنید، معمولاً مقادیر خارجی واقعی را به همراه داده های مدل ذخیره می کنید. به عنوان مثال، هر نظر وبلاگ ممکن است علاوه بر شناسه کاربر، شامل نام کاربری نیز باشد، بنابراین دسترسی آسان به نام کاربری را بدون نیاز به جستجوی دیگر فراهم می کند. با این وجود وقتی نام کاربری تغییر می کند، اکنون باید در بسیاری از مکان های این پایگاه داده تغییر یابد. بنابراین این رویکرد زمانی بهتر عمل می کند که خواندن بسیار متداول تر از نوشتن باشد.

Nesting data: با بانکهای اطلاعاتی مانند MongoDB، معمول است که داده های بیشتری را در تعداد بیشتری از مجموعه ها قرار دهید. به عنوان مثال، در یک برنامه وبلاگ نویسی، شخص می تواند نظر را در سند پست وبلاگ ذخیره کند، به طوری که با یک بازیابی مجدد، تمام نظرات را دریافت می کند. بنابراین در این روش، یک سند واحد شامل تمام داده های مورد نیاز برای یک کار خاص است.

مقایسه NOSQL با پایگاه داده های رابطه ای (SQL)

تفاوت های سطح بالا SQL در مقابل NoSQL به شرح زیر می باشد:

  • بانکهای اطلاعاتی SQL در درجه اول به عنوان پایگاه داده های رابطه ای (RDBMS) نامیده می شوند. در حالی که بانک اطلاعاتی NoSQL در درجه اول یک پایگاه داده غیر مرتبط یا توزیع شده نامیده می شود.
  • بانکهای اطلاعاتی SQL پایگاه داده های مبتنی بر جدول هستند در حالی که بانکهای اطلاعاتی NoSQL مبتنی بر اسناد، جفت های کلید/مقداری، پایگاه داده های نمودار یا ستون گسترده هستند. این بدان معنی است که بانکهای اطلاعاتی SQL داده ها را به صورت جداول تشکیل می دهند که شامل n تعداد ردیف داده ها است در حالی که پایگاه داده های NoSQL مجموعه ای از جفت های کلیدی، اسناد، پایگاه های داده گرافیکی یا ستون گسترده است که تعاریف شمای استاندارد ندارند، باید رعایت کند.
  • بانکهای اطلاعاتی SQL دارای یک طرح از پیش تعریف شده هستند در حالی که بانکهای اطلاعاتی NoSQL برای داده های بدون ساختار دارای یک طرح پویا هستند.
  • بانکهای اطلاعاتی SQL به صورت عمودی قابل مقیاس هستند در حالی که بانکهای اطلاعاتی NoSQL از نظر افقی مقیاس پذیر هستند. پایگاه داده های SQL با افزایش قدرت سخت افزار مقیاس می شوند. پایگاه داده های NoSQL با افزایش سرورهای پایگاه داده در منابع، برای کاهش بار مقیاس می شوند.
  • پایگاه داده های SQL برای تعریف و دستکاری داده ها از SQL (زبان جستجوی ساختار یافته) استفاده می کند که بسیار قدرتمند است. در پایگاه داده NoSQL، نمایش داده شدگان به جمع آوری اسناد متمرکز شده اند. گاهی اوقات به عنوان UnQL (زبان پرس و جو بدون ساختار) نیز خوانده می شود. نحو استفاده از UnQL از پایگاه داده به پایگاه داده متفاوت است.
  • برای نمایش داده های پیچیده: پایگاه داده های SQL مناسب مناسب برای محیط پیچیده پرس و جو هستند در حالی که پایگاه داده های NoSQL مناسب برای نمایش داده های پیچیده نیستند. در سطح بالا، NoSQL رابط های استاندارد برای انجام پرس و جوهای پیچیده ندارد و خود نمایش داده ها در NoSQL به اندازه زبان نمایش داده شده SQL قدرتمند نیستند.
  • برای نوع داده های ذخیره شده: پایگاه داده های SQL برای ذخیره سازی سلسله مراتبی مناسب نیستند. اما، پایگاه داده NoSQL برای ذخیره سلسله مراتبی داده ها مناسب تر است، زیرا این روش از جفت کلید/مقداری برای ذخیره داده های مشابه داده های JSON پیروی می کند. پایگاه داده NoSQL برای مجموعه داده های بزرگ (یعنی داده های بزرگ) بسیار ارجح است. Hbase نمونه ای برای این منظور است.
  • برای مقیاس پذیری: در اکثر شرایط معمولی، بانکهای اطلاعاتی SQL بصورت عمودی قابل مقیاس بندی هستند. با افزایش CPU ،RAM ،SSD و غیره می توانید بر روی یک سرور واحد، بار افزایش را مدیریت کنید. از طرف دیگر، بانکهای اطلاعاتی NoSQL از نظر افقی مقیاس پذیر هستند. فقط می توانید چند سرویس دهنده دیگر را به راحتی در زیرساخت های پایگاه داده NoSQL خود اضافه کنید تا بتوانید از ترافیک بزرگ استفاده کنید.
  • برای کاربرد مبتنی بر تراکنش: پایگاه داده های SQL بهترین کاربرد مناسب برای برنامه های کاربردی از نوع سنگین معاملاتی است ، زیرا پایدارتر است و نویدگر اتمی و همچنین یکپارچگی داده ها است. اگرچه می توانید از NoSQL برای اهداف معاملات استفاده کنید ، اما هنوز هم در بار زیاد و برای برنامه های کاربردی پیچیده تراکنش قابل مقایسه و اندازه کافی نیست.
  • برای پشتیبانی: پشتیبانی عالی برای کلیه بانکهای اطلاعاتی SQL از فروشندگان آنها در دسترس است. همچنین بسیاری از مشاوره های مستقل وجود دارد که می توانند در پایگاه داده SQL برای استقرار در مقیاس بسیار بزرگ به شما کمک کنند. برای برخی از پایگاه داده های NoSQL، هنوز هم باید به پشتیبانی جامعه اعتماد کنید و فقط متخصصان خارجی محدودی برای تنظیم و استقرار استقرار گسترده NoSQL در مقیاس بزرگ در دسترس شما هستند.
  • برای خواص: بانکهای اطلاعاتی SQL بر خواص ACID (اتمی بودن، قوام، جداسازی و دوام) تأکید می کنند، در حالی که پایگاه داده NoSQL از قضیه CAP پیروی می کند (سازگاری، در دسترس بودن و تحمل پارتیشن)
  • برای انواع DB: در سطح بالا، می توان پایگاههای داده SQL را به صورت منبع باز یا منبع نزدیک از فروشندگان تجاری طبقه بندی کرد. بانکهای اطلاعاتی NoSQL را می توان براساس روش ذخیره داده ها به عنوان پایگاه داده های نمودار، پایگاه داده های کلید/مقداری، پایگاه داده های اسناد، بانک اطلاعات ستون و پایگاه داده XML طبقه بندی کرد.

انواع پایگاه داده های NOSQL

پایگاه داده اسناد (Document data stores)

یک پایگاه داده اسناد مجموعه ای از رشته های رشته ای به نام داده شده و مقادیر داده های اشیاء را در یک نهاد که به آن یک سند گفته می شود، مدیریت می کند. این پایگاه داده معمولاً داده ها را در قالب اسناد JSON ذخیره می کنند. هر مقدار فیلد می تواند یک مقیاس مقیاس مانند شماره یا یک عنصر مرکب مانند لیست یا مجموعه والدین و کودک باشد. داده های موجود در زمینه های یک سند به روش های مختلفی از جمله XML ،YAML ،JSON ،BSON یا حتی به صورت متن ساده رمزگذاری می شوند. زمینه های موجود در اسناد در معرض سیستم مدیریت ذخیره سازی قرار دارند و با استفاده از مقادیر موجود در این قسمت ها، برنامه ای را برای جستجوی و فیلتر کردن داده ها امکان پذیر می سازند.

به طور معمول، یک سند شامل کل داده ها برای یک نهاد است. چه مواردی یک نهاد را تشکیل می دهند ، مخصوص برنامه هستند. به عنوان مثال، یک نهاد می تواند شامل جزئیات مشتری، سفارش یا ترکیبی از هر دو باشد. یک سند واحد ممکن است حاوی اطلاعاتی باشد که در چندین جدول رابطه در سیستم مدیریت پایگاه داده رابطه (RDBMS) پخش می شود. یک اسناد و مدارک لازم نیست که تمام اسناد از یک ساختار یکسان برخوردار باشند. این رویکرد آزاد شکل انعطاف پذیری زیادی را ایجاد می کند. به عنوان مثال ، برنامه ها می توانند داده های مختلفی را در اسناد در پاسخ به تغییر در الزامات تجاری ذخیره کنند.

پایگاه داده اسناد

برنامه می تواند اسناد را با استفاده از کلید سند بازیابی کند. این یک شناسه منحصر به فرد برای سند است که غالباً مورد استفاده قرار می گیرد تا به توزیع یکنواخت داده کمک کند. برخی از بانکهای اطلاعاتی، سند را به طور خودکار ایجاد می کنند. برخی دیگر این امکان را برای شما فراهم می کنند که یک ویژگی از سند را برای استفاده به عنوان کلید مشخص کنید. این نرم افزار همچنین می تواند اسناد را بر اساس مقدار یک یا چند فیلد پرس و جو کند. برخی از بانکهای اطلاعاتی اسناد از نمایه سازی پشتیبانی می کنند تا جستجوی سریع اسناد را بر اساس یک یا چند فیلد فهرست بندی شده تسهیل کنند. بسیاری از بانکهای اطلاعاتی اسناد از بروزرسانی های داخلی پشتیبانی می کنند و به یک برنامه کاربردی می توانند مقادیر زمینه های خاص را در یک سند تغییر دهند بدون بازنویسی کل سند. عملیات خواندن و نوشتن بیش از چندین زمینه در یک سند واحد معمولاً اتمی است.

پایگاه داده ستونی (Columnar data stores)

پایگاه داده ستونی یا ستونی، داده ها را در ستون ها و ردیف ها سازماندهی می کند. در ساده ترین شکل، یک پایگاه داده ستونی خانوادگی می تواند بسیار شبیه به یک پایگاه داده رابطه، حداقل از نظر مفهومی ظاهر شود. قدرت واقعی یک بانک اطلاعاتی ستون خانواده در رویکرد غیرمتعارف آن برای ساخت داده های پراکنده قرار دارد که از رویکرد ستون محور برای ذخیره داده ها ناشی می شود. شما می توانید از یک پایگاه داده ستون خانواده به عنوان نگه داشتن داده های جدولی با ردیف ها و ستون ها فکر کنید ، اما ستون ها به گروه هایی معروف هستند که به عنوان خانواده ستون ها تقسیم می شوند. هر خانواده ستونی مجموعه ای از ستون ها را در اختیار دارد که به طور منطقی مرتبط هستند و به طور معمول به عنوان یک واحد بازیابی یا دستکاری می شوند. داده های دیگری که به طور جداگانه به آنها دسترسی دارند می توانند در خانواده های ستونی جداگانه ذخیره شوند. در یک خانواده ستون ، می توان ستونهای جدید را بصورت دینامیکی اضافه کرد ، و ردیف ها می توانند پراکنده باشند (یعنی یک ردیف لازم نیست که برای هر ستون مقداری داشته باشد).

پایگاه داده کلید / مقدار (Key/value data stores)

یک پایگاه داده کلیدی / مقداری در واقع یک میز بزرگ است. شما هر مقدار داده را با یک کلید منحصر به فرد مرتبط می کنید و پایگاه داده کلید / مقدار از این کلید برای ذخیره داده ها با استفاده از یک عملکرد هشن مناسب استفاده می کند. تابع hashing برای تهیه توزیع یکنواخت کلیدهای هش در سراسر ذخیره داده ها انتخاب شده است. اکثر پایگاه داده های مهم فقط از پرس و جو ساده، درج و حذف عملیات پشتیبانی می کنند. برای تغییر یک مقدار (جزئی یا کلی)، یک برنامه باید داده های موجود را برای کل مقدار رونویسی کند. در اکثر پیاده سازی ها، خواندن یا نوشتن یک مقدار واحد یک عمل اتمی است. اگر مقدار زیاد باشد، نوشتن ممکن است مدتی طول بکشد. یک برنامه می تواند داده های دلخواه را به عنوان مجموعه ای از مقادیر ذخیره کند ، اگرچه برخی از پایگاه داده های مهم و کلیدی بیش از اندازه مقادیر را تحمیل می کنند. مقادیر ذخیره شده نسبت به نرم افزار سیستم ذخیره سازی مات است. هر گونه اطلاعات طرحواره باید توسط برنامه ارائه و تفسیر شود. در اصل ، مقادیر حباب هستند و پایگاه داده کلید / مقداری به سادگی مقدار را با کلید بازیابی یا ذخیره می کند.

نمونه ای از داده ها در یک پایگاه داده کلید / مقداری

پایگاه داده کلید مقداری

پایگاه داده گراف (Graph data stores)

یک پایگاه داده گراف دو نوع اطلاعات، گره و edges را مدیریت می کند. گره ها نمایانگر واحدها هستند و لبه ها روابط بین این موجودات را مشخص می کنند. هر دو گره و edges می توانند دارای خواصی باشند که اطلاعاتی در مورد آن گره یا لبه، مشابه ستون های یک جدول ارائه می دهند. Edges همچنین می توانند یک جهت داشته باشند که ماهیت رابطه را نشان می دهد. هدف از ایجاد داده های گرافیکی این است که به یک برنامه کاربردی اجازه دهد تا نمایش داده شد که از شبکه گره ها و edges عبور می کند و به طور موثر روابط بین موجودات را انجام دهد. نمودار زیر داده های پرسنل سازمان را که به صورت نمودار ساختار یافته اند نشان می دهد. نهادها کارمندان و ادارات هستند و حاشیه ها حاکی از گزارش روابط و دپارتمانی است که کارمندان در آن کار می کنند. در این نمودار، فلش های روی edges جهت روابط را نشان می دهند.

پایگاه داده گراف

مثال های پایگاه داده NoSQL:

نظرتون درباره این نوشته چیه؟ عالیه بد نیست خوب نبود