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 را مورد بررسی قرار دادیم. این نوع پایگاه های داده بسیار ساده بوده و مناسب برای ذخیره سازی اطلاعات غیر ساختار یافته توزیع شده است شما اکنون می توانید بنا بر هدفی که در ذهن دارید یکی از آن ها را انتخاب کرده و شروع به یادگیری آن کنید. همچنین با انواع این نوع بانک ها آشنا شده و درک بهتر نسبت به عملکرد آن دارید.

    اطلاعات نویسنده
    • نویسنده: علی حجتی

    ارسال دیدگاه

    برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربری‌تان شوید


    دیدگاه کاربران

    avatar
    Amirhossein
    1399/05/24

    مفید و مختصر


    avatar
    amir
    1399/05/24

    مفید و کامل

    ممنون