The ScalarDB Cluster .NET Client SDK supports the Administrative API of ScalarDB Cluster. By using this API, you can manage ScalarDB Cluster from .NET applications.

Note

Although we recommend using asynchronous methods as in the following examples, you can use synchronous methods instead.

Get a transaction manager

First, you need to get an object for interacting with the Administrative API. To get the object, you can use TransactionFactory as follows, replacing <HOSTNAME_OR_IP_ADDRESS> with the FQDN or the IP address, and <PORT> with the port number (60053 by default) of your cluster:

var scalarDbOptions = new ScalarDbOptions
                      {
                         Address = "http://<HOSTNAME_OR_IP_ADDRESS>:<PORT>",
                         HopLimit = 10
                      };
var factory = TransactionFactory.Create(scalarDbOptions);

using var admin = factory.GetTransactionAdmin();

Manage ScalarDB Cluster

The following operations can be performed by using the ScalarDB Cluster .NET Client SDK.

Create a new namespace

await admin.CreateNamespaceAsync("ns", ifNotExists: true);

Drop a namespace

await admin.DropNamespaceAsync("ns", ifExists: true);

Check if a namespace exists

var namespaceExists = await admin.IsNamespacePresentAsync("ns");

Create a new table

using Scalar.Db.Cluster.Rpc.V1;
// ...
using ScalarDB.Net.Client.Builders;

// ...

var tableMetadata =
    new TableMetadataBuilder()
        .AddPartitionKey("pk", DataType.Int)
        .AddClusteringKey("ck", DataType.Double)
        .AddSecondaryIndex("index", DataType.Float)
        .AddColumn("ordinary", DataType.Text)
        .Build();

await admin.CreateTableAsync("ns", "table_name", tableMetadata, ifNotExists: true);

Drop a table

await admin.DropTableAsync("ns", "table_name", ifExists: true);

Checking if a table exists

var tableExists = await admin.IsTablePresentAsync("ns", "table_name");

Get the names of existing tables

var tablesList = await admin.GetTableNamesAsync("ns");

Create the Coordinator table

await admin.CreateCoordinatorTablesAsync();

Drop the Coordinator table

await admin.DropCoordinatorTablesAsync();

Check if the Coordinator table exist

var exists = await admin.AreCoordinatorTablesPresentAsync();