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

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

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

اغلب پایگاه‌داده‌های گرافی به‌طور طبیعی زیرمجموعه‌ای از 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 (سرور مجازی) یا ابر . . . . سایت خود را منتقل کنید.

نام پایگاه داده ورژن License Language توضیحات
ArangoDB ۲٫۸٫۴ (مارس ۲۰۱۶) Apache 2 C, C++ & JavaScript A distributed multi-model document store and graph database. Highly scalable supporting ACID and full transaction support. Including a built-in graph explorer.
Blazegraph ۱٫۵٫۳ (سپتامبر ۲۰۱۵) GPLv2, evaluation license, or commercial license. Java A RDF/graph database capable of clustered deployment. Blazegraph supports high availability (HA) mode, embedded mode, single server mode. As of version 1.3.1, it supports the Blueprints API and Reification Done Right (RDR). Prior to version 1.5.0; formerly named Bigdata.
Bitsy ۱٫۵٫۰ AGPL, Enterprise license (unlimited use, annual/perpetual) Java A small, embeddable, durable in-memory graph database
BrightstarDB ۱٫۱۰٫۱ (مه ۲۰۱۵) MIT License [1] C# An embeddable NoSQL database for the .NET Framework with code-first data model generation.
Cayley ۰٫۴٫۱ (آوریل ۲۰۱۵) Apache 2 Go An open-source graph inspired by the graph database behind Freebase and Google's Knowledge Graph.
DEX/Sparksee[2] ۵٫۲.0 (2015) Evaluation, research or development use is free; commercial use is not free C++ A high-performance and scalable graph database management system from Sparsity Technologies. Its main characteristics is its query performance for the retrieval & exploration of large networks. Sparksee offers bindings for Java, C++, C#, Python and Objective-C. Sparksee 5 mobile is the first graph database for mobile devices.
Filament BSD Java A graph persistence framework and associated toolkits based on a navigational query style.
GraphBase 1.0.03a Proprietary Java A customizable, distributed, small-footprint graph store with a rich tool set from FactNexus.
graphd Proprietary The proprietary back-end of Freebase.
Graph Engine ۱٫۰ Office Store Standard Application License (Free) C++, C# A distributed, in-memory, large graph processing engine.
Grapholytic ۰٫۱ Proprietary A distributed GraphDB from MIOsoft.
Gun Zlib,Apache2,MIT Javascript A realtime, decentralized, offline-first, graph database engine.
Horton Proprietary C# A graph database from Microsoft Research Extreme Computing Group (XCG) based on the cloud programming infrastructure Orleans.
HyperGraphDB ۱.2 (2012) LGPL Java A graph database supporting generalized hypergraphs where edges can point to other edges.
IBM System G Native Store v1.0 (ژوئیه ۲۰۱۴) Proprietary C, C++,Java A high performance graph store using natively implemented graph data structures and primitives for achieving superior efficiency. IBM System G Native Store can handle various simple graphs, property graphs, and RDF graphs, in terms of storage, analytics, and visualization. Native Store is accessible from most programming languages by providing APIs in C++, Java (Tinkerpop/Blueprints), and Python. Its gShell graph command collection and the Native Store REST APIs provide language-free interfaces.
InfiniteGraph ۳٫۰ (ژانویه ۲۰۱۳) Proprietary Java A distributed and cloud-enabled commercial product with flexible licensing.
InfoGrid ۲٫۹.5 (2011) AGPLv3, free for small entities[3] Java A graph database with web front end and configurable storage engines (MySQL, PostgreSQL, Files, Hadoop).
JanusGraph 0.6.1 (ژانويه 2022) Apache 2 Java Open source, scalable, distributed across a multi-machine cluster graph database under The Linux Foundation; supports various storage backends (Apache Cassandra, Apache HBase, Google Cloud Bigtable, Oracle BerkeleyDB);[۱] supports global graph data analytics, reporting, and ETL through integration with big data platforms (Apache Spark, Apache Giraph, Apache Hadoop); supports geo, numeric range, and full-text search via external index storages (Elasticsearch, Apache Solr, Apache Lucene).[۲]
jCoreDB Graph An extensible database engine with a graph database subproject.
k-infinity ۴.0 (2015) Proprietary, free tryout version and demo scenarios A semantic graph database which is characterised by its graphical user interface and requires no knowledge of any query language. API is open and based on REST and JSON. Thus it can be easily embedded in existing architectures.
MarkLogic ۸٫۰.4 (2015) Proprietary, free developer version Java,JavaScript,XQuery Multi-model NoSQL database that stores documents (JSON and XML) and semantic graph data (RDF triples). MarkLogic also has a built-in search engine and a full-list of enterprise features such as ACID transactions, high availability and disaster recovery, certified security, and scalability and elasticity.
Neo4j ۲٫۳٫۲ (ژانویه ۲۰۱۶) GPLv3 Community Edition. Commercial & AGPLv3 options for enterprise and advanced editions Java A highly scalable open source graph database that supports ACID, has high-availability clustering for enterprise deployments, and comes with a web-based administration tool that includes full transaction support and visual node-link graph explorer. Neo4j is accessible from most programming languages using its built-inREST web API interface. Neo4j is the most popular graph database in use as of March 2016.[4]
OpenCog AGPL C++,Scheme,Python Includes a satisfiability modulo theories solver and a unified rule engine for performing both crisp (boolean) logic and probabilistic reasoning. Backed onto Postgres.
OntotextGraphDB ۶٫۶ GraphDB Free is free.

