پایگاه داده‌های گراف

بندانگشتی|355x355px|پایگاه‌داده‌ی گراف از گره‌ها و یال‌ها و ویژگی‌های گراف برای ذخیره اطلاعات استفاده می‌کند.
در علم محاسبات یک پایگاه داده گراف، پایگاه داده‌ای است که از ساختار گراف‌ها برای پرس‌وجوهای معنایی، نمایش و ذخیره داده‌ها استفاده می‌کند و از گره‌ها،‌ یال‌ها و ویژگی‌های آنها تشکیل شده است.

اغلب پایگاه‌داده‌های گرافی به‌طور طبیعی زیرمجموعه‌ای از NoSql محسوب می‌شوند و اطلاعاتشان را به صورت key-value یا پایگاه داده سند محور (document-oriented database) ذخیره می‌کنند.

در شرایط کلی آن‌ها می‌توانند به عنوان پایگاه داده key-value با بهره‌گیری از مفهوم روابط پذیری (relationship) در نظر گرفته شوند. روابط در ذخیره‌سازی داده‌ها به valuesها اجازه می‌دهند به صورت آزاد به یکدیگر مرتبط باشند؛ و برعکس پایگاه‌داده‌های سنتی که روابط در داخل خود داده‌ها تعریف می‌شد، عمل کنند. این روابط اجازه می‌دهند سلسله مراتب‌های پیچیده به سرعت طی شود و در نتیجه سرعت دسترسی و بهینگی سیستم افزایش می‌یابد. این نوع فرایند ذخیره‌سازی پیچیده در پایگاه گرافی یکی از مشکلات عمومی عملکرد که در ذخیره‌سازی سنتی key-value صورت می‌گرفت را به نوعی حل کرده‌است. اکثر پایگاه‌های گرافی همچنین مفهوم tags یا properties را نیز به مقوله پایگاه داده اضافه کردند که در آن اساساً روابط فاقد یک اشاره‌گر به پرونده‌های دیگر هستند.

## ساختار
پایگاه‌های گراف بر پایهٔ نظریه گراف‌ها شکل گرفته‌اند. پایگاه‌های گراف شامل ' گره‌ها، ویژگی‌ها، یال‌ها '  هستند.

در یک پایگاه داده گراف
* گره‌ها ← نشان دهنده وجودهایی از قبیل مردم، کسب و کار، حساب‌های کاربری یا هر آیتم دیگری که شخص سازنده پایگاه داده ممکن هست برای پیگیری در پایگاه داده نیاز داشته باشد هستند.
* خواص یا ویژگی‌ها ← مربوط به اطلاعاتی هستند که به نودها "یا همون گره‌ها " مربوط است. برای مثال اگر Wikipedia یکی از نودها باشه از خواص گره خورده به اون می‌شه به website , مراجع، یا حتی w که شروع کنندهٔ کلمه Wikipedia هست. در کل خواص بسته به اینکه کدام جنبه‌های Wikipedia برای پایگاه داده مد نظر هست می‌تونه متفاوت باشه.
* یال‌ها ← خطوطی هستند که برای اتصال گره‌ها به یکدیگر یا به ویژگی‌های مرتبطشان (Properties) استفاده می‌شوند و به‌طور کلی یال‌ها وظیفه نمایش روابط را در پایگاه داده بر عهده دارند. همچنین بسیاری از اطلاعات مهم در یال‌ها ذخیره می‌شوند. الگوهای معنادار زمانی پدیدار می‌شوند که بررسی اتصالات و ارتباطات از گره‌ها، ویژگی‌ها، و یال‌ها صورت می‌گیرد.

