Cassandra with the C# driver
Uses CassandraCSharpDriver 3.23 on .NET 10. The code is an ordinary application for the original database; nothing in it knows about MachNoSQL.
The only change
Section titled “The only change”cass-1.example.com,cass-2.example.commachnosql-1.example.com,machnosql-2.example.comThe address comes from the environment variable CASSANDRA_CONTACT_POINTS, so switching to MachNoSQL changes configuration only.
export CASSANDRA_CONTACT_POINTS='machnosql-1.example.com,machnosql-2.example.com'dotnet runCredentials come from CASSANDRA_USERNAME and CASSANDRA_PASSWORD, the local data center from CASSANDRA_DC (default dc1).
Source
Section titled “Source”The program as it is kept and tested in the Mach Database NoSQL repository; highlighted lines read the connection setting.
// Sensor readings on Cassandra, unchanged on MachNoSQL.using Cassandra;
var cluster = Cluster.Builder() .AddContactPoints(Environment.GetEnvironmentVariable("CASSANDRA_CONTACT_POINTS")!.Split(',')) .WithPort(9042) .WithCredentials(Environment.GetEnvironmentVariable("CASSANDRA_USERNAME"), Environment.GetEnvironmentVariable("CASSANDRA_PASSWORD")) .WithLoadBalancingPolicy(new TokenAwarePolicy(new DCAwareRoundRobinPolicy(Environment.GetEnvironmentVariable("CASSANDRA_DC") ?? "dc1"))) .Build();var session = await cluster.ConnectAsync();
await session.ExecuteAsync(new SimpleStatement( "CREATE KEYSPACE IF NOT EXISTS iot WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': 3}"));await session.ExecuteAsync(new SimpleStatement( "CREATE TABLE IF NOT EXISTS iot.readings (sensor text, at timestamp, value double, PRIMARY KEY (sensor, at)) WITH CLUSTERING ORDER BY (at DESC)"));await session.ExecuteAsync(new SimpleStatement( "CREATE TABLE IF NOT EXISTS iot.sensors (sensor text PRIMARY KEY, owner text)"));
var insert = await session.PrepareAsync("INSERT INTO iot.readings (sensor, at, value) VALUES (?, ?, ?) USING TTL 86400");var now = DateTimeOffset.UtcNow;for (var minute = 0; minute < 10; minute++){ await session.ExecuteAsync(insert.Bind("s-1", now.AddMinutes(-minute), 20.0 + minute / 10.0));}
var rows = await session.ExecuteAsync(new SimpleStatement( "SELECT at, value FROM iot.readings WHERE sensor = ? AND at > ? LIMIT 5", "s-1", now.AddMinutes(-5)));foreach (var row in rows){ Console.WriteLine($"{row.GetValue<DateTimeOffset>("at")} {row.GetValue<double>("value")}");}
var lwt = await session.ExecuteAsync(new SimpleStatement( "INSERT INTO iot.sensors (sensor, owner) VALUES (?, ?) IF NOT EXISTS", "s-1", "ada"));Console.WriteLine($"registered: {lwt.First().GetValue<bool>("[applied]")}");
await cluster.ShutdownAsync();<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net10.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup> <ItemGroup> <PackageReference Include="CassandraCSharpDriver" Version="3.23.0" /> </ItemGroup></Project>