CosmosAutoScaler 0.0.2-beta

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

// Install CosmosAutoScaler as a Cake Tool
#tool nuget:?package=CosmosAutoScaler&version=0.0.2-beta&prerelease                

Cosmos Auto Scaler

Cosmos Auto Scaler is a library for automatically scaling the RU based on the request load. The algorithm listens to the 429 returned from CosmosDB and increases the limit by increments of 500RU for each iteration. User is capable of adjusting the maximum RU to make sure that the software does not exceed the budget. The library is thread safe, there fore it can be called in parallel. Library will only do the scale operation once for every 1 second. In addition, there is a cool down algorithm that tracks the activities for each collection and scales down based on the minimum RU provided by the user. Scale down occurs for 5 minute of inactivity.

Getting Started

Using the library is simple. Download the latest nuget package from https://www.nuget.org/packages/CosmosAutoScaler. Currently the supported functionalities are: Insert, Delete, Replace, and Query. Bulk operations are coming soon.

Usage

Create a cosmos scale operator for each collection that you are wanting to run operations on. In the following example, we set 600RU as minimum and 1500RU as maxmium. Database is called NewDatabase1, with collection name of "test". CosmosScaleOperator does require to pass down the DocumentCleint.

 DocumentClient _client = new DocumentClient(new Uri("COSMOS_URL"), "COSMOS_PASS",
              new ConnectionPolicy
              {
                  ConnectionMode = ConnectionMode.Direct,
                  ConnectionProtocol = Protocol.Tcp,
                  RequestTimeout = TimeSpan.FromMinutes(5) // this is important depending on the concurrency 
              });
CosmosScaleOperator op = new CosmosScaleOperator(600, 15000, "NewDatabase1", "test", _client);  

If you would like the library to create the Database and Collection for you, call the InitializeResourcesAsync function and pass in the desired request options

await op.InitializeResourcesAsync();  

To do CRUD operations, simply call the repsective function for 1-N documents.

_cosmosOperator.QueryCosmos<OBJ>("SELECT * FROM C");
await _cosmosOperator.InsertDocumentAsync(some_document);
await _cosmosOperator.DeleteDocumentAsync(some_document.id);
await _cosmosOperator.ReplaceDocument(some_document.id, new_document);

Authors

  • Giorgi (Gio) Tediashvili - Initial work - Gio

See also the list of contributors who participated in this project.

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 netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  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
1.0.0 1,261 12/14/2018
0.0.2-beta 593 12/5/2018
0.0.1 750 12/5/2018

This is a beta version of the auto scaler.