Skip to content

Latest commit

 

History

History
244 lines (183 loc) · 12.5 KB

RELEASE_NOTES.md

File metadata and controls

244 lines (183 loc) · 12.5 KB

1.5.30 October 4th 2024

1.5.28 September 9th 2024

Linq2Db DataOptions Support

You can now use DataOptions to set up your persistence journal, read journal, and snapshot store with a new Akka.Persistence.Sql.Hosting API.

Here is an example of setting up persistence on PostgreSQL using NpgsqlDataSource instead of the previous connection string and provider name setup.

var dataSource = new NpgsqlDataSourceBuilder(_myConnectionString).Build();

var dataOptions = new DataOptions()
    .UseDataProvider(DataConnection.GetDataProvider(ProviderName.PostgreSQL, dataSource.ConnectionString))
    .UseProvider(ProviderName.PostgreSQL)
    .UseConnectionFactory((opt) => dataSource.CreateConnection());
    
var host = new HostBuilder()
    .ConfigureServices((context, services) => {
        services.AddAkka("my-system-name", (builder, provider) =>
        {
            builder.WithSqlPersistence(dataOptions);
        });
    });

1.5.27.1 August 1st 2024

1.5.27 July 30th 2024

1.5.26 July 9th 2024

1.5.25 June 17th 2024

1.5.24 June 13th 2024

1.5.20 May 8th 2024

1.5.14-alpha April 19 2024

1.5.13 September 28 2023

1.5.12 August 8 2023

Akka.Persistence.Sql is now out of beta and ready for general use.

1.5.12-beta1 August 4 2023

1.5.9-beta1 July 20 2023

1.5.4-beta1 April 25 2023

Added transaction for every SQL queries with adjustable isolation level for read and write operations. You can go to the official Microsoft documentation to read more about these transaction isolation level settings.

Four new HOCON settings are introduced:

  • akka.persistence.journal.sql.read-isolation-level
  • akka.persistence.journal.sql.write-isolation-level
  • akka.persistence.snapshot-store.sql.read-isolation-level
  • akka.persistence.snapshot-store.sql.write-isolation-level

In Akka.Persistence.Sql.Hosting, These settings can be set programmatically through these new properties:

  • SqlJournalOptions.ReadIsolationLevel
  • SqlJournalOptions.WriteIsolationLevel
  • SqlSnapshotOptions.ReadIsolationLevel
  • SqlSnapshotOptions.WriteIsolationLevel

NOTE

Currently, there is a bug with Linq2Db and MySql implementation that can cause the SQL generator to throw an exception if you use the default IsolationLevel.Unspecified setting. Please use IsolationLevel.ReadCommitted if this happens to you.

1.5.2-beta3 April 19 2023

NOTE: Database schema changes

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

This beta version introduces database schema optimization to:

  • Improve the tag table based query performance even more.
  • 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
  • Numbers are measured as the time required to complete one operation (complete retrieval of N tagged events).
Tag Count TagMode Mean Error StdDev
10 Csv 1,760.393 ms 27.1970 ms 25.4401 ms
100 Csv 1,766.355 ms 25.0182 ms 23.4021 ms
1000 Csv 1,755.960 ms 33.8171 ms 34.7276 ms
10000 Csv 1,905.026 ms 22.3564 ms 20.9122 ms
10 TagTable 2.336 ms 0.0389 ms 0.0344 ms
100 TagTable 3.943 ms 0.0705 ms 0.0660 ms
1000 TagTable 18.597 ms 0.3570 ms 0.3506 ms
10000 TagTable 184.446 ms 3.3447 ms 2.9650 ms

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.