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.
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
}
}
}
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)
);