A distributed, transactional,
fault-tolerant object store

GoshawkDB Collections Library

Because GoshawkDB stores an object graph, and does not provide abstractions such as tables, it also does not provide the collection-like properties of tables. In programming languages, we're used to working with rich collection libraries supporting a number of different properties: sets, maps, trees etc. These are highly efficient structures that allow us to work with very large collections of objects quickly.

For the supported GoshawkDB clients, we provide a collections library. These contain prebuilt and tested collections that you can instantiate and use in your programs, which store values in GoshawkDB safely, using the GoshawkDB clients. The collections are compatible across the different languages, so for example a map created and populated by the Java client can be further manipulated by the Go client. There is no magic to these collections: they do not require anything other than the vanilla clients, they are simply there to provide a base level of functionality and to avoid every use from having to reimplement the same basic data structures.

The collections library is available for both the Go client and the Java client.

Currently, the Collections Library contains a single collection type: a Linear Hash Map. This is a key-value map which accesses O(log2(N)) objects for a map of size N for Put, Find and Remove operations. Iteration is supported via a ForEach function, which iterates over the key-value pairs in an undefined order. The keys are byte-arrays, and the values are GoshawkDB Object References. By ignoring the value element of each pair, this collection can be used as a set, though currently lacks typical set operations such as union, intersect and subtract.

Additional collection types are currently being worked on, including a B-tree which supports ordered traversal.