GraphDB Standard and GraphDB Enterprise are commercially licensed.

Java A graph database engine, based fully on Semantic Web standards from W3C: RDF, RDFS, OWL, SPARQL. GraphDB Free is a database engine for small projects. GraphDB Standard is robust standalone database engine. GraphDB Enterprise is a clustered version which offers horizontal scalability and failover support and other enterprise features.
Orly (مارس ۲۰۱۴) Apache 2 C++ A highly scalable open source graph database; accessible from most programming languages via its built-in REST web API interface.
OpenLinkVirtuoso ۷٫۱ (مارس ۲۰۱۴) GPLv2 for Open Source Edition.Proprietary for Enterprise Edition. C, C++ A hybrid database server handling RDF and other graph data, RDB/SQL data, XML data, filesystem documents/objects, and free text. May be deployed as a local embedded instance (as used in the NEPOMUK Semantic Desktop), a single-instance network server, or a shared-nothing elastic-cluster multiple-instance networked server.[5]
Oracle Spatial and Graph ۱۱.2 (2012) Proprietary Java, PL/SQL 1) RDF Semantic Graph: comprehensive W3C RDF graph management in Oracle Database with native reasoning and triple-level label security. 2) Network Data Model property graph: for physical/logical networks with persistent storage and a Java API for in-memory graph analytics.
Oracle NoSQL Database ۲٫۰٫۳9 (2013) Proprietary Java RDF Graph for Oracle NoSQL Database is a feature of Enterprise Edition providing W3C RDF graph capabilities in NoSQL Database.
OrientDB ۲٫۱٫۹ (ژانویه ۲۰۱۶) Community Edition isApache 2, Enterprise Edition is commercial Java OrientDB is an open source 2nd Generation Distributed Graph Database with the flexibility of Documents in one product (i.e. , it is both a graph database and a document nosql database at the same time.) It has an open source commercial friendly (Apache 2) license. It is a highly scalable graph database with full ACID support. It has a multi-master replication and sharding. Supports schema-less, schema-full and schema-mixed modes. Has a strong security profiling system based on user and roles. Supports a query language that is so similar to SQL which is friendly to those coming from a SQL and relational database background decreasing the learning curve needed. It has HTTP REST + JSON API.
OQGRAPH GPLv2 A graph computing engine for MySQL, MariaDB and Drizzle.
Profium Sense ۶٫۰ Proprietary Java Profium Sense is a contextual content management platform with a built-in triple store. Profium's own reasoning engine supports OWL 2 RL and RDFS and is optimized to manage continuous information streams that require continuous inferencing on-the-fly. Profium architecture is based on an in-memory database with ACID transaction support and supports distributed high-availability deployment.
R2DF R2DF framework for ranked path queries over weighted RDF graphs.
ROIS Freeware Modula-2 A programmable knowledge server that supports inheritance and transitivity. Used in OpenGALEN as a terminology server.
Semblent Lionsgate v1.0.3 (دسامبر ۲۰۱۴) Proprietary JavaScript A scalable, generic distributed database framework coupled with graph search able to efficiently maintain synchronisation persistently between server side and client side databases via a self-building API.
SPARQLCity v1.0.95 (اکتبر ۲۰۱۴) GPLv3 C, C++ &JavaScript SPARQLCity produces SPARQLVerse: A standards and Hadoop based analytic graph engine for performing rich business analytics on structured and semi-structured data.
Sqrrl Enterprise v1.5.1 (اوت ۲۰۱۴) Proprietary Java Distributed, real-time graph database featuring cell-level security and mass-scalability.
Stardog v3.1.5 (ژوئیه ۲۰۱۵) Proprietary Java Fast, scalable, pure Java semantic graph database.
Teradata Aster v6 (2013) Proprietary Java, SQL,Python,C++, R A high performance, multi-purpose, highly scalable and extensible MPP database incorporating patented engines supporting native SQL, MapReduce and Graph data storage and manipulation. An extensive set of analytical function libraries and data visualization capabilities are also provided.
Titan ۱٫۰ (سپتامبر ۲۰۱۵) Apache 2 Java A distributed, real-time, scalable transactional graph database developed by Aurelius.
TripleBit C, C++ A centralized RDF store.
VelocityGraph Open source with proprietary back-end C# High performance, scalable & flexible graph database build with VelocityDB object database.
VertexDB Revised BSD C A graph database server that supports automatic garbage collection.
VivaceGraph ۳٫۰ (دسامبر ۲۰۱۴) MIT License Common Lisp Pure Common Lisp graph database.
Weaver ۰٫۱ (دسامبر ۲۰۱۴) BSD licenses C, Python A fast, scalable, ACID transactional graph database with replication and migration.
WhiteDB ۰٫۷٫۰ (اکتبر ۲۰۱۳) GPLv3 and a free commercial licence C A graph/N-tuples shared memory database library.
OhmDB ۱٫۰٫۰ (اوت ۲۰۱۴) Apache 2 Java RDBMS + NoSQL Database for Java.
AllegroGraph ۵٫۱ (مه ۲۰۱۵) Proprietary. Clients:Eclipse Public License v1. C#, C,Common Lisp, Java,Python An RDF and graph database.

منابع[ویرایش]

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

جستارهای وابسته[ویرایش]

  1. "JanusGraph storage backends". Archived from the original on 2018-10-02. Retrieved 2018-10-01.
  2. "JanusGraph index storages". Archived from the original on 2018-10-02. Retrieved 2018-10-01.