دوشنبه , 9 دسامبر 2019
معماری
سرخط خبرها

دیتابیس های NoSQL و انواع آن

دیتابیس های NoSQL

سلام

دیتابیس ها در حال حاضر به ۲ دسته RDBMS ها و NoSQL تا دسته بندی می شوند.

RDBMS ها دیتابیس های دارای رابطه یا Relation هستند که از قدیم با آن ها کار می کردیم. مثل MySQL, Oracle, Postgresql, MSsql.

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

قبل از توضیح دادن NoSQL نیاز هست ۲ مطلب گفته شود. ۱. ACID و ۲. CAP Theorem 

ACID

یک تراکنش یا Transaction در دنیای دیتابیس ها دارای ویژگی های خاصی هستند. 

فرض کنید یک تراکنش بانکی قرار است انجام شود. درخواست ابتدا ثبت می شود. موجودی بررسی شده و کارت مقصد اعتبارسنجی می شود. سپس پول از یک بانک به بانک دیگر انتقال پیدا می کند. در لحظه موجودی در تمام نقاط کشور آنلاین و آپدیت نشان داده میشود. بعد از انتقال اطلاعات در سیستم ثبت شده و شما می توانید مشاهده کنید. در همین حال هنگام انتقال وجه شما می توانید دریافت وجه هم داشته باشید.
نکته:‌ اگر به هر دلیلی وجه در مقصد ثبت نشد، وجه بعد از چند دقیقه به حساب شما برگشت می خورد و موجودی حساب شما افزایش پیدا می کند.

ACID مخفف سه کلمه Atomicity، Consistency، Isolation و Durability می باشد که به شرح تک تک این خاصیت های میپردازیم.

acid

Atomicity: این خاصیت که به خاصیت همه یا هیچ معروف است، می گوید که یک تراکنش یا باید به طور کامل اجرا شود یا خیر. برای مثال اگر در یک تراکنش(Transaction) شما سه عملیات مختلف انجام می دهید، یا هر سه از این عملیات باید تا پایان تراکنش انجام شوند یا هیچ کدام انجام نمی شوند. مثالی که در درس گذشته درباره بانک بیان کردیم را به خاطر بیاورید. اگر UPDATE اول انجام شد، حتما باید UPDATE دوم نیز انجام شود، چون این دو UPDATE در یک تراکنش هستند. اگر برای مثال بعد از UPDATE اول از حساب کاربری A، مشکلی در سیستم به وجود آمد(مثلا برق قطع شد)، سیستم باید بعد از اتصال دوباره، عملیات UPDATE اول را بازگردانی(Rollback) نماید. به این ترتیب هیچ کدام از دو UPDATE صورت نگرفته است.

Consistency: برای درک درست مفهوم consistency یا همان سازگاری به همان مثال تراکنش های بانک در درس قبل بازمیگردیم. همان طور که میدانید، در یک سیستم حسابداری بانک، مجموعه پول های انتقالی بین بانک باید ثابت باشد. در نظر بگیرید که مثلا اگر ۵۰هزار تومان از حساب کاربری A به حساب کاربری B منتقل شد، مجموعه پول های موجود در بانک تغییر نخواهد کرد. این همان مفهوم سازگاری است. یعنی یک تراکنش، پایگاه داده را از یک حالت سازگار به یک حالت سازگار دیگر انتقال می دهد. البته ممکن است این سازگاری در بین تراکنش(وقتی هنوز تراکنش تمام نشده است) نقض شود. در همان مثال قبل، حتما میدانید که بعد از کم شدن ۵۰هزار تومان از حساب کاربری A در پایگاه داده( وقبل از واریز به حساب کاربری B)، در یک لحظه، consistency نقض می شود، ولی اشکالی ندارد، زیرا در پایان تراکنش همه چیز به حالت سازگار بازمیگردد.

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

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


CAP Theorem‌ (تئوری CAP)

