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.
GoshawkDB 0.2 adds support for easy change of cluster configuration; rewritten encryption of connections (now using TLS 1.2); elimination of the need for file systems to support sparse files; better packaging, and many bug fixes. The GoshawkDB server binary is available for download and the Go client is Go gettable.
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. An intuitive and simple approach which fits naturally 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 advanced features such as Retry make GoshawkDB's transactions even more powerful and flexible.
There is no point using any data store if its semantics are unclear or overly complex. GoshawkDB supports only transactions with strong-serializability isolation level. 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 and load are spread evenly across the nodes, with configurable levels 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; in contrast to AP-systems, it will not lie to you. Proofs show a CP-system always has to do more 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 every object on multiple nodes. There is no leader/follower design: all nodes are equal and all copies of each object are equal. Transactions need to contact only a majority of copies of each object to progress and so GoshawkDB will continue to work successfully in the presence of failures, provided a majority of copies of each object can still be contacted. There may be fewer copies of each object than nodes in the cluster: GoshawkDB is sharded. GoshawkDB uses the Paxos Synod protocol to achieve consensus. Modifications of objects 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 is secured using TLS 1.2 and X509 certificates. All communication between clients and server nodes is also secured using TLS 1.2, and client connections are authenticated through certificates. GoshawkDB will generate all the certificates you need.