-
Notifications
You must be signed in to change notification settings - Fork 12
Home
AtomEventStore is a .NET library that uses the Atom Syndication Format to provide a server-less implementation of an Event Store.
It was created to solve a particular set of problems:
- It should support Test-Driven Development (particularly Outside-In TDD, or GOOS-style TDD) without adding much overhead.
- It should work well with Platform-as-a-Service solutions such as Microsoft Azure.
- It should be scalable.
- It should be lock-free.
- It should be reusable.
- It should be reasonably efficient.
As always in software development, there are trade-offs involved, so while AtomEventStore is designed mainly with the above goals in mind, it's not optimized for low latency, efficient storage, or fastest possible transmission times. It's also not designed to handle concurrent writes; the applications using AtomEventStore are expected to address this problem through applications of the Single Writer pattern.
AtomEventStore comes with a built-in in-memory storage option optimal for unit testing. Since AtomEventStore is based on storing data as Atom Feed documents, the in-memory store simply keeps the documents in memory as strings.
The AtomEventsInMemory storage class is even thread-safe, which also enables you to use it in Integration Tests, or other types of (near) full stack tests.
AtomEventStore works well with Platform-as-a-Service (PaaS) offerings such as Microsoft Azure, because it doesn't rely on a server component. AtomEventStore is a client library that utilizes a well-known storage format (Atom Syndication Format). Since the client library writes directly to files or the like, it can also be used with e.g. Azure BLOB storage. This is PaaS friendly because you don't have to install and maintain a virtual machine to host a database server.
The optional AtomEventsOnAzure storage class supports Microsoft Azure BLOB storage.
The idea that an Event Store can be modelled as a Linked List was originally put to my attention by Yves Reynhout in his article Your EventStream is a linked list.