Skip to content

Akka.Persistence.Sql v1.5.2-beta2

Compare
Choose a tag to compare
@Aaronontheweb Aaronontheweb released this 14 Apr 16:53
82beb35

1.5.2-beta2 April 14 2023

NOTE: Database schema changes

1.5.2-beta1 package should be considered as deprecated. If you experimented with 1.5.2-beta1, you will need to drop existing persistence tables and recreate them using 1.5.2-beta2

This beta version introduces database schema optimization to:

  • Improve the tag table based query performance, without compromising overall persistence performance.
  • Improve inter-compatibility with other SQL persistence plugins.

Tag Query Benchmark

Benchmark is performed on a worst possible scenario:

  • Event journal table with 3 million row entries
  • Tagged events near the end of the table
Tag Count TagMode Mean Error StdDev
10 Csv 1,746.621 ms 27.8946 ms 29.8469 ms
100 Csv 1,724.465 ms 25.4638 ms 23.8189 ms
1000 Csv 1,723.063 ms 26.2311 ms 24.5366 ms
10000 Csv 1,873.467 ms 26.1173 ms 23.1523 ms
10 TagTable 3.201 ms 0.0633 ms 0.1479 ms
100 TagTable 5.163 ms 0.1018 ms 0.1358 ms
1000 TagTable 25.545 ms 0.4952 ms 0.4864 ms
10000 TagTable 441.877 ms 3.5410 ms 2.9569 ms

1.5.2-beta1 April 12 2023

NOTE: This beta release is intended for greenfield projects only.

Until backward compatibility is properly tested and documented, it is recommended to use this plugin only on new greenfield projects that does not rely on existing persisted data.

Akka.Persistence.Sql is a successor of Akka.Persistence.Linq2Db. It is being retooled to provide a better inter-compatibility with other SQL based Akka.Persistence plugin family.

Currently supported database family:

  • Microsoft SQL Server
  • MS SQLite
  • System.Data.SQLite
  • PostgreSQL using binary payload

Akka.Hosting Extension Setup

Assuming a MS SQL Server 2019 setup:

var host = new HostBuilder()
    .ConfigureServices((context, services) => {
        services.AddAkka("my-system-name", (builder, provider) =>
        {
            builder.WithSqlPersistence(
                connectionString: _myConnectionString,
                providerName: ProviderName.SqlServer2019)
        });
    })

ProviderName is a string constant defining the database type to connect to, valid values are defined inside LinqToDB.ProviderName static class. Refer to the Members of LinqToDb.ProviderName for included providers.

HOCON Configuration Setup

akka.persistence {
    journal {
        plugin = "akka.persistence.journal.sql"
        sql {
            connection-string = "{database-connection-string}"
            provider-name = "{provider-name}"
        }
    }
    snapshot-store {
        plugin = "akka.persistence.snapshot-store.sql"
        sql {
            connection-string = "{database-connection-string}"
            provider-name = "{provider-name}"
        }
    }
}
  • database-connection-string: The proper connection string to your database of choice.
  • provider-name: A string constant defining the database type to connect to, valid values are defined inside LinqToDB.ProviderName static class. Refer to the Members of LinqToDb.ProviderName for included providers.

Changes:

