Skip to content

dlpc/Akka.Persistence.MySQL

 
 

Akka.Persistence.MySql

Akka Persistence journal and snapshot store backed by MySql database.

WARNING: Akka.Persistence.MySql plugin is still in beta and it's mechanics described below may be still subject to change.

Configuration

Both journal and snapshot store share the same configuration keys (however they resides in separate scopes, so they are definied distinctly for either journal or snapshot store):

Remember that connection string must be provided separately to Journal and Snapshot Store.

akka.persistence{
	journal {
		mysql {
			# qualified type name of the MySql persistence journal actor
			class = "Akka.Persistence.MySql.Journal.MySqlJournal, Akka.Persistence.MySql"

			# dispatcher used to drive journal actor
			plugin-dispatcher = "akka.actor.default-dispatcher"

			# connection string used for database access
			connection-string = ""

			# default SQL commands timeout
			connection-timeout = 30s

			# MySql table corresponding with persistent journal
			table-name = event_journal

			# should corresponding journal table be initialized automatically
			auto-initialize = off
			
			# timestamp provider used for generation of journal entries timestamps
			timestamp-provider = "Akka.Persistence.Sql.Common.Journal.DefaultTimestampProvider, Akka.Persistence.Sql.Common"
		
			# metadata table
			metadata-table-name = metadata
		}
	}

	snapshot-store {
		mysql {
			# qualified type name of the MySql persistence journal actor
			class = "Akka.Persistence.MySql.Snapshot.MySqlSnapshotStore, Akka.Persistence.MySql"

			# dispatcher used to drive journal actor
			plugin-dispatcher = ""akka.actor.default-dispatcher""

			# connection string used for database access
			connection-string = ""

			# default SQL commands timeout
			connection-timeout = 30s

			# MySql table corresponding with persistent journal
			table-name = snapshot_store

			# should corresponding journal table be initialized automatically
			auto-initialize = off
		}
	}
}

Table Schema

SQL Server persistence plugin defines a default table schema used for journal, snapshot store and metadate table.

CREATE TABLE IF NOT EXISTS {your_journal_table_name} (
    persistence_id VARCHAR(255) NOT NULL,
    sequence_nr BIGINT NOT NULL,
    is_deleted BIT NOT NULL,
    created_at BIGINT NOT NULL,
    manifest VARCHAR(500) NOT NULL,
    payload BLOB NOT NULL,
    PRIMARY KEY (persistence_id, sequence_nr),
    INDEX {your_journal_table_name}_sequence_nr_idx (sequence_nr),
    INDEX {your_journal_table_name}_created_at_idx (created_at)
);

CREATE TABLE IF NOT EXISTS {your_snapshot_table_name} (
    persistence_id VARCHAR(255) NOT NULL,
    sequence_nr BIGINT NOT NULL,
    created_at BIGINT NOT NULL,
    manifest VARCHAR(500) NOT NULL,
    snapshot BLOB NOT NULL,
    PRIMARY KEY (persistence_id, sequence_nr),
    INDEX {your_snapshot_table_name}_sequence_nr_idx (sequence_nr),
    INDEX {your_snapshot_table_name}_created_at_idx (created_at)
);

CREATE TABLE IF NOT EXISTS {your_metadata_table_name} (
    persistence_id VARCHAR(255) NOT NULL,
    sequence_nr BIGINT NOT NULL,
    PRIMARY KEY (persistence_id, sequence_nr)
);

About

MySQL implementation for Akka.Persistence

Resources

License

Apache-2.0, Apache-2.0 licenses found

Licenses found

Apache-2.0
LICENSE
Apache-2.0
LICENSE.md

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 72.7%
  • F# 24.9%
  • Shell 1.3%
  • Batchfile 1.1%