There was a mistake in the build for GoshawkDB 0.3. This affected all server binary artifacts: deb, rpm, tarball and the docker image, and the Java client and collection artifacts. The mistake meant clients could not connect to the server. GoshawkDB 0.3.1 corrects this. No other changes have been made. The 0.3 Go client works with the 0.3.1 server. Download.
GoshawkDB 0.3 adds support for multiple independent object graph roots, object capabilities, and introduces a collections library which makes modelling in GoshawkDB dramatically easier. There are also many bug fixes. The GoshawkDB server binary, the Go client, the Java client, the collections library, and a docker image are all available for download.
I'm very pleased to announce that I've been invited to give a talk on GoshawkDB at Code Mesh on 4th November.
A fully featured Java client is now available under the Apache License 2.0.
Features at a glance
In a programming language you model your data with objects, not tables and rows. GoshawkDB is an object store so there's no need to translate from your objects to table entries and back again: you simply have persistent objects. Fewer moving parts, less to go wrong, and a better fit with programming languages.
GoshawkDB supports full multi-object transactions which are atomic and isolated no matter how many objects the transaction touches or where the objects are stored. GoshawkDB clients support nested transactions, and powerful features such as Retry make GoshawkDB's transactions even more flexible.
There is no point using any data store if its semantics are unclear or overly complex. GoshawkDB supports strong-serializability isolation level only. This is the simplest and most intuitive isolation level. GoshawkDB makes clear guarantees about how it will behave in the presence of failures, which ensures you are not in for any nasty surprises.
GoshawkDB is a distributed datastore at home both in the cloud or in your own data-center. The cluster of nodes present one logical data store, and a unique and improved form of consistent hashing ensures objects are spread evenly across the nodes, with a configurable level of redundancy. Clients connect to any node to access the data store; all nodes are equal.
High Performance CP-system
GoshawkDB is a CP-system. This means that it will not violate consistency when failures or partitions occur. A CP-system always has to do more coordination work than an AP-system and so cannot be as fast, but GoshawkDB's unique design allows for impressive performance and reduced contention. GoshawkDB only orders transactions where necessary: it does not impose a performance-limiting global total order of transactions. Unlike many other distributed CP data stores, for an unchanging workload, GoshawkDB's performance will not decrease as you add more nodes.
GoshawkDB maintains copies of each object on multiple nodes. There is no leader/follower design: all nodes are equal and all copies of each object are equal. Transactions must contact only a majority of copies of each object to progress, so GoshawkDB will continue to work successfully in the presence of failures, provided a majority of copies of each object can still be contacted. GoshawkDB is sharded: each object need not be copied to every node. GoshawkDB uses the Paxos Synod protocol to achieve consensus. Committed transactions are written and flushed to disk before the client learns the transaction outcome.
GoshawkDB does not require you to use a schema for your data; GoshawkDB treats object values as plain byte arrays, leaving you to pick whatever serialization format is best for you. The only requirement is that you declare pointers to other objects explicitly.
All communication between server nodes and between clients and server nodes is secured using TLS 1.2 and X509 certificates. Client connections are authenticated through certificates, which GoshawkDB can generate for you. GoshawkDB uses Object Capabilities to control access to objects.