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

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

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

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

ساختار (Structure)[ویرایش]

دیتابیس‌های گراف بر پایهٔ تئوری گراف‌ها (graph theory) شکل گرفته‌اند. دیتابیس‌های گراف شامل ' گره‌ها, خواص , یال‌ها ' (nodes, properties, edges) هستند.

در یک دیتابیس گراف

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

ویژگی‌های دیتابیس‌ گراف[ویرایش]

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

چرا از ذخیره‌سازی در دیتابیس استفاده می کنیم[ویرایش]

سئوال : Flat file vs database - speed ؟

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

Database ها ویژگی‌های زیر را عموما به همراه دارند

  • پایداری اطلاعات و مقیاس پذیری_ Stability and scalability ← دیتابیس‌ها برای هر وضعیتی ساخته شده‌اند و عموماً با رشد و مقیاس پذیری پروژه باگ یا خطایی تولید نمی‌کنند
  • قابلیت همزمانی_Synchronicity ← یک فایل متنی_text قابلیت نوشته شدن با چندین کاربر یا چندین process رو ندارد " پس برای مثال در یک سایت دو یا چند نفر نمی تونند همزمان یک کامنت بنویسند یا یک فرم را پر کنند "
  • قابلیت‌های کش قدرتند _caching capabilities ← که باعث صرف جویی در منابع و هزینه‌های سرور مورد نظر می شه و اکثر زمان‌ها دیتابیس دیتاهای مورد استفاده را در داخل RAM قرار می ده که سرعت عملکرد را بهینه تر و سریع تر می کند
  • قابلیت های Index متنوع و سرچ و جستجو مبتنی بر الگوریتم های ریاضی از جمله سرچ 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 2.8.4 (مارس ۲۰۱۶) 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 1.5.3 (سپتامبر ۲۰۱۵) 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 1.10.1 (مه ۲۰۱۵) MIT License [1] C# An embeddable NoSQL database for the .NET Framework with code-first data model generation.
Cayley 0.4.1 (آوریل ۲۰۱۵) 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 3.0 (ژانویه ۲۰۱۳) 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).
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 2.3.2 (ژانویه ۲۰۱۶) 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 7.1 (مارس ۲۰۱۴) 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 2.1.9 (ژانویه ۲۰۱۶) 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 1.0 (سپتامبر ۲۰۱۵) 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 3.0 (دسامبر ۲۰۱۴) MIT License Common Lisp Pure Common Lisp graph database.
Weaver 0.1 (دسامبر ۲۰۱۴) BSD licenses C, Python A fast, scalable, ACID transactional graph database with replication and migration.
WhiteDB 0.7.0 (اکتبر ۲۰۱۳) GPLv3 and a free commercial licence C A graph/N-tuples shared memory database library.
OhmDB 1.0.0 (اوت ۲۰۱۴) Apache 2 Java RDBMS + NoSQL Database for Java.
AllegroGraph 5.1 (مه ۲۰۱۵) Proprietary. Clients:Eclipse Public License v1. C#, C,Common Lisp, Java,Python An RDF and graph database.

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

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

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