Graph database

**Graph database** (Basis data graf) dalam dunia ilmu komputer adalah basis data yang menggunakan struktur data graf yg memiliki komponen simpel (*node*), tepi (*edge*) dan atribut (*properties*) untuk merepresentasikan penyimpanan data. Basis data graf menyediaakan *index-free adjacency*, konsep yang memungkinkan penyimpanan dan Pemrosesan graf secara efisien. Dalam sistem ini, setiap simpul langsung terhubung dengan simpul-simpul yang ada di sekitarnya tanpa perlu menggunakan indeks tambahan untuk mencari simpul-simpul tersebut. Artinya, hubungan antar simpul disimpan langsung di dalam simpul itu sendiri, sehingga akses ke simpul terrait bisa dilakukan secara cepas tanpa pencarían melalui indeks yang terpisah. Pendekatan ini sangat berguna dalam aplikasi yang membutuhkan performa tinggi, seperti rekomendasi atau analisis jaringan sosial.

Berikut struktur dari graph database:

Setiap simpul melambangkan suatu entitas seperti orang, bisnis, akun, atau item lain yang hendak dilacak.

## Sifat
Dibanding dengan ''relational database'', graph database sering lebih cepat untuk himpunan data asosiatif, dan memetakan lebih langsung ke struktur aplikasi berorientasi objek (*object-oriented application*). Database ini dapat diskala lebih alamiah ke himpunan data lebih besar karena umumnya tidak membutuhkan operasi "join" yang mahal. Karena kurang tergantung dari skema kaku, mereka lebih cocok untuk dikelola secara *ad hoc* dan data yang berubah-ubah dengan skema yang terus diperbarui. Sebaliknya, relational database umumnya lebih cepat dalam mengerjakan operasi yang sama dengan jumlah elemen data yang lebih banyak.

## Proyek-proyek graph database
Berikut adalah daftar sejumlah proyek graph database yang terkenal:

## Graph database features
The following table compares the features of the above graph databases.

