علیرضا توکلی

دیتابیس گراف در SQL Server 2017

علیرضا توکلی senior web developer at tda.co

این محتوا بدون نظارت تیم سکان آکادمی تولید شده و صرفاً نظرات شخصی علیرضا توکلی می‌باشد.

توجه : مطلب زیر برداشتی از کتاب با عنوان Packt - SQLServer 2017 Developers Guide می باشد

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

اما ، دیتابیس های رابطه ای برای این چالش ها طراحی نشده اند. از این رو شرکت ها از راه حل های مبتنی بر دیتابیس های NoSQL استفاده می کنند که برای نیاز های داده ای جدید مناسب تر هستند.

دیتابیس های گراف متعلق به خانواده NoSQL هستند. چنین دیتابیس هایی در چند سال اخیر رواج یافته اند و برای ذخیره و استخراج داده های highly connected به کار می روند. در SQL Server 2017 قابلیت ایجاد دیتابیس های گراف ایجاد شده است که به آن SQL Graph می گویند.

این فصل به بخش های زیر تقسیم می شود :

1- مقدمه ای بر نظریه گراف و دیتابیس گراف

2- SQL Graph در SQL Server 2017

3- محدودیت های نسخه فعلی

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

در بخش دوم شما خواهید دید که چگونه SQL Server 2017 از دیتابیس گراف پشتیبانی می کند. شما خواهید آموخت که جدول های گره و لبه بسازید ، جداول گراف چه تفاوت هایی با جداول معمولی دارند و چه خصوصیت هایی دارند. برای مثال شما با دستور جدید Match آشنا خواهید شد. در انتهای بخش شما یک نمای کلی از توابع از پیش ساخته ای که برای کار با ستون های خودکار تولید شده در جدول گراف خواهید داشت.

در بخش سوم شما خواهید دید که چه قابلیت هایی هنوز در SQL Server 2017 نیستند و میتوانند در نسخه های آینده اضافه شوند.

مقدمه ای بر دیتابیس های گراف

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

شرکت ها به منظور به کار بردن مقیاس های بسیار بزرگی از داده های مختلف ، رو به استفاده از راه حل های مبتنی بر NoSQL آورده اند.آنها معمولا به یکی از چهار دسته زیر تعلق دارند :

· ذخیره بصورت کلید - مقدار (Key-Value) : ساده ترین و منعطف ترین نوع از دیتابیس NoSQL است. هر آیتم در پایگاه داده به صورت یک کلید در کنار مقدار ذخیره می شود. این نوع دیتابیس بسیار کارایی بالایی دارد ، به آسانی scale out می شود و در مبحث high availability بسیار خوب عمل می کند. از این نوع دیتابیس ها می توان به Redis ، Berkeley DB و Aerospike اشاره کرد.

· ذخیره بصورت سند (Document) : این نوع دیتابیس دارای ساختار داده ای پیچیده ای است. هر Document می تواند شامل چندین جفت بصورت کلید-مقدار (Key-Value) و کلید-آرایه (key-array) و یا چندین Document تو در تو باشد. از این نوع دیتابیس ها می توان به Micosoft Azure DocumentDB،MongoDB، ElasticSearch، و CouchDB اشاره کرد.

· ذخیره بصورت (Wide-column) :‌ این نوع دیتابیس به جای آنکه داده ها را بصورت ردیفی ذخیره کند،بصورت ستونی ذخیره می کند.این نوع را می توان به عنوان یک شیوه ذخیره دو بعدی کلید-مقدار(Key-Value) توصیف کرد. ستون های چندگانه قابل پیاده سازی است ولی شما می توانید ستون های مختلف را در هر ردیف داشته باشید. از این نوع دیتابیس ها می توان به Cassandra و HBase اشاره کرد.

· ذخیره بصورت گراف (Graph databases) : آنها پیچیده ترین سیستم های NoSQL هستند و هر هم موجودیت ها (Entity) و هم روابط (Relation) بین آنها را ذخیره می کند. از این نوع دیتابیس ها می توان به Neo4J Azure Cosmos DB ، OrientDB ، FlockDB و DSE Graph اشاره کرد

قبل از شروع با دیتابیس های گراف ، بیایید مقدمه بسیار خلاصه در نظریه گراف داشته باشیم :

گراف چیست؟

گراف هایی که در نظریه گراف به آنها اشاره می شود ، جزئی از ریاضیات گسسته هستند.

ساختار یک گراف شامل یک مجموعه از دو شی است :

1- گره ها (Nodes) یا راس ها (Vertics)

2- لبه ها (Edge) یا خطوط (Line) ، که هر خط متصل کننده دو گره به هم است.

تعریف ریاضیاتی گراف بصورت زیر (G = (V, E است. این به آن معناست که یک گراف، یک زوج مرتب از مجموعه محدودی از گره ها و مجموعه محدودی از لبه هاست.

اگر تمام لبه ها در یک گراف دو طرفه باشند ، به آن گراف بدون جهت (Undirected) گویند.

در مقابل ، گراف جهت دار (Digraph) قرار دارد. در گراف جهت دار ، لبه ها دارای مبدا و مقصد مشخص هستند و هر یک لبه ، یک مسیر را مشخص می کند.

گره ها و لبه ها می توانند نام (Name) و خواص(Property) داشته باشند. به چنین گراف هایی ، گراف خصوصیت (Property graph) می گویند. هم گره ها و هم لبه ها می توانند دارای نام باشند (برچسب(Label) برای گره ها و تایپ ها(Type) برای لبه ها ).

لبه های یک گراف می توانند یک عدد را به عنوان مشخصه به خود اختصاص دهند. چنین گرافی را گراف وزن دار می گویند ؛ مثلا طول جاده و..

همانطور که می بینید چهار گره نشان دهنده شهرها با فاصله های مشخص در بین آنها است. این می تواند برای پیدا کردن کوتاه ترین مسیر بین دو شهر مورد استفاده قرار گیرد .

در مقاله آینده به نحوه ساخت و استفاده از این قابلیت می پردازیم

ایدهٔ خود را در سکان‌پلاس بنویسید!

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
sirvanمن یک کاربر مهمان هستم
۱۳۹۷/۱۲/۰۸
👈در مقاله آینده به نحوه ساخت و استفاده از این قابلیت می پردازیم👉
منتظریم دادش
کاربر میهمان
یک عاشق مایکروسافتمن یک کاربر مهمان هستم
۱۳۹۷/۱۲/۰۸
سپاسگزارم
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
۱۳۹۷/۱۲/۰۷
سلام
یک سوال داشتم ممنون میشم پاسخ بدید
آیا دیتابس های گراف و دیتابیس های nosql رقیب هم هستند؟
اصلا تفاوتهاشون چیست و وقتی پای سرعت هست کدامیک بهتر عمل میکنه
کاربر میهمان
علی عسگری‌‌پورمن یک کاربر مهمان هستم
۱۳۹۷/۱۲/۰۷
خلاصه و مفید
🙏🙏🙏