Matthew Sackman

GoshawkDB: Programming with Persistent Distributed Objects

Trying to learn from our past

GoshawkDB: Programming with Persistent Distributed Objects

For many of us, a database is a means to store our objects for future retrieval and use. We need our stored objects to withstand applications being terminated and restarted, we need multiple programs to be able to work with the same objects safely and intuitively, and we need our databases to be distributed and fault-tolerant to ensure our objects don't get lost or corrupted. Despite how common this use case is, many (if not most) databases are not designed to store object graphs, and as a result we're forced to use object-relational mappings that clunkily represent our objects and object graphs, with leaky APIs, performance issues because of contention caused by the grouping of unrelated objects, and often unexpected semantics.

GoshawkDB is a distributed, transactional, fault-tolerant data store, specifically designed for storing objects and object graphs. It supports only the strongest form of transactional isolation possible (strong serializability) which gives it intuitive semantics without surprises. A GoshawkDB cluster distributes objects across nodes with configurable redundancy and automatic sharding. Transactions continue to complete until a majority of copies of each object become unavailable due to failures. But most of all, it rejects the traditional database concepts of named tables or collections, and instead allows you to precisely mirror your objects and object graphs in the store.

Talk objectives:

  • In this talk Matthew will demonstrate how to build and manage your objects in GoshawkDB, how nested transactions enable composable APIs, and how shifting away from awkward translations of your objects makes your code easier to write, read, and maintain.

Target audience:

  • Anyone who uses a database to store objects, or tries to avoid doing so because it's normally so painful!