Streamstone

Event store for Azure Table Storage

View the Project on GitHub yevhen/Streamstone

Streamstone's logo

Streamstone is a small library targeted at building scalable event-sourced applications on top of Azure Table Storage. It has simple, functional style API, heavily inspired by Greg Young’s Event Store.

Features

Installing from NuGet NuGet

To install Streamstone via NuGet, run this command in NuGet package manager console:

PM> Install-Package Streamstone

Building from source Build status

To build Streamstone binaries on Windows you will need to have Visual Studio 17 Update 3 or higher and .NET Core SDK 2.0 or higher. To build binaries on Linux use dotnet cli tooling (ie dotnet build).

Running unit tests

Unit tests require Azure Storage Emulator 5.2 or higher, which is currently available only on Windows. Alternatively, you could run against real Azure by setting storage account connection string to Streamstone-Test-Storage user-level environment variable.

Design

Streamstone is just a thin layer (library, not a server) on top of Windows Azure Table Storage. It implements low-level mechanics for dealing with event streams, and all heavy-weight lifting is done by underlying provider.

The api is stateless and all exposed objects are immutable, once fully constructed. Streamstone doesn’t dictate payload serialization protocol, so you are free to choose any protocol you want.

Optimistic concurrency is implemented by always including stream header entity with every write, making it impossible to append to a stream without first having a latest Etag. Duplicate event detection is done by automatically creating additional entity for every event, with RowKey value set to a unique identifier of a source event (consistent secondary index).

Schema

Schema


Schema for virtual partitions

Usage

Essentials
Application
Demo

Limitations

While Streamstone allows you to pass any number of events to Stream.Write, the max batch size limit imposed by Azure Table Storage is 100 entities, therefore:

Other limitations of the underlying Azure Table Storage API:

WATS limitations on MSDN

Community

Gitter

License

MIT License