No SQL  یا SQL کدام یک بهتر است ؟
No SQL یا SQL کدام یک بهتر است ؟

 

Databases NoSQL چیست؟

بانک های اطلاعاتی NOSQL  ( مخفف NOT ONLY SQL )به شکل غیر جدولی می باشد و نحوه ذخیره سازی اطلاعات در آن نسبت با پایگاه های داده  رابطه ای کاملا متفاوت است این نوع پایگاه های داده ساختار یا Schema غیر ثابتی دارند حالا این یعنی چه؟ در بانک های اطلاعاتی رابطه ای، ساختار از پیش تعیین شده ای را دارند برای مثال ما جدولی را طراحی می کنیم.

 

 Sql_Schema

در تصویر بالا همان طور که مشاهده می کنید جدول ما دارای یک ساختار می باشد که هنگام ثبت اطلاعات باید از اینSchemaپیروی کرد. اما در پایگاه های دادهNoSQLبه این گونه نبوده و ما هر نوع ساختاری را می توانیم هنگام ثبت کنیم که به این ویژگیDynamic Schemaگفته می شود، این قابلیت باعث می شود که برنامه نویس احتیاجی به ساختSchemaها سخت گیرانه مشخص که پیش از ایجاد پایگاه داده طراحی شده است نداشته باشد. این نوع بانک ها برای ذخیره سازی معمولا ازXMLیاJSONو ... استفاده می کنند.

 

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

 

مختصری از تاریخچه ی Databases NoSQL

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

 

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

 

SQL چیست؟

اکنون که با مفهوم بانک های اطلاعاتیNoSQLآشنا شدیم بیایید آن را به آنچه به صورت سنتی محبوب ترین پایگاه داده ها بوده است  مقایسه کنیم:

بانک های اطلاعاتی رابطه ای که باSQLبه آن ها دسترسی پیدا می کنید (زبان مورد استفاده در این نوع  پایگاه های داده رابطه ای) هنگام تعامل با پایگاه های داده رابطه ای ، داده ها در جدول دارای ستون ها و ردیف ها ثابت ذخیره شده اند، که مخففStructure Query Languageاست.

 پایگاه های داده رابطه ای در اوایل دهه ۱۹۷۰ محبوبیت زیادی پیدا کرد، در آن زمان، ذخیره سازی بسیار گران بود بنابراین مهندسان نرم افزار به منظور کاهش تکثیر داده ها، پایگاه داده های خود را نرمال سازی می کردند ( در مقاله ای جدا این بحث را به صورت کامل مورد بررسی قرار خواهیم داد) . قبل از شروع توسعه پروژه ها با جزئیات برنامه ریزی شده مهندسان نرم افزار، با زحمت نمودار های پیچیده ای برای رابطه موجودیت (E-R یاERD) ایجاد می کردند تا اطمینان حاصل کنند که با دقت تمام داده هایی را که برای ذخیره آنها لازم است را پیش بینی کرده اند(برای ایجادSchemaجداول)، و کلی دردسر( اکنون با این تعاریف شاید از بانک های اطلاعاتی رابطه ای نگاه مناسبی در ذهن شما ایجاد نشده باشد اما باید گفت که هر کدام از این بانک های اطلاعاتی در مکان و جایگاه خودش مورد استفاده قرار می گیرد و هر کدام کاربرد خود را دارد).

 

 

انواع بانک های اطلاعاتی NoSQL:

۱.بانک های اطلاعاتی سندی (Document Database)

    داده ها در سند هایی ذخیره سازی می شوند که فرمت JSON می باشد، در این نوع بانک های اطلاعاتی یک جفت کلید-مقدار(Key-Value) وجود دارد که مقدار به عنوان یک داده قابل بازیابی و کلید همان نشانگر منحصر به فرد سند ‌ذخیره می شود. اسناد واحد های مستقلی هستند که توزیع آنها را در چندین سرور همزمان با حفظ مکان داده آسان می کند و ما بدون هیچ مشکلی می توانیم روند کار را مشاهد کنیم .همچنین ناگفته نماند که بانک های اطلاعاتی برای ذخیره سازی و استفاده از داده های پراکنده و بی ساختار استفاده می شوند مانند : MongoDB, Elasticsearch

طراحی بانک های اطلاعاتی سندی

در این جا داده ها به صورت یک Collection از سند ها ذخیره می شوند(در بانک های اطلاعاتی رابطه ای نسبت به بانک های اطلاعاتی سندی جدول Collection و ردیف یا رکورد Document می باشد) برای مثال در یک وبلاگ اطلاعات مربوط به هر پست یا مقاله در یک Collection به شکل تو در تو ذخیره می شود، روش کاری جهت طراحی و ذخیره این نوع بانک ها به دو دسته تقسیم می شوند:

 

 

۱.۱. Embedding

در این روش اطلاعات زیر مجموعه ی سند اصلی (Sub-document) در همان مجموعه  اصلی ذخیره می شود، در نتیجه موجب بالا رفتن حجم سند اصلی می گردد. در تصویر زیر یک نمونه از ساختار این نوع طراحی را می توانید مشاهده کنید:

 

Embeddig Database Document

 

۲.۱.Referencing

