GridGain.Ignite 9.1.15

Prefix Reserved
dotnet add package GridGain.Ignite --version 9.1.15
                    
NuGet\Install-Package GridGain.Ignite -Version 9.1.15
                    
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="GridGain.Ignite" Version="9.1.15" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="GridGain.Ignite" Version="9.1.15" />
                    
Directory.Packages.props
<PackageReference Include="GridGain.Ignite" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add GridGain.Ignite --version 9.1.15
                    
#r "nuget: GridGain.Ignite, 9.1.15"
                    
#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.
#:package GridGain.Ignite@9.1.15
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=GridGain.Ignite&version=9.1.15
                    
Install as a Cake Addin
#tool nuget:?package=GridGain.Ignite&version=9.1.15
                    
Install as a Cake Tool

Apache Ignite 3 .NET Client

.NET client for Apache Ignite - a distributed database for high‑performance applications with in‑memory speed.

Key Features

  • Full support of all Ignite APIs: SQL, Transactions, Key/Value, Compute.
  • Connects to any number of Ignite nodes at the same time.
  • Partition awareness: sends key-based requests to the right node.
  • Load-balancing, failover, automatic reconnection and request retries.
  • Built-in LINQ provider for strongly-typed SQL queries.
  • Integrates with NodaTime to provide precise mapping to Ignite date/time types.
  • Logging and metrics.
  • High performance and fully asynchronous.

Getting Started

Below are a few examples of basic usage to get you started:

// Connect to the cluster.
var cfg = new IgniteClientConfiguration("127.0.0.1:10800");
IIgniteClient client = await IgniteClient.StartAsync(cfg);

// Start a read-only transaction.
await using var tx = await client.Transactions.BeginAsync(
    new TransactionOptions { ReadOnly = true });

// Get table by name.
ITable? table = await client.Tables.GetTableAsync("Person");

// Get a strongly-typed view of table data using Person record.
IRecordView<Person> view = table!.GetRecordView<Person>();

// Upsert a record with KV (NoSQL) API.
await view.UpsertAsync(tx, new Person(1, "John"));

// Query data with SQL.
await using var resultSet = await client.Sql.ExecuteAsync<Person>(
    tx, "SELECT * FROM Person");
    
List<Person> sqlResults = await resultSet.ToListAsync();

// Query data with LINQ.
List<string> names  = view.AsQueryable(tx)
    .OrderBy(person => person.Name)
    .Select(person => person.Name)
    .ToList();

// Execute a distributed computation.
IList<IClusterNode> nodes = await client.GetClusterNodesAsync();
IJobTarget<IEnumerable<IClusterNode>> jobTarget = JobTarget.AnyNode(nodes);
var jobDesc = new JobDescriptor<string, int>(
    "org.foo.bar.WordCountJob");
IJobExecution<int> jobExecution = await client.Compute.SubmitAsync(
    jobTarget, jobDesc, "Hello, world!");

int wordCount = await jobExecution.GetResultAsync();

API Walkthrough

Configuration

IgniteClientConfiguration is used to configure connections properties (endpoints, SSL), retry policy, logging, and timeouts.

var cfg = new IgniteClientConfiguration
{
    // Connect to multiple servers.
    Endpoints = { "server1:10800", "server2:10801" },

    // Enable TLS.
    SslStreamFactory = new SslStreamFactory
    {
        SslClientAuthenticationOptions = new SslClientAuthenticationOptions
        {
            // Allow self-signed certificates.
            RemoteCertificateValidationCallback = 
                (sender, certificate, chain, errors) => true
        }
    },    
        
    // Retry all read operations in case of network issues.
    RetryPolicy = new RetryReadPolicy { RetryLimit = 32 }
};

SQL

SQL is the primary API for data access. It is used to create, drop, and query tables, as well as to insert, update, and delete data.

using var client = await IgniteClient.StartAsync(new("localhost"));

await client.Sql.ExecuteAsync(
    null, "CREATE TABLE Person (Id INT PRIMARY KEY, Name VARCHAR)");

await client.Sql.ExecuteAsync(
    null, "INSERT INTO Person (Id, Name) VALUES (1, 'John Doe')");

