All Projects → meln1k → akka-persistence-foundationdb

meln1k / akka-persistence-foundationdb

Licence: Apache-2.0 license
A replicated Akka Persistence journal backed by FoundationDB

Programming Languages

scala
5932 projects

Projects that are alternatives of or similar to akka-persistence-foundationdb

akka-persistence-gcp-datastore
akka-persistence-gcp-datastore is a journal and snapshot store plugin for akka-persistence using google cloud firestore in datastore mode.
Stars: ✭ 18 (-58.14%)
Mutual labels:  akka, cqrs, akka-persistence, event-sourcing
Event Sourcing Jambo
An Hexagonal Architecture with DDD + Aggregates + Event Sourcing using .NET Core, Kafka e MongoDB (Blog Engine)
Stars: ✭ 159 (+269.77%)
Mutual labels:  cqrs, event-sourcing, cqrs-es
Booster
Booster Cloud Framework
Stars: ✭ 136 (+216.28%)
Mutual labels:  cqrs, event-sourcing, cqrs-es
Akkatecture
a cqrs and event sourcing framework for dotnet core using akka.net
Stars: ✭ 414 (+862.79%)
Mutual labels:  akka, cqrs, event-sourcing
Commanded
Use Commanded to build Elixir CQRS/ES applications
Stars: ✭ 1,280 (+2876.74%)
Mutual labels:  cqrs, event-sourcing, cqrs-es
Vertex
Vertex is a distributed, ultimately consistent, event traceable cross platform framework based on Orleans, which is used to build high-performance, high throughput, low latency, scalable distributed applications
Stars: ✭ 117 (+172.09%)
Mutual labels:  cqrs, event-sourcing, cqrs-es
Conduit
RealWorld example backend implementing the CQRS/ES pattern in Elixir and Phoenix
Stars: ✭ 253 (+488.37%)
Mutual labels:  cqrs, event-sourcing, cqrs-es
Symfony 5 Es Cqrs Boilerplate
Symfony 5 DDD ES CQRS backend boilerplate
Stars: ✭ 759 (+1665.12%)
Mutual labels:  cqrs, event-sourcing, cqrs-es
stem
Event sourcing framework based on ZIO and pluggable runtime (currently working with Akka cluster)
Stars: ✭ 22 (-48.84%)
Mutual labels:  akka, cqrs, event-sourcing
atomic-store
Atomic event store for Scala/Akka
Stars: ✭ 17 (-60.47%)
Mutual labels:  akka, akka-persistence, event-sourcing
akka-persistence-spanner
Spanner plugin for Akka Persistence
Stars: ✭ 12 (-72.09%)
Mutual labels:  akka, akka-persistence, event-sourcing
Asombroso Ddd
Una lista cuidadosamente curada de recursos sobre Domain Driven Design, Eventos, Event Sourcing, Command Query Responsibility Segregation (CQRS).
Stars: ✭ 41 (-4.65%)
Mutual labels:  cqrs, event-sourcing, cqrs-es
Go Cqrs All
All-in-one collection for Go CQRS / ES / DDD examples
Stars: ✭ 39 (-9.3%)
Mutual labels:  cqrs, event-sourcing, cqrs-es
endless
Scala library to describe sharded and event sourced entities using tagless-final algebras
Stars: ✭ 70 (+62.79%)
Mutual labels:  akka, cqrs, event-sourcing
Rails event store
A Ruby implementation of an Event Store based on Active Record
Stars: ✭ 947 (+2102.33%)
Mutual labels:  cqrs, event-sourcing, cqrs-es
Pos
Sample Application DDD, Reactive Microservices, CQRS Event Sourcing Powered by DERMAYON LIBRARY
Stars: ✭ 207 (+381.4%)
Mutual labels:  cqrs, event-sourcing, cqrs-es
Awesome Elixir Cqrs
A curated list of awesome Elixir and Command Query Responsibility Segregation (CQRS) resources.
Stars: ✭ 467 (+986.05%)
Mutual labels:  cqrs, event-sourcing, cqrs-es
Eventstore
Event store using PostgreSQL for persistence
Stars: ✭ 729 (+1595.35%)
Mutual labels:  cqrs, event-sourcing, cqrs-es
Ddd Leaven Akka V2
Sample e-commerce system #Microservices #Akka #Reactive-DDD #CQRS
Stars: ✭ 362 (+741.86%)
Mutual labels:  akka, cqrs, event-sourcing
Akka Ddd
Akka CQRS/ES framework
Stars: ✭ 330 (+667.44%)
Mutual labels:  akka, cqrs, event-sourcing

FoundationDb Plugins for Akka Persistence

Replicated Akka Persistence journal and snapshot store backed by FoundationDB.

Dependencies

Latest release

This version of akka-persistence-foundationdb depends on Akka 2.6.13 and Foundation 6.2.x. It has been published for Scala 2.13.5.

Journal plugin

Features

  • All operations required by the Akka Persistence journal plugin API are fully supported.
  • Persistence Query support by FoundationDbReadJournal
  • Extra safe mode which disallows concurrent event writes and journal corruption is enabled by default.
  • Fast and efficient deletions (takes O(log(n)) time)
  • Two ways to store tags: compact (just a reference to the event journal, uses less space but requires an extra fetch query) or high-performance (a copy of the event with all required data, will consume 2x space however it's extremely fast). It's also possible to switch the tag type at any time. Choose based on your needs!

Configuration

To activate the journal plugin, add the following line to your Akka application.conf:

akka.persistence.journal.plugin = "foundationdb-journal"

This will run the journal with its default settings. The default settings can be changed with the configuration properties defined in reference.conf:

Caveats

  • Detailed tests under failure conditions are still missing.
  • Some tests are still missing.
  • Snapshot size can't be more than 10mb. It's going to be resolved in a future releases.

These issues are likely to be resolved in future versions of the plugin.

Limitations

  • Due to FoundationDB limitations, your event and all tags can't be more than 10mb (actually less, since 10mb is a transaction limit). If you find yourself saving more than 10mb in one transaction, please consider splitting your events.

Event deletion

Please keep in mind that event deletion has a different behavior depending on tag types. If you use compact tags, then tag is a reference to your event. If you delete the event from the journal, tag will point to the empty event and will be automatically cleared at the next eventsByTag query call. At the other hand, if your tag is rich, it will contain the whole event and won't be deleted, so your eventsByTag query will work as expected.

Snapshot store plugin

Features

Configuration

To activate the snapshot-store plugin, add the following line to your Akka application.conf:

akka.persistence.snapshot-store.plugin = "foundationdb-snapshot-store"

This will run the snapshot store with its default settings. The default settings can be changed with the configuration properties defined in reference.conf:

Persistence Queries

It implements the following Persistence Queries:

  • currentPersistenceIds, (persistenceIds is not implemented yet)
  • eventsByPersistenceId, currentEventsByPersistenceId
  • eventsByTag, currentEventsByTag

All live queries are implemented using database push mechanism and don't use polling. It allows very low latencies between the writing event to the journal and it's replication to the query side.

Persistence Query usage example to obtain a stream with all events tagged with "someTag" with Persistence Query:

val queries = PersistenceQuery(system).readJournalFor[FoundationDbReadJournal](FoundationDbReadJournal.Identifier)
queries.eventsByTag("someTag", Offset.noOffset)

Compared to other journals, there are no hard limits regarding the amount of tags per event. It's been tested to work with 1000 tags per event.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].