SQL vs. NoSQL vs. NewSQL
انتخاب یک DBMS (Database Management System) مناسب به نیازهای سازمان بستگی دارد. در این مقاله تفاوت های SQL، NoSQL و NewSQL را با هم مرور می کنیم.
چشم انداز DBMS ها همواره در حال تکامل و گسترش می باشد تا بتوانند با الزامات متنوع و در حال تغییر برای پردازش تراکنش ها، دسترسی به دیتا و اپلیکیشن های big data منطبق باشند. یکی از تفاوت های DBMS ها در قابلیت های SQL آن هاست. به طور کلی، ما میتوانیم بیشتر محصولات DBMS های مدرن را در سه گروه زیر طبقه بندی کنیم:
- SQL
- NoSQL
- NewSQL
اما هر کدام از این کلمات می توانند شامل مفاهیم متعددی شوند.
SQL و دیتابیس های رابطه ای (Relational Database):
SQL یا Structured Query Language زبان استاندارد ارتباط با یک Relational DBMS(RDBMS) می باشد. در یک RDBMS، دیتا به صورت رکوردها و ستون ها، با استفاده از یک schema ی تعریف شده دیده می شود. به این معنی که هر رکورد همان ستون ها و datatype هایی را دارد که برای سایر رکوردها در جدول نیز تعریف شده است.
هر رکورد در یک RDBMS یک کلید انحصاری دارد که با آن در جدول شناسایی می شود. ارتباط (Relation) بین جداول به وسیله ی مقادیر ستون ها تعریف می شود. به عنوان مثال جدول محصولات و جدول سفارشات به وسیله ی ستون شماره محصول به هم مرتبط می شوند که در هر دو جدول باید وجود داشته باشد.
به علاوه، سیستم های دیتابیسی SQL با تضمین تراکنش ها به وسیله ی پشتیبانی از خاصیت ACID شناخته شده اند. به طور کلی، یک DBMS با خاصیت ACID به این معناست که در زمان دسترسی و تغییر همزمان یک دیتا، ثبات دیتا به طور سختگیرانه ای حفظ می شود.
جهت مطالعه ی مفهوم A.C.I.D. در پایگاه داده، بر روی این لینک کلیک کنید.
مزایا و معایب سیستم های دیتابیسی SQL:
مزایا:
- سیستم های دیتابیسی SQL فراگیر هستند و برای عموم الزامات ذخیره، مدیریت و دسترسی دیتا مناسب هستند.
- همه ی دسترسی ها به دیتا توسط یک زبان استاندارد واحد صورت می گیرد.
- SQL می تواند در بین محصولات DBMS مختلف، با کمترین تغییرات منتقل شود.
- سیستم های دیتابیسی SQL نزدیک به ۴۰ سال سابقه ی موفق دارند و تعداد کاربران زیادی برای این سیستم ها وجود دارد. در نتیجه پیدا کردن افراد متخصص و توانمند برای توسعه و مدیریت این دیتابیس ها آسان تر می باشد.
معایب:
- دیتابیس های رابطه ای به یک schema مشخص نیاز دارند که باعث می شود گاهی نتوانند با توسعه های مدرن کار کنند.
- به دلیل داشتن خاصیت ACID، دیتابیس های SQL نمی توانند به صورت افقی افزایش مقیاس داشته باشند و تنها می توانند با افزایش CPU و مموری به صورت عمودی مقیاس پذیری بیشتری داشته باشند.
مثال هایی از سیستم های دیتابیسی SQL:
- IBM Db2
- Oracle Database
- Microsoft SQL Server
- MySQL
NoSQL:
با رشد حجم دیتا در چند دهه ی اخیر، دیتابیس های SQL با مشکلاتی در خصوص الزامات Big data (دیتای حجم بالا) مواجه شده اند. استفاده از سیستم های دیتابیسی NoSQL یا Not Only SQL برای پشتیبانی از این موارد افزایش یافته است. به عنوان مثال جهت:
- مدیریت پروفایل
- مدیریت محتوا
- برنامه های موبایل
- کاربرد Real-Time دیتای ساختاربندی شده و غیر ساختاربندی شده
- مدیریت Social Media
NoSQL غیر رابطه ای، توزیعی، منعطف و مقیاس پذیر است. بسیاری از سیستم های دیتابیسی NoSQL به صورت open source می باشند. به علاوه بعضی از امکانات رایج NoSQL شامل کلاستر کردن دیتا، عدم وجود یک schema مشخص و پشتیبانی از Replication (تکثیر یکسان دیتا) می شود که در تضاد با خاصیت ACID در سیستم های دیتابیسی SQL می باشند.
تفاوت بزرگ دیگر NoSQL و رابطه ای/SQL این است که سیستم های NoSQL برای دسترسی به دیتا الزام به استفاده از SQL ندارند. هرچند که بسیاری از دیتابیس های NoSQL پشتیبانی از SQL را به خدمات خود اضافه کرده اند.
در حالیکه سیستم های دیتابیسی SQL یک schema مشخص و تعریف شده نیاز دارند، بیشتر دیتابیس های NoSQL دارای schema های منعطف هستند که در آن ها نیاز نیست هر رکورد یک جدول تعریف و خصوصیات مشابه بقیه ی رکوردها را داشته باشد. همچنان که ساختارهای داده ای می توانند در طول زمان تکامل یابند، یک سیستم دیتابیسی NoSQL نیز می تواند بسیار کاربردی تر از یک سیستم دیتابیسی رابطه ای / SQL باشد..
هیچ قانون قطعی وجود ندارد که نشان دهد چگونه دیتابیس های NoSQL دیتا را ذخیره می کنند. در واقع چندین نوع پلتفرم DBMS در گروه NoSQL وجود دارد که میتوانند به طور جامع توصیفگر ۴ نوع مختلف سیستم های دیتابیسی باشند:
- Key-Value: این دیتابیس ها جفت هایی از unique key ها و مقادیر مربوط به آنها را ذخیره می کنند.
- Document: این دیتابیس ها دیتا را در یک ساختارِ Document مانند ذخیره می کنند که در فرمت هایی مثل JSON و XML رمزگذاری شده اند.
- Wide-column: دیتابیس هایی هستند که دیتا را در جداولی که شامل تعداد خیلی زیادی از ستون ها (با schema منعطف) ذخیره می کنند.
- Graph: این دیتابیس ها دیتا را به صورت گراف یا نمودارهایی ذخیره می کنند تا ارتباط بین عناصر داده ای متفاوت را نشان دهند.
هر کدام از این سیستم های دیتابیسی NoSQL برای استفاده در موارد مختص خودشان بهترین انتخاب می باشند و مزایا و معایب خود را دارند.
مزایا و معایب سیستم های دیتابیسی NoSQL:
مزایا:
- سیستم های دیتابیسی NoSQL توسعه ی (development) بعضی از اپلیکیشن ها را ساده تر می کنند، مانند اپلیکیشن های تعاملی Real-time تحت وب.
- داده های نرمال سازی نشده نیازمند یک مدل داده ای منعطف می باشند و یا خصوصیات متفاوتی برای دیتاهای متفاوت دارند و سیستم های دیتابیسی NoSQL، این انعطاف پذیری برای دیتا را پشتیبانی می کنند.
- سیستم های دیتابیسی NoSQL برای دیتاست های بزرگتر مانند دیتاست های رایج در اپلیکیشن های هوش مصنوعی و آنالیزی مقیاس پذیری بالایی را ارائه می دهد.
- NoSQL برای سرویس های ابری، موبایل، social media و داده های حجم بالا بیشتر مناسب می باشد.
معایب:
- هر دیتابیس NoSQL برای query زدن و مدیریت دیتا سینتکس مخصوص خودش را دارد. این موضوع با SQL در تضاد است که زبان استاندارد همه ی سیستم های دیتابیسی SQL است.
- عدم وجود یک schema و constraint مشخص برای دیتابیس باعث از بین رفتن امنیت یکپارچگی دیتا می شود که در سیستم های دیتابیسی SQL وجود دارد.
- یک schema با هر مدل ساختاری برای استفاده از دیتا مورد نیاز می باشد. در NoSQL، این مورد باید به جای Database administrator توسط Application developer فراهم شود.
- از آنجایی که NoSQL جدیدتر می باشد، بر عکس SQL هیچ استاندارد جامعی در صنعت برای این دیتابیس ها وجود ندارد. علاوه بر این، پیدا کردن افراد حرفه ای و توانمند دراین زمینه سخت تر می باشد.
مثال هایی از سیستم های دیتابیسی NoSQL:
- MangoDB (document database)
- Redis (key-value database)
- Cassandra (wide-dolumn database)
- Neo4j (graph database)
NewSQL:
نوع دیگر سیستم های دیتابیسی NewSQL می باشد که یک مدل مدرن از سیستم های دیتابیسی رابطه ای/SQL می باشد که همان عملکرد مقیاس پذیری سیستم های NoSQL را برای workload های آنلاین فراهم می کند و همچنین خاصیت ACID را نیز پشتیبانی می کنند که ثبات و یکپارچگی دیتا نیز حفظ شود.
به طور کلی، یک سیستم دیتابیسی NewSQL به عنوان یک سیستم رابطه ای/SQL با یک معماری توزیعی و منعطف طراحی شده است. سایر امکانات NewSQL شامل قابلیت های in-memory و خدمات دیتابیس های کلاستری با قابلیت بارگزاری در سرویس های ابری می باشد. بسیاری از سیستم های دیتابیسی NewSQL امکانات و اجزاء کمتری نسبت به سیستم های رابطه ای دارند، در نتیجه درک و پشتیبانی آن ها ساده تر می باشد.
کاربرد کلی NewSQL پشتیبانی سیستم های enterprise می باشد که باید حجم زیادی از دیتا را پردازش کنند در حالیکه ثبات و یکپارچگی تراکنش ها حفظ شود.
سیستم های دیتابیسی NewSQL چندین رویکرد مختلف جهت به دست آوردن مقیاس پذیری بالاتر با خاصیت ACID را در پیش گرفته اند.
بسیاری از سیستم های دیتابیسی NewSQL بر پایه ی معماری های جدید و مدرن ساخته شده اند که در ۱۹۷۰ که سیستم های SQL سنتی توسعه یافتند در دسترس نبوده اند. برای مثال خیلی از خدمات NewSQL یک کلاستر از node هایی که هیچ تشابهی با هم ندارند را ارائه می دهد که هر کدام زیرمجموعه ای از دیتا را با کنترل همزمانی و پردازش query مدیریت می کنند که باعث ایجاد تعادل در workload می شود.
رویکرد دیگر NewSQL به اشتراک گذاری دیتا به صورت transparent بین چندین node با استفاده از یک الگوریتم توافقی می باشد. و بیشتر سیستم های دیتابیسی NewSQL، از SQL engine های ارتقاء یافته برای ذخیره و بهینه سازی دیتا استفاده می نمایند.
مزایا و معایب سیستم های دیتابیسی NewSQL:
مزایا:
- NewSQL برای اپلیکیشن هایی که تعداد زیادی تراکنش های کوتاه دارند که به طور مداوم نیاز به دسترسی به تعداد کمی دیتای ایندکس شده دارند خوب کار می کند.
- NewSQL از زبان SQL استفاده می کند که رایج ترین زبان دسترسی به دیتا می باشد و در نتیجه برای برنامه نویسان و developer ها آشنا می باشد.
- NewSQL از خاصیت ACID پشتیبانی می کند، بنابراین یکپارچگی دیتای بهتری نسبت به بیشتر NoSQLها دارد.
- NewSQL می تواند باعث کاهش پیچیدگی برای اپلیکیشن هایی شود که به همه ی امکانات SQL سنتی نیاز ندارند.
معایب:
- NewSQL امکانات کمتری نسبت به SQL سنتی دارد، بنابراین NewSQL برای اهداف عمومی دیتابیسی به اندازه ی SQL قابلیت ندارد.
- در مقایسه با SQL، در سیستم های دیتابیسی NewSQL، ابزارهای کافی جهت پشتیبانی از توسعه و مدیریت دیتابیس وجود ندارد.
- تعداد کمتری نیروی متخصص و توانمند جهت کار با تکنولوژی جدید NewSQL وجود دارد.
مثال هایی از سیستم های دیتابیسی NewSQL:
- CockroachDB
- VoltDB
- NuoDB
- SingleStore
- Clustrix
مقاله ی انگلیسی این مطلب، توسط Craig Mullins را می توانید در این صفحه مطالعه نمایید.