## Pemrosesan graf yang didistribusi
* Angrapa  - graph package in Hama , a bulk synchronous parallel (BSP) platform
* Apache Hama  - a pure BSP(Bulk Synchronous Parallel) computing framework on top of HDFS (Hadoop Distributed File System) for massive scientific computations such as matrix, graph and network algorithms.
* Bigdata  - A RDF/graph database capable of clustered deployment. Bigdata supports high availability (HA) mode , embedded mode , single server mode  and has available commercial licenses . As of version 1.3.1, it supports the Blueprints API  and Reification Done Right (RDR) .
* Faunus  - a Hadoop-based graph computing framework that uses Gremlin as its query language. Faunus provides connectivity to Titan, Rexster-fronted graph databases, and to text/binary graph formats stored in HDFS. Faunus is developed by Aurelius .
* FlockDB - an open source distributed, fault-tolerant graph database based on MySQL and the Gizzard framework for managing Twitter-like graph data (single-hop relationships) FlockDB on GitHub .
* Giraph  - a Graph processing infrastructure that runs on Hadoop (see Pregel).
* GraphBase  - Enterprise Edition supports embedding of callable Java Agents within the vertices of a distributed graph.
* GoldenOrb  - Pregel implementation built on top of Apache Hadoop
* GraphLab  - A framework for machine learning and data mining in the cloud
* GraphX  - GraphLab built on the Spark  cluster computing system. Dr. Joseph Gonzalez is the project lead, the creator of GraphLab.
* HipG  - a library for high-level parallel processing of large-scale graphs. HipG is implemented in Java and is designed for distributed-memory machine
* IBM System G Graph Analytics Toolkit  - A comprehensive graph analytics library consisted of network topological analysis tools, graph matching and search tools, and graph path and flow tools. It has been applied to various use cases and industry solutions.
* InfiniteGraph  - a commercially available distributed graph database that supports parallel load and parallel queries.
* JPregel  - In-memory java based Pregel implementation
* KDT  - An open-source distributed graph library with a Python front-end and C++/MPI backend (Combinatorial BLAS ).
* OpenLink Virtuoso - the shared-nothing Cluster Edition supports distributed graph data processing.
* Oracle Spatial and Graph  - loading, inferencing, and querying workloads are automatically and transparently distributed across the nodes in an Oracle Real Application Cluster, Oracle Exadata Database Machine, and Oracle Database Appliance.
* Phoebus  - Pregel implementation written in Erlang
* Pregel - Google's internal graph processing platform, released details in ACM paper.
* Powergraph  - Distributed graph-parallel computation on natural graphs.
* PowerLyra  - A distributed graph analytics based on GraphLab using differentiated graph computation and partitioning on skewed (e.g. power-law and bipartite) graphs (dynamically applying different computation and partition strategies for different vertices).
* Cyclops  - A computation and communication efficient graph processing system with significantly low communication cost.
* Imitator  - A reliable distributed graph processing system with replication-based fault-tolerance.
* Sedge  - A framework for distributed large graph processing and graph partition management (including an open source version of Google's Pregel)
* Signal/Collect  - a framework for parallel graph processing written in Scala
* Sqrrl Enterprise - distributed graph processing utilizing Apache Accumulo and featuring cell-level security, massive scalability, and JSON support
* Titan  - A distributed, disk-based graph database developed by Aurelius .
* Trinity  - Distributed in-memory graph engine under development at Microsoft Research Labs.
* Parallel Boost Graph Library (PBGL)  - a C++ library for graph processing on distributed machines, part of Boost framework.
* Mizan  - An optimized Pregel clone that can be deployed easily on Amazon EC2, local clusters, stand-alone Linux systems and supercomputers (IBM BlueGene/P). It utilizes runtime graph repartitioning between iterations to provide dynamic load balancing for better algorithm performance.
* Weaver  - A fast and scalable graph store designed specifically for dynamically-changing graphs

## GPGPU Graph Processing
* Medusa  - A framework for graph processing using Graphics Processing Units (GPUs) on both shared memory and distributed environments. Medusa allows users with no GPU programming expertise to leverage GPUs for graph processing.

## APIs and Graph Query/Programming Languages
* Bounds Language  - terse C-style syntax which initiates concurrent traversals in GraphBase and supports interaction between them.
* Blueprints  - a Java API for Property Graphs from TinkerPop  and supported by a few graph database vendors.
* Blueprints.NET  - a C#/.NET API for generic Property Graphs.
* Bulbflow  - a Python persistence framework for Rexster, Titan, and Neo4j Server.
* Cypher Query Language  - a declarative graph query language for Neo4j that enables ad hoc as well as programmatic (SQL-like) access to the graph
* Gremlin  - an open-source graph programming language that works over various graph database systems.
* Neo4jClient  - a .NET client for accessing Neo4j.
* Neography  - a thin Ruby wrapper that provides access to Neo4j via REST.
* Neo4jPHP  - a PHP library wrapping the Neo4j graph database.
* NodeNeo4j  - a Node.js driver for Neo4j that provides access to Neo4j via REST
* Pacer  - a Ruby dialect/implementation of the Gremlin graph traversal language.
* Pipes  - a lazy dataflow framework written in Java that forms the foundation for various property graph traversal languages.
* Pixy  - a declarative graph query language that works on any Blueprints-compatible graph database
* PYBlueprints  - a Python API for Property Graphs.
* Pygr  - a Python API for large-scale analysis of biological sequences and genomes, with alignments represented as graphs.
* Rexster  - a graph database server that provides a REST or binary protocol API (RexPro). Supports Titan, Neo4j, OrientDB, Dex, and any TinkerPop/Blueprints-enabled graph.
* RDFSharp  - a .NET API for modeling RDF graphs, storing them on many SQL databases (Firebird, MySQL, PostgreSQL, SQL Server, SQLite) and querying them with SPARQL.
* SPARQL - a query language for databases, able to retrieve and manipulate data stored in Resource Description Framework format.
* SPASQL  - an extension of the SQL standard, allowing execution of SPARQL queries within SQL statements, typically by treating them as subquery or function clauses. This also allows SPARQL queries to be issued through "traditional" data access APIs (ODBC, JDBC, OLE DB, ADO.NET, etc.)
* Spring Data Neo4j  - an extension to Spring Data  (part of the Spring Framework), providing direct/native access to Neo4j
* Oracle SQL and PL/SQL APIs  - have graph extensions for Oracle Spatial and Graph.
* Styx (previously named Pipes.Net) - a data flow framework for C#/.NET for processing generic graphs and Property Graphs.
* Thunderdome  - a Titan Rexster Object-Graph Mapper for Python (no longer maintained)
* Mogwai  - a Titan Rexster Object-Graph Mapper for Python - Forked from Thunderdome
* Rexpro-Python  - a Titan Rexpro connection handler for Python.

## Lihat pula
* NoSQL
* Document-oriented database
* Structured storage
* Object database
* Resource Description Framework (RDF) - framework to express node-edge graphs
* Graph transformation for a complementary topic (rule based in memory manipulation of graphs instead of transaction safe persistence).
* RDF Database

## Referensi

## Pranala luar
* NoSQL Frankfurt 2010 - The GraphDB Landscape and sones 
* Graph Databases and the Future of Large-Scale Knowledge Management 
* Top Graph Databases 
* Social networks in the database: using a graph database 
* Scaling Online Social Networks without Pains 
* Large-scale Graph Computing at Google 
* Eric Lai. (2009, July 1). No to SQL? Anti-database movement gains steam 
* Renzo Angles, Claudio Gutierrez. Survey of graph database models. ACM Computing Surveys, Feb. 2008.
* InfoGrid  - an open-source application platform including a graph database
* Rodriguez, M.A., Neubauer, P, The Graph Traversal Pattern  article.
* Optimizing Schema-Last Tuple-Store Queries in Graphd SIGMOD 2010
* IBM System G Native Graph Store