GraphDB is a database which resides inside SQL Server (any recent version) together with a set of .Net 4.5 assemblies partitioned into a client and an admin API:
- the client API allows a user to connect to a GraphDB store and store graphs of entities in workspaces. The API has a rich set of data-, security- and graph-related methods to easily manage entities, collaboration and networks.
- the admin API allows one to set up a store (i.e. create a GraphDB database), manage users, manage security and more.
Graphs inside GraphDB consist of nodes and links. Both objects have a payload or data-bucket which is stored in the database as an XML data type. A wide variety of predefined entities (Person, Address, TwitterText, Thought and so on) is shipped but it's easy to define your own custom business entities. The serialization can be automatic (based on WCF serialization) or explicit (by implementing an interface); customization of the stored XML can be adapted with ease.
Nodes and graphs can be partitioned into workspaces. They can be considered as folders or semantic domains. The client API has a whole lot of methods to deal with workspaces. In addition, workspaces are collaboration boundaries; you can share them and define roles (reader, editor, owner) to users who can access them. Furthermore, workspaces can be also public or protected. This means that you declare them as open to any other user as read-only and read-only-no-link respectively. A user can have an arbitrary amount of workspaces and always has a default one.
Tags (labels) can be defined which run across the workspace and nodes. Here again, the client API has a rich set of methods to manage tags. GraphDB has some predefined tags like Favorites, People... which are either automatically assigned in function of the data type or explicitly when the user tags them as 'favorite'.
Graphs inside GraphDB are technically speaking multigraphs; you can have an unlimited amount of links between nodes and they can be adorned with various properties; color, weight, payload (data), title, description....
Searching the store can be simple or fulltext. The simple search API allows you to filter on data types, connection weight, node title and so on. The fulltext search is based on the fact that data entities are saved as XML and thus fulltext searchable.
Graph algorithms can be accesses through a the client API and are processed inside stored procedures; graph traversals, topological sorting, shortest path and more.
The authentication in GraphDB can be internal or external. Internal means that users and their password is stored inside the store. External means the ASP.Net membership is the authentication party. There is no integration with SQL Server's users to enable compatibility with other RDBMS.
The client API is also available as a Web API (based on ASP.Net MVC 5) and is secure by means of OAuth2, an API Key and SSL. This means that the multi-user graph storage can be easily accessed by mobile clients signing in with their social network account (Twitter, Facebook and so on).
The database can be installed on Azure SQL and the Web API can also be hosted on Azure websites. Azure SQL does however not support fulltext search, file streams and tables, as well as some other minor stored procedure features. The admin API has a special setup dealing with Azure and all things specific to Azure are taken into account therein.
GraphDB boasts a simple yet efficient query language (QL) or, more appropriate, interaction language through which one can query, manage, link and share data as well as create workspaces, add users and so on. The language is build on top of a message processing engine (codenamed 'Trax') which can be integrated in applications (Windows, web, command line).
in technical terms
- Microsoft SQL Server based (MySQL under construction)
- automatic serialization of data entities
- multigraph store
- multi-user store with either internal or ASP.Net Membership authentication
- collaboration/sharing enabled through a simple role mechanism
- API written in C# (.Net 4.5) with careful usage of async patterns where meaningful
- static admin API allows to install stores (applications can create stores on the fly), manage users and workspaces
- rich client (static and instance) API
- tags/favorites/labels defined on a user level
- server-side graph algorithms (traversals, minimum spanning tree, Kruskal, Prim, Dijkstra, topological sorting)
- can be hosted on Azure (all features are supported except fulltext search)
- simple query language based on proprietary, embeddable technology.