در علوم نظری رایانه، تئوری سی‌ای‌پی (انگلیسی: CAP theorem) بیان می‌کند که برای یک سامانهٔ رایانه‌ای توزیع‌شده امکان‌پذیر نیست که هر سهٔ این موارد را همزمان فراهم کند:

  • سازگاری (Consistency) (همهٔ گره‌ها دادهٔ مشابهی در یک زمان ببینند)
  • دردسترس بودن (Availability) (همه درخواست‌ها در مورد موفقیت آمیز یا ناموفق بودن عملیات جوابی دریافت کنند)
  • تحمل تقسیم داده‌ها (Partition tolerance) (سامانه به کار خودش ادامه دهد حتی در صورت پیش‌آمدن شکست شبکه‌ای)
cap theorem

در NoSQL ها ما ساختار های متفاوتی داریم، نیاز های متفاوتی داریم. آیا نیاز هست در یک شبکه اجتماعی کاربری که در ایران نشسته و کاربری که در هند نشسته در لحظه یک تعداد لایک مساوی ببیند؟ آیا امکان ندارد برابری بعد از 10 ثانیه رخ دهد؟

لذا در برخی مواقع ما Consistency را فدای Availability یا Partition Tolerance می کنیم.

انواع NoSQL ها

  • Key-value stores (کلید و مقدار):‌

در اینگونه دیتابیس ها از یک کلید (Key) که نقش شناسه هر داده را بازی میکند به منظور دریافت و ذخیره سازی داده (Value)استفاده میشود. این دسته به علت سادگی کارکرد پر استفاده ترین نوع دیتابیس های NoSQL میباشد.
مثل:‌Redis, Memcached

  • دیتابیس های NoSQL اسناد (Document NoSQL):

اینگونه دیتابیس ها به منظور ذخیره سازی و کار با اسنادی با فرمت های XML, JSON , … به کار میروند. از دیتابیس های اسنادی NoSQL به منظور ذخیره سازی داده های بدون ساختار مشخص با پراکندگی بالا استفاده میشود.
مثل:‌MongoDB, Couchbase, Amazon DynamoDB

  • دیتابیس های NoSQL چند ستونه (Wide-column NoSQL):

دیتابیس های چند ستونه در نگاه اول همانند دیتابیس های SQL از جدول و ستون و سطر استفاده میکنند. اما عملکرد آن های ارتباطی به جداول SQL ندارد! فقط ظاهر جداول آن ها تا حدی شبیه ساختار جداول SQL میباشد. بر خلاف SQL هر ستون میتواند شامل داده هایی با فرمت و ساختار متفاوت باشد. به عبارتی دیگر نوع تعریف و فرمت یک ستون میتواند در هر سطر متفاوت باشد. این دیتابیس ها انعطاف بسیار بالایی در ثبت و کار با داده های بسیار عظیم و متفاوت دارند.
مثل:‌HBase, Cassandra

  • دیتابیس های NoSQL گرافی (Graph NoSQL):

دیتابیس های گرافی به منظور ذخیره سازی حجم زیادی از داده های ارتباطی (Relational data) طراحی شده اند. به زبان ساده میتوان اینگونه دیتابیس ها را مانند گرافی شامل “داده ها -> راس ها” و “ارتباط ها -> یال ها” در یک گراف هندسی در نظر گرفت. از این دسته دیتابیس ها در ذخیره سازی انواع معماری های داده های شبکه ای نیز استفاده میشود.
مثل:‌Neo4j

graph

منابع:
https://chistio.ir/%D8%AE%D8%A7%D8%B5%DB%8C%D8%AA-acid-%D8%AF%D8%B1-%DB%8C%DA%A9-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87/
http://www.shayankm.ir/13936/nosql.html
https://en.wikipedia.org/wiki/CAP_theorem
https://db-engines.com/en/ranking


1000 - 100%

100%

User Rating: 4.93 ( 4 votes)

درباره ی امیرحسین

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

11 − = 3

قالب وردپرس