Skip to content
moodmosaic edited this page Nov 13, 2014 · 22 revisions

What is AtomEventStore?

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:

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.

Caveats

AtomEventStore doesn't provide any ACID guarantees. Particularly, writes aren't always atomic, and are only as durable as the underlying storage mechanism.

Clients must address these shortcomings via proper use of architecture, e.g. use of the Single Writer pattern, and appropriate use of idempotency checks.

API

AtomEventStore is a library with a top-level API organised around the well-known .NET interfaces IEnumerable<T> and IObserver<T>.

  • Events are written using IObserver<T>.OnNext, although an asynchronous alternative is also available.
  • Events are read using IEnumerable<T>.

Supporting types enable clients to customize

How an event stream is interpreted and optimised is entirely up to the client.

Credits

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.

Clone this wiki locally