در این روش اطلاعاتSub-documentدر مجموعه ی دیگر و کلید آنها در مجموعه  اصلی ذخیره می شود در نتیجه حجم اطلاعات مجموعه اصلی کاش یافته و کار با آن آسان می شود و پرس و جو ها سریعتر پاسخ داده می شوند.در تصویر زیر هم می توانید ساختار را مشاهد کنید :

Referencing Database Document

 

توصیه ای در مورد پایگاه های داده سندی

در طراحی پایگاه های داده برای ذخیره سازی اطلاعات، در ارتباط هایOn-to-Oneبهتر است از روشEmbeddingاستفاده شود و در ارتباط هایOne-to-ManyوMany-to-Manyدر صورتی که اطلاعات کمتر از ۱۶ مگابایت باشد ازEmbeddingو در غیر این صورت ازReferencingاستفاده کرد.

 

۲. پایگاه های داده کلید-مقدار) Key-Value Database )

در این نوع بانک های اطلاعاتی، کلید ها به صورت جدولHashذخیره می شوند تا بتوان آنها را سریعتر و ساده تر جستجو کنیم. این نوع پایگاه های داده دارای سرعت فراخوانی بسیار بالایی هستند کار با آنها بسیار ساده است. این پایگاه های داده کاربرد بسیار فراوانی را دارد برای مثال یکی از کاربرد های آن ذخیره سازیSession(جلسه) های کاربر (مانند ذخیره سازی اطلاعات کاربری در یک وب سایت)، ذخیره سازی داده ها به صورتCheche، ذخیره سازی سبد خرید در یک فروشگاه اینترنتی، لیست آخرین بازدید کننده ها، صف بندی و... است که می توان به آن اشاره کرد.

اما یکی از مشکلات این نوع بانک های اطلاعاتی عدم وجود ویژگیConsistency(سازگاری) در آن ها است. اگر بخواهیم داده هایی را ذخیره سازی کنیم که دارای ارتباطات مختلفی باشند، این نوع پایگاه داده کارایی خود را از دست می دهد. این نوع بانک های اطلاعاتی معمولا در زمانی که حجم اطلاعات کم و فراخوانی آنها زیاد باشد بهترین گزینه است و می توان پایگاه داده هایRedis, DynamoDBرا معرفی کرد.

Key-Value Databases

تصویر بالا نمونه ای از یک پایگاه داده ی کلید-مقدار است، ما توسطKeyمی توانیم خیلی سریع بهValueدسترسی پیدا کنیم.

 

توصیه ای در رابطه با بانک های اطلاعاتی کلید-مقدار

گرچه این نوع پایگاه های داده میتواند به عنوان پایگاه داده اصلی پروژه باشد ولی بهتر است که در لایهCache پروژه هایتان از آن بهره مند شوید.

 

 

۳. بانک های اطلاعاتی ستون گسترده (database Wide-Column Stores)

پایگاه های دادهWide-Columnاز لحاظ ظاهر مانند پایگاه های داده رابطه ای هستند اما با این تفاوت کهSchema مشخصی ندارند و هر ستون در رکورد های مختلف می تواند شامل داده هایی با ساختار و نوع متفاوت باشد. پایگاه های داده ستون گسترده برای زمانی که شما نیاز به ذخیره مقادیر زیادی دارید عالی است و می توانید الگو پرس و جو خود را پیش بینی کنید برای مثالCassandra, HBaseنمونه هایی از این نوع بانک های اطلاعاتی می باشند، در تصویر زیر نمونه ای از این نوع پایگاه داده را می توانید مشاهد کنید:

Wide-Column Stores Database

 

از جمله کاربرد های این نوع پایگاه داده، می توان به ذخیره سازیLogسنسور ها در اینترنت اشیا، اطلاعات جغرافیایی، سیستم گزارش گیری، اطلاعات سری زمانی، ثبت وقایعOnline، نرم افزار هایی با نرخ نوشتن بالا و... اشاره کرد.

شرکت های بزرگی که از این نوع پایگاه داده استفاده می کنند عبارتند از:

  • نمایش اطلاعات اضافی در مورد خواننده و آهنگ ها درSpotify
  • پیدا کردن دوستان در اطراف شخص درFacebook
  • ارائه بیش از ۱۹۰ میلیارد توصیه محتوای شخصی در هر ماه درOutbrain

 

   ۴. پایگاه های داده گراف (Graph Databases)

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

در این پایگاه داده هر موجودیت را یک گره و ارتباط آن را با گره دیگر یال در نظر می گیرد. زمانی که نیاز به جستجو سریع در میان داده های مرتبط با هم را دارید این نوع پایگاه داده انتخاب مناسبی می تواند باشد کهNeo4j,JanusGraphنمونه های از این پایگاه داده می باشند.

این هم نمونه از پایگاه های داده گراف:

nsql database

نتیجه گیری

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

تگ‌ها
اشتراک
2 نظرات
  • عکس پروفایل Amirhossein در سایت باگتو
  • |
  • ارسال شده توسط : Amirhossein
  • |
  • زمان : 1399/05/24

مفید و مختصر


  • عکس پروفایل amir در سایت باگتو
  • |
  • ارسال شده توسط : amir
  • |
  • زمان : 1399/05/24

مفید و کامل

ممنون



برای ارسال نظر باید وارد حساب کاربری خود شوید
ورود به حساب کاربری ثبت نام