## ویژگی‌های پایگاه داده گراف
در مقایسه با پایگاه‌داده‌های سنتی (SQL) پایگاه‌های گرافی اغلب در مجموعه داده‌های نسبتاً مرتبط یا داده‌هایی با ارتباطات زیاد سریع‌تر و بهینه‌تر عمل می‌کنند؛ و نگاشت مستقیم‌تری را به ساختار appهای شی گرا دارند. پایگاه‌داده‌های گراف از آنجایی که مانند SQLها به‌طور معمول به عملیات پرهزینه الحاق (join) نیاز ندارند به صورت طبیعی تری مقیاس پذیری را به مجموعه‌های داده‌های بزرگتر پیدا می‌کنند؛ و از آنجایی که آن‌ها وابستگی کمتری به ساختار خشک پایگاه‌داده‌های سنتی دارند برای مدیریت موقت و تغییر داده‌ها به خاط طرح‌های توسعهٔ تدریجی 'دلخواه' مناسب‌تر هستند. در مقابل پایگاه‌داده‌های رابطه‌ای سنتی برای انجام عملیات‌های مشابه بر روی تعداد زیادی از عناصر سریع‌تر هستند.

با توجه به آنچه که گفته شد. اگر قرار باشد عملیات مشابهی را بر روی تعداد عناصر مشخص انجام بدهید (مانند سایت‌هایی با پست‌های منظم و مطالب منظم)‌ بهتر است از پایگاه‌داده‌های سنتی SQL استفاده کنید ولی برای شرکت‌هایی که با داده‌های وسیع و مرتبط کار می‌کنند مثل (google , facebook , twitter , bing , . . .) و کارهای تحقیقاتی یا appهایی که به سرعت بیشتری در خواندن داده‌های وسیع نیاز دارند بهتر است از پایگاه‌داده‌های noSQL استفاده کنید. همچنین پایگاه‌داده‌های گراف قابلیت بهینه‌سازی بیشتری رو در نشان دادن داده‌های وسیع دارند. پایگاه‌داده‌های گراف ابزار قدرتمندی برای پرس‌وجوهایی به شکل گراف هستند؛ که برای مثال می‌توان به محاسبهٔ کوتاه‌ترین فاصله میان دو گره اشاره کرد؛ که بر اساس شمارش یال‌های مرتبط میان دو گره مد نظر بدست می آید. کوئری‌های به شکل گراف (graph-like queries) می‌تواند در یک پایگاه‌داده گراف در شکل طبیعی‌تری انجام بشوند. (برای مثال گراف محاسبات قطر یا تشخیص یک جامعه)

## چرا از ذخیره‌سازی در پایگاه داده استفاده می‌کنیم؟
سئوال : Flat file vs database - speed  ؟

اگر تازه وارد عرصه داده‌ها شده باشید حتماً این سؤال به ذهنتان خطور می‌کند که چرا باید اصلاً از یک پایگاه داده استفاده کنید به جای اینکه خودتان داده‌ها را آنطور که به نظرتان می‌آید برای پروژه مورد نظر بهتر و سریع تر است، ذخیره و بازیابی کنید؟

پایگاه داده‌ها ویژگی‌های زیر را عموماً به همراه دارند.
* پایداری اطلاعات و مقیاس‌پذیری  Stability and scalability ← پایگاه داده‌ها برای هر وضعیتی ساخته شده‌اند و عموماً با رشد و مقیاس پذیری پروژه باگ یا خطایی تولید نمی‌کنند
* قابلیت همزمانی ← یک فایل متنی، قابلیت نوشته شدن توسط چندین کاربر یا چندین پردازش را ندارد، پس برای مثال در یک سایت دو یا چند نفر نمی تونند همزمان یک کامنت بنویسند یا یک فرم را پر کنند.
* قابلیت‌های کش قدرتند _caching capabilities ← که باعث صرفه‌جویی در منابع و هزینه‌های سرور مورد نظر می‌شود و اکثر زمان‌ها پایگاه داده، داده‌های مورد استفاده را در داخل RAM قرار می‌دهد که سرعت عملکرد را بهینه‌تر و سریع‌تر می‌کند.
* قابلیت‌های نمایه‌سازی متنوع و جستجوی مبتنی بر الگوریتم‌های ریاضی از جمله سرچ full text search , . . . .
* امنیت اطلاعات ← عموماً در پایگاه‌داده‌ها، داده‌ها رو به صورت رمزگذاری شده در خود نگه می‌دارند که باعث امنیت اطلاعات در سرورها یا سرویس‌های اشتراکی می‌شود.
* پشتیبایی سازنده پایگاه داده ← در صورت ایجاد مشکل در داده‌ها می‌توانید روی پشتیبانی حساب کنید.
* بهینه‌تر بودن و عملکرد بالاتر ← مسلماً شرکت‌هایی که که به‌طور انحصاری بر روی ساخت پایگاه داده کار می‌کنند تجربهٔ بیشتری را برای ساخت پایگاه‌داده‌های منعطف‌تر و بهینه‌تر دارند.