See More
  • 6311090 Add missing settings in Hosting extension method (#209)
  • 5fb3de6 Add Akka.Hosting extension methods (#199)
  • c36dbc9 Make snapshot table initialization asynchronous (#205)
  • 605877e Fix bug in datetime column detection (#206)
  • 16fb2d1 Bump Akka.Persistence.PostgreSql from 1.5.1.1 to 1.5.2 (#204)
  • 091ff26 Bump Akka.Persistence.Sqlite from 1.5.1 to 1.5.2 (#202)
  • c6d9ac7 Bump Akka.Persistence.SqlServer from 1.5.1 to 1.5.2 (#201)
  • 7e8073f Bump AkkaVersion from 1.5.1 to 1.5.2 (#200)
  • 52f4c19 Bump AkkaHostingVersion from 1.5.1 to 1.5.1.1 (#198)
  • faff126 Update main README.md (#197)
  • edbef9a Clean-up table creation, add indexing to mssql (#196)
  • 4ad062d Change default config values to be more greenfield friendly (#195)
  • 74ad14f Bump Microsoft.Data.SqlClient from 5.1.0 to 5.1.1 (#188)
  • f329412 Add WriterUuid support (#192)
  • e7a0d73 Fix query unit test, wait until write journal is ready (#193)
  • 62a0698 Improve journal startup code (#189)
  • c4e6b59 chore: copyright headers (#190)
  • aa81f43 Add Csv and TagTable unit tests (#170)
  • 2bdd123 feat: upgrade to linq2db 5.1.1 (#186)
  • 2d4e8b7 feat: bump postgres, fixes #171 (#172)
  • f08062e Look into supporting DateTime and long databases. (#175)
  • 94e2dcc Merge branch 'dev' into split-snapshot-row
  • 7c5a75f Fix tag mode bug (#185)
  • aa9b119 Merge pull request #183 from Arkatufus/Fix_unordered_sequence_number
  • dddb79a Fix tag table query ordering problem
  • 7be5f44 fix: bump linq2db to 4.4.1 for npgsql 7 support
  • cd55f21 refactor: prepopulate UseDateTime for perf
  • 6c90022 feat: bump to linq2db 3.7.0
  • 579d5c0 Merge branch 'dev' into split-snapshot-row
  • 723123a feat: make AkkaDataConnection a facade for centralization
  • 09dcdd5 feat: use the correct snapshot logic
  • ecf9a2d Bump Akka.Persistence.PostgreSql from 1.5.1 to 1.5.1.1 (#174)
  • 26d8d4c feat: split snapshotrow in datetime and long
  • 1eea1bd chore: fix copyright header (#169)
  • bebf7c0 Rebrand Linq2Db to Sql (#166)
  • 73aa93c Upgrade package dependencies (#163)
  • 37a6a99 Set up CI with Azure Pipelines
  • 5d04289 Bump Microsoft.NET.Test.Sdk from 17.4.1 to 17.5.0 (#153)
  • b2a49a1 style: resharper cleanup code (#159)
  • f5a2f67 refactor: rename to akka.persistence.sql (#156)
  • d6e7cf0 build: remove docfx (#157)
  • cd969de refactor: standardize postgresql, sqlite naming (#155)
  • f871940 Bump FluentMigratorVersion from 3.3.1 to 3.3.2 (#147)
  • 999c628 feat: move to centralized package management (#154)
  • cf46ce4 Add original DB insertion optimization (#141)
  • 47a2921 Bump CommandLineParser from 2.8.0 to 2.9.1 (#146)
  • 3c3b2e6 Bump FluentAssertions from 6.9.0 to 6.10.0 (#148)
  • 1355641 Refactor test projects (#150)
  • 93dcbd7 Add TagTable migration app (#149)
  • 65adb7b Fix TagTable delete and queries operations (#145)
  • d7f12fd Code cleanup (#143)
  • 084da30 Bump AkkaVersion from 1.4.46 to 1.4.49 (#142)
  • dfdfe13 Bump MySql.Data from 8.0.28 to 8.0.32 (#134)
  • e8da894 Change default journal read and write mode to tag table (#138)
  • 095832a Remove WriterUuid column from tag table (#137)
  • 878bbd3 Cleanup solution structure (#136)
  • a26036e Tag table with backwards compatibility (#68)
  • dcc49a6 Refactor compatibility settings to be more generic (#130)
  • cc87494 Add tag table SQL migration scripts (#131)
  • 5931c42 Remove actor names from unit tests (#133)
  • f8e6ee6 Refactor compatibility unit tests to use TestKit (#132)
  • edd8c15 Remove logical-delete option from HOCON config (#124)
  • e3efd1e Fix/harden Akka.Persistence.Linq2Db.Compatibility.Tests (#125)
  • 9a8428e Add data compatibility checker (#117)
  • d328107 Bump System.Data.SqlClient from 4.8.4 to 4.8.5 (#114)
  • d0cfde2 Bump AkkaVersion from 1.4.45 to 1.4.46 (#122)
  • cdd52ab Fix read journal, missing _includeDeleted checks (#121)
  • 58789d5 Revert change from List to ImmutableList (#118)
  • fa8ff80 Code cleanup (#116)
  • 0458083 Fix several bugs (#115)
  • 958f049 Fix inconsistent HOCON property naming and access, add MySql compat settings (#108)
  • ad04298 Bump Microsoft.NET.Test.Sdk from 17.3.2 to 17.4.0 (#110)
  • 2d400b1 Bump Docker.DotNet from 3.125.4 to 3.125.12 (#111)
  • d845fb3 Update common.props usage and upgrade all package versions (#107)
  • 6a009a4 Bump System.Data.SQLite.Core from 1.0.113.1 to 1.0.116 (#84)
  • 9a7b4eb Bump StackExchange.Redis from 2.2.62 to 2.6.45 (#89)
  • 7197880 Changeup behavior of MaxSequenceNumber to use Max wherever possible. (#47)

This list of changes was auto generated.