StreamStore.S3.AWS 0.7.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package StreamStore.S3.AWS --version 0.7.0                
NuGet\Install-Package StreamStore.S3.AWS -Version 0.7.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="StreamStore.S3.AWS" Version="0.7.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add StreamStore.S3.AWS --version 0.7.0                
#r "nuget: StreamStore.S3.AWS, 0.7.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install StreamStore.S3.AWS as a Cake Addin
#addin nuget:?package=StreamStore.S3.AWS&version=0.7.0

// Install StreamStore.S3.AWS as a Cake Tool
#tool nuget:?package=StreamStore.S3.AWS&version=0.7.0                

StreamStore.S3.AWS

NuGet version (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 for pessimistic 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 data
      • events - 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 data
        • events - 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

MIT License

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.9.0 60 11/26/2024
0.8.0 75 11/17/2024
0.7.0 78 11/15/2024
0.6.0 84 11/8/2024
0.5.0 87 10/20/2024
0.4.0 108 10/19/2024
0.3.0 80 10/16/2024
0.2.0 95 10/11/2024
0.1.0 93 10/9/2024