## قضیه پایگاه داده‌ها
در سال‌های اخیر تقاضای بالایی برای پایگاه‌های داده توزیع‌شده با تحمل پارتیشن بالا وجود داشته‌است. اما بر طبق نظریه CAP theorem برای یک سامانه توزیع‌شده (distributed system) غیرممکن است که به‌طور همزمان بتواند سه مقوله زیر را تضمین کند:
* consistency (ثبات اطلاعات)
* availability (دسترسی اطلاعات)
* partition tolerance guarantees (تضمین تحمل پارتیشن)
یک سیستم توزیع شده همیشه توانایی انجام دو مورد موارد بالا را خواهد داشت و سه مورد با هم در یک زمان غیرممکن است با اینحال برای این منظور پایگاه‌داده‌های NoSQ با بهره‌گیری از چیزی که به آن قوام نهایی (eventual consistency) می‌گویند هر دو مورد availability و partition tolerance guarantees را با کاهش سطح ثبات داده (data consistency) فراهم می‌کنند.

NewSQLها کلاس مدرن پایگاه‌داده‌های رابطه‌ای (relational databases) هستند که با هدف فراهم آوردن کارایی NoSQLها در مقیاس‌پذیری داده‌ها، در پردازش تراکنش‌های انلاین (read-write) با حجم بالا در حالی که از SQL و حفظ تضمین ACID پایگاه‌داده‌هایی سنتی برخوردارند به وجود آمده‌اند. از این دسته از پایگاه داده‌ها می‌شود به مواردی از قبیل ScaleBase, Clustrix, EnterpriseDB, MemSQL, NuoDB و VoltDB اشاره کرد.

## فهرست پایگاه‌های گراف موجود
هر پایگاه داده در زیر جهت استفاده چند زبان را مورد پشیبانی قرار داده است و با رفتن به سایت هر کدام می‌توانید راهنمایی اتصال پایگاه داده مورد نظر را به زبان مورد نظری که به آن تسلط دارید، دنبال کنید. «برای فهرست کامل‌تر به ویکی‌پدیای انگلیسی پایگاه داده گراف مراجعه کنید»

برای مثال پایگاه داده Neo4j قابلیت استفاده در زبان‌های (Java , .NET , Python , Ruby , PHP , JavaScript) را دارا می‌باشد. البته باید مدنظر داشت که در صورتی که از هاست‌های Cpanel استفاده می‌کنید در حال حاضر نمی‌توانید از پایگاه داده گراف استفاده کنید و باید به سیستم آزادتری مثل یک Server یا VPS (سرور مجازی) یا ابر . . . . سایت خود را منتقل کنید.

## منابع

* ویکی‌پدیای انگلیسی↑
* وبسایت neo4j↑

## جستارهای وابسته
* پایگاه داده‌ها (DataBase)
** SQL
** NoSQL
** newSQL

رده:پایگاه‌های داده‌های گراف
رده:مدل‌های انتزاعی پایگاه داده‌ها