await using var resultSet = await client.Sql.ExecuteAsync(
    null, "SELECT Name FROM Person");

await foreach (IIgniteTuple row in resultSet)
    Console.WriteLine(row[0]);

Mapping SQL Results to User Types

SQL results can be mapped to user types using ExecuteAsync<T> method. This is cleaner and more efficient than IIgniteTuple approach above.

await using var resultSet = await client.Sql.ExecuteAsync<Person>(
    null, "SELECT Name FROM Person");
    
await foreach (Person p in resultSet)
    Console.WriteLine(p.Name);
    
public record Person(int Id, string Name);

Column names are matched to record properties by name. To map columns to properties with different names, use ColumnAttribute.

DbDataReader (ADO.NET API)

Another way to work with query results is System.Data.Common.DbDataReader, which can be obtained with ExecuteReaderAsync method.

For example, you can bind query results to a DataGridView control:

await using var reader = await client.Sql.ExecuteReaderAsync(
    null, "select * from Person");

var dt = new DataTable();
dt.Load(reader);

dataGridView1.DataSource = dt;

NoSQL

NoSQL API is used to store and retrieve data in a key/value fashion. It can be more efficient than SQL in certain scenarios. Existing tables can be accessed, but new tables can only be created with SQL.

First, get a table by name:

ITable? table = await client.Tables.GetTableAsync("Person");

Then, there are two ways to look at the data.

Record View

Record view represents the entire row as a single object. It can be an IIgniteTuple or a user-defined type.

IRecordView<IIgniteTuple> binaryView = table.RecordBinaryView;
IRecordView<Person> view = table.GetRecordView<Person>();

await view.UpsertAsync(null, new Person(1, "John"));

KeyValue View

Key/Value view splits the row into key and value parts.

IKeyValueView<IIgniteTuple, IIgniteTuple> kvBinaryView = table.KeyValueBinaryView;
IKeyValueView<PersonKey, Person> kvView = table.GetKeyValueView<PersonKey, Person>();

await kvView.PutAsync(null, new PersonKey(1), new Person("John"));

LINQ

Data can be queried and modified with LINQ using AsQueryable method. LINQ expressions are translated to SQL queries and executed on the server.

ITable? table = await client.Tables.GetTableAsync("Person");
IRecordView<Person> view = table!.GetRecordView<Person>();

IQueryable<string> query = view.AsQueryable()
    .Where(p => p.Id > 100)
    .Select(p => p.Name);

List<string> names = await query.ToListAsync();

Generated SQL can be retrieved with ToQueryString extension method, or by enabling debug logging.

Bulk update and delete with optional conditions are supported via ExecuteUpdateAsync and ExecuteDeleteAsync extensions methods on IQueryable<T>

Transactions

All operations on data in Ignite are transactional. If a transaction is not specified, an explicit transaction is started and committed automatically.

To start a transaction, use ITransactions.BeginAsync method. Then, pass the transaction object to all operations that should be part of the same transaction.

await using ITransaction tx = await client.Transactions.BeginAsync();

await view.UpsertAsync(tx, new Person(1, "John"));

await client.Sql.ExecuteAsync(
    tx, "INSERT INTO Person (Id, Name) VALUES (2, 'Jane')");

await view.AsQueryable(tx)
    .Where(p => p.Id > 0)
    .ExecuteUpdateAsync(updater => 
        updater.SetProperty(person => person.Name, person => person.Name + " Doe"));

await tx.CommitAsync();

Compute

Compute API is used to execute distributed computations on the cluster.

Compute jobs can be implemented in Java or .NET. Resulting binaries (jar or dll files) should be deployed to the server nodes and called by the full class name.

Call a Java Compute Job

You can call Java computing jobs from your .NET code, for example:

IList<IClusterNode> nodes = await client.GetClusterNodesAsync();
IJobTarget<IEnumerable<IClusterNode>> jobTarget = JobTarget.AnyNode(nodes);

var jobDesc = new JobDescriptor<string, string>(
    JobClassName: "org.foo.bar.MyJob",
    DeploymentUnits: [new DeploymentUnit("Unit1")]);

IJobExecution<string> jobExecution = await client.Compute.SubmitAsync(
    jobTarget, jobDesc, "Job Arg");

