StreamStore.S3.AWS
0.8.0
See the version list below for details.
dotnet add package StreamStore.S3.AWS --version 0.8.0
NuGet\Install-Package StreamStore.S3.AWS -Version 0.8.0
<PackageReference Include="StreamStore.S3.AWS" Version="0.8.0" />
paket add StreamStore.S3.AWS --version 0.8.0
#r "nuget: StreamStore.S3.AWS, 0.8.0"
// Install StreamStore.S3.AWS as a Cake Addin #addin nuget:?package=StreamStore.S3.AWS&version=0.8.0 // Install StreamStore.S3.AWS as a Cake Tool #tool nuget:?package=StreamStore.S3.AWS&version=0.8.0
StreamStore.S3.AWS
Amazon S3 backend database for StreamStore asynchronous event sourcing library.
Installation
To install the package, you can use the following command from the command line:
dotnet add package StreamStore
dotnet add package StreamStore.S3.AWS
or from Nuget Package Manager Console:
Install-Package StreamStore
Install-Package StreamStore.S3.AWS
Usage
Storage
To be able to use library you need to:
- Create an S3 bucket, by default named
streamstore
and have read, write, list and delete permissions to it. - Enable bucket versioning.
Configuration
Library is using an official Amazon AWSSDK.S3 nuget package, so you must follow the AWSSDK.S3 configuration steps.
or you can provide the configuration in code, see section below.
Register in DI container
services.ConfigureStreamStore(x =>
x.WithSingleDatabase(c =>
c.UseAWSDatabase(
c => c.WithBucketName("bucket-name")) // Bucket name, optional, by default "streamstore"
)
);
If you want to use advanced scenarios for configuring the S3 client, you can create and register your own IAmazonS3ClientFactory
:
services.AddSingleton<IAmazonS3ClientFactory, YourOwnAmazonClientFactory>();
- For usage of StreamStore, please refer to the StreamStore documentation.
Good to know
The library implements
two-phase locking mechanism
forpessimistic concurrency control
on stream level.
First, it trying to lock in memory and if it is successful, it tries to exclusively lock stream in the storage for the duration of the transaction. If it fails to lock in storage, it will release the lock in memory.Since S3 storage does not provide locking mechanism for files, lock in storage implemented by creating a file with the same name as the stream id and trying to lock it by creating a file with the same name and checking if it is already exists.
Committed and uncommitted events are stored in separate root directories.
Each event is stored in a separate file with the name of the event id.
Each stream is stored in a separate directory with the name of the stream id.
Storage structure
persistent-streams
- committed streams[stream-id]
- directory with stream dataevents
- directory with events[event-id]
- file with event data
__metadata
- file with stream metadata
transient-streams
- uncommitted streams[stream-id]
- directory with stream transactions[transaction-id]
- directory with transaction dataevents
- directory with events[event-id]
- file with event data
__metadata
- file with transaction metadata
locks
- directory with locks[stream-id]
- file with lock data
Example
You can find an example of usage in the StreamStore.S3.Example project.
Testing
To be able to run tests from StreamStore.S3.Tests project, you need to create empty appsettings.Development.json
file.
License
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- AWSSDK.S3 (>= 3.7.404.4)
- Microsoft.Extensions.Hosting (>= 8.0.1)
- StreamStore.Contracts (>= 0.8.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.