Cassandra with the Java driver
Uses the Apache Cassandra Java driver 4.19 (java-driver-core). 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'mvn -q compile exec:javaCredentials 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.package example;
import com.datastax.oss.driver.api.core.CqlSession;import com.datastax.oss.driver.api.core.cql.PreparedStatement;import com.datastax.oss.driver.api.core.cql.Row;import java.net.InetSocketAddress;import java.time.Instant;import java.time.temporal.ChronoUnit;import java.util.Arrays;
public final class App { public static void main(String[] args) { var builder = CqlSession.builder() .withLocalDatacenter(System.getenv().getOrDefault("CASSANDRA_DC", "dc1")) .withAuthCredentials(System.getenv("CASSANDRA_USERNAME"), System.getenv("CASSANDRA_PASSWORD")); Arrays.stream(System.getenv("CASSANDRA_CONTACT_POINTS").split(",")) .forEach(host -> builder.addContactPoint(new InetSocketAddress(host.trim(), 9042)));
try (CqlSession session = builder.build()) { session.execute("CREATE KEYSPACE IF NOT EXISTS iot WITH replication = " + "{'class': 'NetworkTopologyStrategy', 'dc1': 3}"); session.execute("CREATE TABLE IF NOT EXISTS iot.readings (sensor text, at timestamp, value double, " + "PRIMARY KEY (sensor, at)) WITH CLUSTERING ORDER BY (at DESC)"); session.execute("CREATE TABLE IF NOT EXISTS iot.sensors (sensor text PRIMARY KEY, owner text)");
PreparedStatement insert = session.prepare( "INSERT INTO iot.readings (sensor, at, value) VALUES (?, ?, ?) USING TTL 86400"); Instant now = Instant.now(); for (int minute = 0; minute < 10; minute++) { session.execute(insert.bind("s-1", now.minus(minute, ChronoUnit.MINUTES), 20.0 + minute / 10.0)); }
for (Row row : session.execute( "SELECT at, value FROM iot.readings WHERE sensor = ? AND at > ? LIMIT 5", "s-1", now.minus(5, ChronoUnit.MINUTES))) { System.out.println(row.getInstant("at") + " " + row.getDouble("value")); }
boolean applied = session.execute( "INSERT INTO iot.sensors (sensor, owner) VALUES (?, ?) IF NOT EXISTS", "s-1", "ada").wasApplied(); System.out.println("registered: " + applied); } }}<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example.machnosql</groupId> <artifactId>cassandra-example</artifactId> <version>1.0</version> <properties> <maven.compiler.release>21</maven.compiler.release> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <exec.mainClass>example.App</exec.mainClass> </properties> <dependencies> <dependency> <groupId>org.apache.cassandra</groupId> <artifactId>java-driver-core</artifactId> <version>4.19.4</version> </dependency> </dependencies></project>