HyperGraphDB is an extensible open-source graph-based data storage engine. It implements the ability to store hypergraph relationships, which make it suitable for complex data and knowledge representation problems. It relies on object called an atom as its unit storage, where an atom is either a node in the graph or an edge that can point to multiple nodes and/or edges. It uses BerkeleyDB as its key value store, and operates as an object-orientated Java database.[04]
- Source Code
- https://github.com/hypergraphdb[02]
- Developer
- Country of Origin
- US
- Start Year
- 2007 [16]
- Project Type
- Open Source
- Written in
- Java
- Embeds / Uses
- Berkeley DB
- License
- Apache v2
HyperGraphDB is an extensible open-source graph-based data storage engine. It implements the ability to store hypergraph relationships, which make it suitable for complex data and knowledge representation problems. It relies on object called an atom as its unit storage, where an atom is either a node in the graph or an edge that can point to multiple nodes and/or edges. It uses BerkeleyDB as its key value store, and operates as an object-orientated Java database.[04]
History[04][05]
Originated from an AI project (http://www.opencog.org) in 2007. It's inspired by the paper "Directed Recursive Labelnode Hypergraphs: A new Representation-Language", by Harold Boley, because most AI applications learn a higher-order, general representation, that can not be described in an ordinary graph but rather expressed in a hypergraph.
Concurrency Control[06][07][08]
HyperGraphDB is Atomic, Consistent, and Isolated but not Durable. It implements the Multi-Version Concurrency Control, and is fully transactional. To ensure consistency in peer to peer transactions, they use timestamps to make sure the queries are executed in order. HyperGraphDB also implement automatic deadlock detection that will randomly kill a process if a deadlock is encountered.
Data Model[05]
Each tuple is called an atom, which is either a node or an edge that points to multiple nodes or edges. Each of these atoms are strongly typed, such that there is a specific API that you can call to access that atom's contents. This DBMS uses BerkeleyDB as its key-value storage.
Indexes[07][09]
HyperGraphDB maintains 3 main indexes for efficiency: mapping from atom to its incidence set, mapping an atom to the set of all its atoms it is pointing to and the mapping of an atom to the value store. Users of the DBMS can implement their own indices as long as they define a mapping from atoms to atoms.
Joins[07]
Joins are performed on two sorted sets of atoms and the two are joined via a zig-zag algorithm or a merge algorithm.
Logging[10][11]
HyperGraphDB implements a logical log that stores the type of operation (i.e. Create, Update, Remove, Copy), the value that was updated or stored, and its timestamp. These then get saved to persistent memory after being created.
Parallel Execution[12]
HyperGraphDB allows for unions to be parallelized by running the two graph nodes that want to be joined across threads.
Query Execution[13]
They implement an iterator API that processes a tuple at a time to allow for graph traversals.
Query Interface[14][07]
HypergraphDB supports a special API specific to their tuples called atoms, but it doesn't support any particular querying language. They support three types of queries: graph traversals, predicate matching, and pattern matching over graph structures.
Storage Architecture[07][05]
HyperGraphDB requires an efficient key-value store that can support multiple ordered values per a single key. They use the BerkeleyDB storage system as their physical storage, which is disk-orientated.
Storage Model[07][15][05]
This DBMS supports both n-ary relationships and higher-order relations, which are edges that can point to multiple nodes at a time, and edges that can point to other edges. Each of these objects, edges or nodes, are referred to as atoms, and can be thought of as Java Objects.
Storage Organization[07]
There are two layers of organization used to store the "atoms": primitive and model layer. The primitive layer stores the mapping from an object ID to its raw data content. The model layer is a level of abstraction above the primitive layer, and associates a type of either a hypergraph atom or the value of the atom to each object ID.
System Architecture[07]
HyperGraphDB is a distributed, Shared-Nothing database that communicates via a P2P protocol. The protocol followed is of the Agent Communication Language (ACL) FIPA standard, which consists of communication using keywords such as propose, accept, inform, request, query etc.
Citations
16 sources- http://www.hypergraphdb.org hypergraphdb.org
- hypergraphdb (HyperGraphDB Project) · GitHub github.com
- http://www.hypergraphdb.org?page=LearnHyperGraphDB&project=hypergraphdb hypergraphdb.org
- What is HyperGraphDB? • myNoSQL mypopescu.com
- http://www.hypergraphdb.org/docs/HyperGraphDB-Presentation.pdf hypergraphdb.org
- IntroTransactions · hypergraphdb/hypergraphdb Wiki · GitHub github.com
- http://www.hypergraphdb.org/docs/hypergraphdb.pdf hypergraphdb.org
- Home · hypergraphdb/hypergraphdb Wiki · GitHub github.com
- IndicesHowto · hypergraphdb/hypergraphdb Wiki · GitHub github.com
- hypergraphdb/p2p/src/java/org/hypergraphdb/peer/log/LogEntry.java at master · hypergraphdb/hypergraphdb · GitHub github.com
- hypergraphdb/p2p/src/java/org/hypergraphdb/peer/log/Log.java at master · hypergraphdb/hypergraphdb · GitHub github.com
- hypergraphdb/core/src/java/org/hypergraphdb/query/cond2qry/OrToParellelQuery.java at master · hypergraphdb/hypergraphdb · GitHub github.com
- hypergraphdb/core/src/java/org/hypergraphdb/HGQuery.java at master · hypergraphdb/hypergraphdb · GitHub github.com
- Google Code Archive - Long-term storage for Google Code Project Hosting. google.com
- IntroStoreData · hypergraphdb/hypergraphdb Wiki · GitHub github.com
- Initial directory structure. git-svn-id: https://hypergraphdb.googlecode.com/svn/trunk@1 43784a7f-e236-0410-9472-c78ae7dffccf github.com