string jobResult = await jobExecution.GetResultAsync();

Implement a .NET Compute Job

  1. Prepare a "class library" project for the job implementation (dotnet new classlib). In most cases, it is better to use a separate project for compute jobs to reduce deployment size.
  2. Add a reference to Apache.Ignite package to the class library project (dotnet add package Apache.Ignite).
  3. Create a class that implements IComputeJob<TArg, TRes> interface, for example:
    public class HelloJob : IComputeJob<string, string>
    {
        public ValueTask<string> ExecuteAsync(IJobExecutionContext context, string arg, CancellationToken cancellationToken) =>
            ValueTask.FromResult("Hello " + arg);
    }
    
  4. Publish the project (dotnet publish -c Release).
  5. Copy the resulting dll file (and any extra dependencies, EXCLUDING Ignite dlls) to a separate directory.
    • Note: The directory with the dll must not contain any subdirectories.
  6. Use Ignite CLI cluster unit deploy command to deploy the directory to the cluster as a deployment unit.

Run a .NET Compute Job

.NET compute jobs can be executed from any client (.NET, Java, C++, etc), by specifying the assembly-qualified class name and using the JobExecutorType.DotNetSidecar option.

var jobTarget = JobTarget.AnyNode(await client.GetClusterNodesAsync());
var jobDesc = new JobDescriptor<string, string>(
    JobClassName: typeof(HelloJob).AssemblyQualifiedName!,
    DeploymentUnits: [new DeploymentUnit("unit1")],
    Options: new JobExecutionOptions(ExecutorType: JobExecutorType.DotNetSidecar));

IJobExecution<string> jobExec = await client.Compute.SubmitAsync(jobTarget, jobDesc, "world");

Alternatively, use the JobDescriptor.Of shortcut method to create a job descriptor from a job instance:

JobDescriptor<string, string> jobDesc = JobDescriptor.Of(new HelloJob())
    with { DeploymentUnits = [new DeploymentUnit("unit1")] };
Notes
  • .NET 8 (or later) runtime (not SDK) is required on the server nodes.
  • .NET compute jobs are executed in a separate process (sidecar) on the server node.
  • The process is started on the first .NET job call and then reused for subsequent jobs.
  • Every deployment unit combination is loaded into a separate AssemblyLoadContext.

Failover, Retry, Reconnect, Load Balancing

Ignite client implements a number of features to improve reliability and performance:

  • When multiple endpoints are configured, the client will maintain connections to all of them, and load balance requests between them.
  • If a connection is lost, the client will try to reconnect, assuming it may be a temporary network issue or a node restart.
  • Periodic heartbeat messages are used to detect connection issues early.
  • If a user request fails due to a connection issue, the client will retry it automatically according to the configured IgniteClientConfiguration.RetryPolicy.

Logging

To enable logging, set IgniteClientConfiguration.LoggerFactory property. It uses the standard Microsoft.Extensions.Logging API.

For example, to log to console (requires Microsoft.Extensions.Logging.Console package):

var cfg = new IgniteClientConfiguration
{
    LoggerFactory = LoggerFactory.Create(builder => builder.AddConsole().SetMinimumLevel(LogLevel.Debug))
};

Or with Serilog (requires Serilog.Extensions.Logging and Serilog.Sinks.Console packages):

var cfg = new IgniteClientConfiguration
{
    LoggerFactory = LoggerFactory.Create(builder =>
        builder.AddSerilog(new LoggerConfiguration()
            .MinimumLevel.Debug()
            .WriteTo.Console()
            .CreateLogger()))
};

Metrics

Ignite client exposes a number of metrics with Apache.Ignite meter name through the System.Diagnostics.Metrics API that can be used to monitor system health and performance.

For example, dotnet-counters tool can be used like this:

dotnet-counters monitor --counters Apache.Ignite,System.Runtime --process-id PID

Documentation

Full documentation is available at https://ignite.apache.org/docs.

Feedback

Use any of the following channels to provide feedback:

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  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.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (8)

Showing the top 5 NuGet packages that depend on GridGain.Ignite:

Package Downloads
GridGain

The GridGain In-Memory Computing Platform, built on Apache Ignite, enables you to dramatically accelerate and scale out your existing data-intensive applications without ripping and replacing your existing databases.

