StreamStore.S3.B2 0.4.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package StreamStore.S3.B2 --version 0.4.0                
NuGet\Install-Package StreamStore.S3.B2 -Version 0.4.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.B2" Version="0.4.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add StreamStore.S3.B2 --version 0.4.0                
#r "nuget: StreamStore.S3.B2, 0.4.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.B2 as a Cake Addin
#addin nuget:?package=StreamStore.S3.B2&version=0.4.0

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

StreamStore.S3.B2

NuGet version (StreamStore.S3.B2)

Backblaze B2 backend database for StreamStore event stream 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.B2

or from Nuget Package Manager Console:



  Install-Package StreamStore

  Install-Package StreamStore.S3.B2

Usage

Storage

To be able to use library you need to have already created a bucket in Backblaze B2, by default named streamstore and have read and write permissions to it.

Configuration

For using Backblaze B2 as a storage backend, you need to provide the following configuration in your appsettings.json file:

{
  "StreamStore": {
    "B2": {
      "bucketName": "your-bucket-name",
      "bucketId": "your-bucket-id",
      "applicationKeyId": "your-application-key-id",
      "applicationKey": "your-application-key",
    }
  }
}

or you can provide the configuration in code, see section below.

Register in DI container

   // Adding StreamStore
   services.ConfigureStreamStore();

   // Adding B2 database with configuration from appsettings.json
   services.UseB2StreamStoreDatabase(Configuration);

  // Or configuring it manually
  services
    .ConfigureB2StreamStoreDatabase()
      .WithBucketId("your-bucket-id")
      .WithBucketName("your-bucket-name")
      .WithCredentials("your-application-key-id","your-application-key")
    .Configure();

  • 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 B2 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.B2.Example project.

Testing

To be able to run tests from StreamStore.S3.Tests project, you need to create and provide the following configuration in your appsettings.Development.json file:

{
  "b2": {
      "bucketName": "your-bucket-name",
      "bucketId": "your-bucket-id",
      "applicationKeyId": "your-application-key-id",
      "applicationKey": "your-application-key",
    }
  
}

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 61 11/17/2024
0.8.0 78 11/15/2024
0.7.0 84 11/8/2024
0.6.0 103 10/19/2024
0.5.0 83 10/16/2024
0.4.1 84 10/9/2024
0.4.0 78 10/8/2024
0.1.0 75 10/8/2024