Skip to content

Commit 222c0c9

Browse files
authored
Initial commit (#5)
* Initial commit * fixture implementation * Pivot to BenchmarkDotNet * Implement all benchmarks * Tweak actor creation * Tweak benchmark values * Update readme and result
1 parent 5bc04a2 commit 222c0c9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1675
-111
lines changed

Akka.Persistence.Benchmarks.sln

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionFolder", "SolutionFolder", "{CB6C1195-5067-47DB-8196-75576697DFCC}"
4+
ProjectSection(SolutionItems) = preProject
5+
coverlet.runsettings = coverlet.runsettings
6+
Directory.Build.props = Directory.Build.props
7+
Directory.Packages.props = Directory.Packages.props
8+
global.json = global.json
9+
README.md = README.md
10+
RELEASE_NOTES.md = RELEASE_NOTES.md
11+
RESULT.md = RESULT.md
12+
EndProjectSection
13+
EndProject
14+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Akka.Persistence.Benchmarks", "src\Akka.Persistence.Benchmarks\Akka.Persistence.Benchmarks.csproj", "{A2743044-7635-4DE5-931F-9D53624EBC1B}"
15+
EndProject
16+
Global
17+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
18+
Debug|Any CPU = Debug|Any CPU
19+
Release|Any CPU = Release|Any CPU
20+
EndGlobalSection
21+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
22+
{A2743044-7635-4DE5-931F-9D53624EBC1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
23+
{A2743044-7635-4DE5-931F-9D53624EBC1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
24+
{A2743044-7635-4DE5-931F-9D53624EBC1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
25+
{A2743044-7635-4DE5-931F-9D53624EBC1B}.Release|Any CPU.Build.0 = Release|Any CPU
26+
EndGlobalSection
27+
EndGlobal

Directory.Build.props

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@
1616
<NetLibVersion>net6.0</NetLibVersion>
1717
<NetCoreTestVersion>net9.0</NetCoreTestVersion>
1818
</PropertyGroup>
19-
<ItemGroup>
20-
<Using Include="Akka.Event" />
21-
</ItemGroup>
2219
<!-- GitHub SourceLink -->
2320
<ItemGroup>
2421
<PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" />

Directory.Packages.props

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,41 @@
66
</PropertyGroup>
77
<!-- App dependencies -->
88
<ItemGroup>
9-
<PackageVersion Include="Akka.Hosting" Version="$(AkkaHostingVersion)"/>
10-
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.8"/>
9+
<PackageVersion Include="Akka.Hosting" Version="$(AkkaHostingVersion)" />
10+
<PackageVersion Include="Akka.Hosting.TestKit" Version="$(AkkaHostingVersion)" />
11+
<PackageVersion Include="Akka.Persistence.Azure" Version="1.5.51.1" />
12+
<PackageVersion Include="Akka.Persistence.Azure.Hosting" Version="1.5.51.1" />
13+
<PackageVersion Include="Akka.Persistence.MongoDb" Version="1.5.42" />
14+
<PackageVersion Include="Akka.Persistence.MongoDb.Hosting" Version="1.5.42" />
15+
<PackageVersion Include="Akka.Persistence.PostgreSql" Version="1.5.37" />
16+
<PackageVersion Include="Akka.Persistence.Redis" Version="1.5.42" />
17+
<PackageVersion Include="Akka.Persistence.Redis.Hosting" Version="1.5.42" />
18+
<PackageVersion Include="Akka.Persistence.Sql" Version="1.5.51.1" />
19+
<PackageVersion Include="Akka.Persistence.Sql.Hosting" Version="1.5.51.1" />
20+
<PackageVersion Include="Akka.Persistence.Sqlite" Version="1.5.39" />
21+
<PackageVersion Include="Aspire.Hosting.SqlServer" Version="9.5.1" />
22+
<PackageVersion Include="MathNet.Numerics" Version="5.0.0" />
23+
<PackageVersion Include="BenchmarkDotNet" Version="0.15.4" />
24+
<PackageVersion Include="Microsoft.Data.SqlClient" Version="6.1.2" />
25+
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.8" />
26+
<PackageVersion Include="Aspire.Hosting.AppHost" Version="9.3.1" />
27+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
28+
<PackageVersion Include="Mongo2Go" Version="4.1.0" />
29+
<PackageVersion Include="MySql.Data" Version="9.4.0" />
30+
<PackageVersion Include="Npgsql" Version="9.0.00&#xD;&#xA;" />
31+
<PackageVersion Include="Testcontainers.Azurite" Version="4.7.0" />
32+
<PackageVersion Include="TestContainers.Container.Database.MsSql" Version="1.5.4" />
33+
<PackageVersion Include="TestContainers.Container.Database.MySql" Version="1.5.4" />
34+
<PackageVersion Include="TestContainers.Container.Database.PostgreSql" Version="1.5.4" />
35+
<PackageVersion Include="Testcontainers.MongoDb" Version="4.7.0" />
36+
<PackageVersion Include="Testcontainers.MsSql" Version="4.7.0" />
37+
<PackageVersion Include="Testcontainers.MySql" Version="4.7.0" />
38+
<PackageVersion Include="Testcontainers.PostgreSql" Version="4.7.0" />
39+
<PackageVersion Include="Testcontainers.Redis" Version="4.7.0" />
1140
</ItemGroup>
1241
<!-- Test dependencies -->
1342
<!-- SourceLink support for all Akka.NET projects -->
1443
<ItemGroup>
15-
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0"/>
44+
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
1645
</ItemGroup>
1746
</Project>

README.md

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,163 @@
1+
# Akka.Persistence Benchmark Results
2+
3+
## Test Environment
4+
5+
```
6+
BenchmarkDotNet v0.15.4, Windows 10 (10.0.19045.6332/22H2/2022Update)
7+
AMD Ryzen 9 3900X 3.79GHz, 1 CPU, 24 logical and 12 physical cores
8+
.NET SDK 9.0.110
9+
[Host] : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3
10+
LongRun : .NET 9.0.9 (9.0.9, 9.0.925.41916), X64 RyuJIT x86-64-v3
11+
12+
Job=LongRun EvaluateOverhead=False Concurrent=True
13+
Server=True InvocationCount=1 IterationCount=10
14+
LaunchCount=3 RunStrategy=Monitoring UnrollFactor=1
15+
WarmupCount=3
16+
```
17+
18+
---
19+
20+
## Azure Table Storage
21+
22+
### Azure Group Persist Benchmark
23+
24+
| Method | BatchSize | Mean | Error | StdDev | msg/sec |
25+
|--------------|-----------|-------------:|--------------:|--------------:|----------------:|
26+
| **Persist** | **1** | **NA** | **NA** | **NA** | **<not found>** |
27+
| PersistAsync | 1 | NA | NA | NA | <not found> |
28+
| **Persist** | **100** | **1.008 ms** | **0.2551 ms** | **0.3818 ms** | **991.91** |
29+
| PersistAsync | 100 | 1.032 ms | 0.2684 ms | 0.4018 ms | 968.57 |
30+
31+
**Note**: Benchmarks with issues for BatchSize=1
32+
33+
### Azure Persist Benchmark
34+
35+
| Method | BatchSize | Mean | Error | StdDev | msg/sec |
36+
|--------------|-----------|---------------:|--------------:|--------------:|-------------:|
37+
| **Persist** | **1** | **2,718.9 μs** | **142.66 μs** | **213.53 μs** | **367.80** |
38+
| PersistAsync | 1 | 2,685.5 μs | 111.16 μs | 166.38 μs | 372.37 |
39+
| **Persist** | **100** | **277.2 μs** | **25.16 μs** | **37.66 μs** | **3,607.36** |
40+
| PersistAsync | 100 | 283.8 μs | 40.57 μs | 60.73 μs | 3,523.35 |
41+
42+
### Azure Recovery Benchmark
43+
44+
| Method | Mean | Error | StdDev | msg/sec |
45+
|------------------------ |---------:|---------:|---------:|----------:|
46+
| RecoveryBenchmarkMethod | 30.85 μs | 2.768 μs | 4.143 μs | 32,417.54 |
47+
48+
---
49+
50+
## MongoDB
51+
52+
### MongoDB Group Persist Benchmark
53+
54+
| Method | BatchSize | Mean | Error | StdDev | Median | msg/sec |
55+
|--------------|-----------|-------------:|--------------:|--------------:|--------------:|--------------:|
56+
| **Persist** | **1** | **76.60 μs** | **10.226 μs** | **15.307 μs** | **73.260 μs** | **13,054.79** |
57+
| PersistAsync | 1 | 76.47 μs | 6.315 μs | 9.451 μs | 73.763 μs | 13,077.38 |
58+
| **Persist** | **100** | **12.73 μs** | **4.833 μs** | **7.233 μs** | **9.040 μs** | **78,582.94** |
59+
| PersistAsync | 100 | 11.74 μs | 4.216 μs | 6.310 μs | 8.960 μs | 85,179.51 |
60+
61+
### MongoDB Persist Benchmark
62+
63+
| Method | BatchSize | Mean | Error | StdDev | msg/sec |
64+
|--------------|-----------|--------------:|--------------:|--------------:|--------------:|
65+
| **Persist** | **1** | **396.07 μs** | **60.553 μs** | **90.632 μs** | **2,524.80** |
66+
| PersistAsync | 1 | 384.12 μs | 55.282 μs | 82.743 μs | 2,603.38 |
67+
| **Persist** | **100** | **48.56 μs** | **2.322 μs** | **3.476 μs** | **20,591.09** |
68+
| PersistAsync | 100 | 48.24 μs | 2.071 μs | 3.099 μs | 20,730.80 |
69+
70+
### MongoDB Recovery Benchmark
71+
72+
| Method | Mean | Error | StdDev | msg/sec |
73+
|------------------------ |---------:|---------:|---------:|----------:|
74+
| RecoveryBenchmarkMethod | 30.76 μs | 1.420 μs | 2.126 μs | 32,511.04 |
75+
76+
---
77+
78+
## PostgreSQL
79+
80+
### PostgreSQL Group Persist Benchmark
81+
82+
| Method | BatchSize | Mean | Error | StdDev | msg/sec |
83+
|--------------|-----------|--------------:|--------------:|--------------:|--------------:|
84+
| **Persist** | **1** | **248.14 μs** | **15.827 μs** | **23.688 μs** | **4,030.00** |
85+
| PersistAsync | 1 | 248.91 μs | 16.294 μs | 24.388 μs | 4,017.59 |
86+
| **Persist** | **100** | **22.24 μs** | **4.922 μs** | **7.367 μs** | **44,969.43** |
87+
| PersistAsync | 100 | 21.50 μs | 3.884 μs | 5.813 μs | 46,521.44 |
88+
89+
### PostgreSQL Persist Benchmark
90+
91+
| Method | BatchSize | Mean | Error | StdDev | msg/sec |
92+
|--------------|-----------|----------------:|--------------:|-------------:|--------------:|
93+
| **Persist** | **1** | **1,127.35 μs** | **50.388 μs** | **75.42 μs** | **887.04** |
94+
| PersistAsync | 1 | 1,108.13 μs | 43.096 μs | 64.50 μs | 902.42 |
95+
| **Persist** | **100** | **46.10 μs** | **7.517 μs** | **11.25 μs** | **21,693.92** |
96+
| PersistAsync | 100 | 54.10 μs | 8.196 μs | 12.27 μs | 18,485.15 |
97+
98+
### PostgreSQL Recovery Benchmark
99+
100+
| Method | Mean | Error | StdDev | msg/sec |
101+
|------------------------ |---------:|---------:|---------:|----------:|
102+
| RecoveryBenchmarkMethod | 15.81 μs | 1.586 μs | 2.373 μs | 63,246.99 |
103+
104+
---
105+
106+
## Redis
107+
108+
### Redis Group Persist Benchmark
109+
110+
| Method | BatchSize | Mean | Error | StdDev | msg/sec |
111+
|--------------|-----------|--------------:|--------------:|--------------:|---------------:|
112+
| **Persist** | **1** | **68.245 μs** | **4.1685 μs** | **6.2393 μs** | **14,653.11** |
113+
| PersistAsync | 1 | 66.768 μs | 4.1736 μs | 6.2469 μs | 14,977.15 |
114+
| **Persist** | **100** | **6.114 μs** | **0.8959 μs** | **1.3410 μs** | **163,571.66** |
115+
| PersistAsync | 100 | 5.844 μs | 0.5898 μs | 0.8828 μs | 171,128.92 |
116+
117+
### Redis Persist Benchmark
118+
119+
| Method | BatchSize | Mean | Error | StdDev | msg/sec |
120+
|--------------|-----------|--------------:|--------------:|--------------:|--------------:|
121+
| **Persist** | **1** | **546.84 μs** | **22.830 μs** | **34.170 μs** | **1,828.68** |
122+
| PersistAsync | 1 | 565.79 μs | 33.090 μs | 49.527 μs | 1,767.45 |
123+
| **Persist** | **100** | **17.32 μs** | **1.677 μs** | **2.511 μs** | **57,751.15** |
124+
| PersistAsync | 100 | 16.84 μs | 2.027 μs | 3.034 μs | 59,394.70 |
125+
126+
### Redis Recovery Benchmark
127+
128+
| Method | Mean | Error | StdDev | msg/sec |
129+
|------------------------ |---------:|---------:|---------:|----------:|
130+
| RecoveryBenchmarkMethod | 10.36 μs | 0.564 μs | 0.845 μs | 96,570.90 |
131+
132+
---
133+
134+
## SQL Server
135+
136+
### SQL Server Group Persist Benchmark
137+
138+
| Method | BatchSize | Mean | Error | StdDev | msg/sec |
139+
|--------------|-----------|--------------:|--------------:|--------------:|--------------:|
140+
| **Persist** | **1** | **977.86 μs** | **41.547 μs** | **62.186 μs** | **1,022.64** |
141+
| PersistAsync | 1 | 977.57 μs | 41.637 μs | 62.320 μs | 1,022.94 |
142+
| **Persist** | **100** | **73.32 μs** | **5.269 μs** | **7.886 μs** | **13,638.03** |
143+
| PersistAsync | 100 | 72.80 μs | 4.537 μs | 6.790 μs | 13,736.47 |
144+
145+
### SQL Server Persist Benchmark
146+
147+
| Method | BatchSize | Mean | Error | StdDev | msg/sec |
148+
|--------------|-----------|---------------:|--------------:|--------------:|-------------:|
149+
| **Persist** | **1** | **5,016.0 μs** | **186.50 μs** | **279.15 μs** | **199.36** |
150+
| PersistAsync | 1 | 5,093.4 μs | 302.33 μs | 452.52 μs | 196.33 |
151+
| **Persist** | **100** | **141.3 μs** | **17.89 μs** | **26.78 μs** | **7,079.37** |
152+
| PersistAsync | 100 | 139.9 μs | 18.32 μs | 27.42 μs | 7,150.51 |
153+
154+
### SQL Server Recovery Benchmark
155+
156+
| Method | Mean | Error | StdDev | msg/sec |
157+
|------------------------ |---------:|---------:|---------:|----------:|
158+
| RecoveryBenchmarkMethod | 39.89 μs | 8.668 μs | 12.97 μs | 25,069.10 |
159+
160+
1161
# build-system-template
2162
Akka.NET project build system template that provides standardized build and CI/CD configuration for all Akka.NET projects.
3163

0 commit comments

Comments
 (0)