GridGain.Ignite.Linq

Apache Ignite LINQ Provider. Query distributed in-memory data in a strongly-typed manner and with IDE support. All Ignite SQL features are supported: distributed joins, groupings, aggregates, field queries, and more.

GridGain.Ignite.NLog

Apache Ignite NLog Logger.

GridGain.Ignite.Log4Net

Apache Ignite log4net Logger.

GridGain.Ignite.AspNet

Apache Ignite ASP.NET Integration. Output Cache Provider: caches page output in a distributed in-memory cache. Session State Store Provider: stores session state data in a distributed in-memory cache.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
9.1.15 353 12/8/2025
9.1.14 168 11/28/2025
9.1.13 196 11/24/2025
9.1.12 209 11/7/2025
9.1.11 229 10/28/2025
9.1.10 215 10/14/2025
9.1.10-patch1 272 10/28/2025
9.1.9 420 9/26/2025
9.1.8 399 9/18/2025
9.1.7 274 8/28/2025
9.1.6 191 8/21/2025
9.1.5 124 8/1/2025
9.1.4 214 7/11/2025
9.1.3 235 6/23/2025
9.1.2 235 6/4/2025
9.1.1 205 5/23/2025
9.1.0 1,011 5/9/2025
9.1.0-rc3 229 4/30/2025
9.1.0-rc2 172 4/25/2025
9.1.0-rc1 220 4/11/2025
9.0.17 461 3/27/2025
9.0.16 194 3/14/2025
9.0.15 295 3/4/2025
9.0.14 213 2/14/2025
9.0.13 192 1/29/2025
9.0.12 737 1/16/2025
9.0.11 204 12/18/2024
9.0.10 184 12/9/2024
9.0.9 222 11/20/2024
9.0.8 210 10/30/2024
9.0.7 222 10/8/2024
9.0.6 208 9/24/2024
9.0.5 227 9/9/2024
9.0.4 182 8/28/2024
9.0.3 240 8/15/2024
9.0.2 159 7/31/2024
9.0.1 372 7/18/2024
9.0.0-g4d770d8f1f 162 7/9/2024
8.9.27 359 11/27/2025
8.9.26 411 10/27/2025
8.9.25 368 9/24/2025
8.9.24 427 9/1/2025
8.9.23.1 540 11/20/2025
8.9.23 293 7/31/2025
8.9.22.1 354 7/16/2025
8.9.22 916 6/30/2025
8.9.21 332 6/6/2025
8.9.20.1 363 9/25/2025
8.9.20 431 5/2/2025
8.9.19 873 4/11/2025
8.9.18 424 3/14/2025
8.9.17.1 281 11/28/2025
8.9.17 919 1/24/2025
8.9.16.3 461 9/16/2025
8.9.16.2 516 6/10/2025
8.9.16.1 466 2/17/2025
8.9.16 3,400 1/23/2025
8.9.15 896 12/4/2024
8.9.14 668 11/7/2024
8.9.13 1,329 10/24/2024
8.9.12 702 10/9/2024
8.9.11 600 9/12/2024
8.9.10.1 468 11/11/2024
8.9.10 1,277 8/16/2024
8.9.9.1 425 1/20/2025
8.9.9 2,344 7/26/2024
8.9.8 560 7/19/2024
8.9.7.1 610 9/11/2024
8.9.7 675 6/14/2024
8.9.6 645 5/29/2024
8.9.5 1,011 5/10/2024
8.9.4 1,035 4/18/2024
8.9.3 814 3/15/2024
8.9.2 925 2/28/2024
8.9.1.1 619 6/6/2024
8.9.1 835 1/19/2024
8.9.0.1 4,161 10/23/2023
8.9.0 899 10/4/2023
8.8.44 523 11/20/2024
8.8.43 468 9/26/2024
8.8.42 458 8/5/2024
8.8.41 464 6/12/2024
8.8.40 531 5/29/2024
8.8.39 575 4/8/2024
8.8.38 585 2/9/2024
8.8.37.1 474 1/24/2024
8.8.37 836 12/29/2023
8.8.36 637 12/6/2023
8.8.35 5,979 11/3/2023
8.8.34 1,916 9/20/2023
8.8.33 833 8/25/2023
8.8.32 916 8/9/2023
8.8.31 6,267 6/27/2023
8.8.30 1,639 5/25/2023
8.8.29 1,106 5/5/2023
8.8.28 5,806 4/19/2023
8.8.27 3,764 3/16/2023
8.8.26 1,405 2/27/2023
8.8.25.1 3,184 2/9/2023
8.8.25 1,206 2/7/2023
8.8.24 3,324 12/30/2022
8.8.23.3 1,248 2/9/2023
8.8.23.2 1,357 2/8/2023
8.8.23.1 1,574 12/6/2022
8.8.23 1,560 11/29/2022
8.8.22.2 879 4/25/2023
8.8.22.1 2,601 11/15/2022
8.8.22 2,095 9/29/2022
8.8.21 5,145 8/31/2022
8.8.20 2,299 7/15/2022
8.8.19.1 1,486 12/6/2022
8.8.19 3,802 5/30/2022
8.8.18.1 2,077 7/7/2022
8.8.18 2,274 5/4/2022
8.8.17 3,463 3/25/2022
8.8.16.1 2,348 3/15/2022
8.8.16 2,466 2/24/2022
8.8.15 2,731 2/11/2022
8.8.14 2,519 1/28/2022
8.8.13.2 2,422 2/17/2022
8.8.13.1 2,434 1/24/2022
8.8.13 2,648 12/27/2021
8.8.12 1,548 12/17/2021
8.8.11 2,407 11/29/2021
8.8.10 2,217 10/22/2021
8.8.9.1 1,710 10/11/2021
8.8.9 1,801 10/4/2021
8.8.8.1 1,478 11/12/2021
8.8.8 1,921 9/9/2021
8.8.7 2,810 7/30/2021
8.8.6 2,007 7/1/2021
8.8.5 2,483 5/28/2021
8.8.4 2,056 4/23/2021
8.8.3 2,449 3/24/2021
8.8.2.1 1,587 10/8/2021
8.8.2 2,143 2/8/2021
8.8.1 2,146 12/24/2020
8.7.43 2,421 1/31/2022
8.7.42.2 2,328 3/15/2022
8.7.42.1 2,436 2/8/2022
8.7.42 1,374 12/27/2021
8.7.41 1,341 12/17/2021
8.7.40 2,140 12/9/2021
8.7.39.3 811 6/6/2023
8.7.39.1 2,207 6/16/2022
8.7.39 1,671 9/10/2021
8.7.38 1,688 7/30/2021
8.7.37 1,630 7/2/2021
8.7.36 1,680 5/26/2021
8.7.35 1,693 4/27/2021
8.7.34 1,608 3/1/2021
8.7.33.3 1,598 8/20/2021
8.7.33.2 1,644 2/20/2021
8.7.33.1 1,609 2/9/2021
8.7.33 1,748 1/21/2021
8.7.32.3 1,444 11/4/2021
8.7.32 2,954 12/4/2020
8.7.31 1,651 11/19/2020
8.7.30 1,860 11/10/2020
8.7.29.1 1,640 11/12/2020
8.7.29 1,787 10/26/2020
8.7.28 2,054 10/13/2020
8.7.27.1 1,791 11/9/2020
8.7.27 1,919 9/30/2020
8.7.26 1,950 9/11/2020
8.7.25 1,706 8/31/2020
8.7.24 1,752 8/19/2020
8.7.23 1,924 8/3/2020
8.7.22 1,782 7/21/2020
8.7.21 1,863 7/10/2020
8.7.20 1,915 6/23/2020
8.7.19 1,885 6/5/2020
8.7.18 1,855 6/1/2020
8.7.17 1,849 5/26/2020
8.7.16 1,771 5/12/2020
8.7.15 1,849 4/23/2020
8.7.14 1,874 3/27/2020
8.7.13 1,771 3/18/2020
8.7.12 1,780 2/18/2020
8.7.11 2,059 2/6/2020
8.7.10 2,540 1/1/2020
8.7.9 2,280 12/19/2019
8.7.8 2,317 12/5/2019
8.7.7 2,476 11/5/2019
8.7.6 2,481 8/12/2019