Introduction to ScyllaDB with Java
Last updated: February 22, 2023
1. Overview
In this tutorial, we’re going to explore ScyllaDB – a fast and scalable NoSQL Database. We’ll see its features and how to interact with it.
2. What Is ScyllaDB?
ScyllaDB is an open-source distributed NoSQL database. It supports the same protocol as Cassandra with significantly higher throughputs and lower latencies. It’s developed using C++ language.
ScyllaDB has three variants:
- ScyllaDB Open Source: It’s a free, open-source version. We’ll have full ownership and need to do the maintenance ourselves
- ScyllaDB Enterprise: It’s a paid version where we’ll get some premium features and 24/7 support. We’ll need to use our own infrastructure to install this variant
- ScyllaDB Cloud: It’s a cloud-based service provided by ScyllaDB where we don’t need to have our own infrastructure or do any installation and maintenance
2.1. Installation
We’ll use the open-source version and run it on a Docker container using the following command:
$ docker run --name scylla -p 9042:9042 -d scylladb/scylla
We’re exposing port number 9042 here. We’ll connect to the database using this port.
Now, let’s connect to the database, create a table and insert some data. We’ll write Java code to fetch this data.
Let’s execute the following command to connect to the database:
$ docker exec -it scylla cqlsh
Now let’s create a namespace with a simple replication strategy with factor 3:
CREATE KEYSPACE IF NOT EXISTS baeldung WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};
Let’s execute the following query to create a table and insert data:
CREATE COLUMNFAMILY IF NOT EXISTS baeldung.User (id bigint PRIMARY KEY, name text);
INSERT INTO baeldung.User (id, name) values (1, 'john doe');
3. Java Code Implementation
We’ll write a simple Java program that’ll connect to our locally deployed Scylla DB and execute queries.
3.1. Maven Dependency
Let’s add the Scylla core library dependency in our pom.xml file:
<dependency>
<groupId>com.scylladb</groupId>
<artifactId>java-driver-core</artifactId>
<version>4.14.1.0</version>
</dependency>
3.2. Java Code
Let’s first add the connection URL to the application.yml file:
datastax-java-driver:
basic:
contact-points: 127.0.0.1:9042
We can refer to this documentation for more details on all the configurable values.
Now let’s fetch the user’s name that we’ve added previously:
try (CqlSession session = CqlSession.builder().build()) {
ResultSet rs = session.execute("select * from baeldung.User");
Row row = rs.one();
return row.getString("name");
}
We can also use a query-builder to insert and fetch data. We’ll first need to add java-driver-query-builder Maven dependency to the pom.xml file:
<dependency>
<groupId>com.scylladb</groupId>
<artifactId>java-driver-query-builder</artifactId>
<version>4.14.1.0</version>
</dependency>
Now we’ll write SELECT and INSERT builder statements in our code to fetch and insert data:
try (CqlSession session = CqlSession.builder().build()) {
InsertInto insert = insertInto("baeldung", "User");
SimpleStatement statement = insert.value("id", literal(2))
.value("name", literal("dev user"))
.build();
ResultSet rs = session.execute(statement);
}
It’ll insert a new user with id = 2 and name = “dev user” in the table User of namespace baeldung. Now let’s create a SELECT statement to find this user by name:
try (CqlSession session = CqlSession.builder().build()) {
Select query = selectFrom("baeldung", "User").all()
.whereColumn("name").isEqualTo(literal("dev user"))
.allowFiltering();;
SimpleStatement statement = query.build();
ResultSet rs = session.execute(statement);
Row row = rs.one();
assertEquals(2, row.getLong("id"));
assertEquals("dev user", row.getString("name");
}
We can see that it’ll return the data we inserted with id = 2.
4. Conclusion
Here we’ve seen a quick introduction to ScyllaDB, learning how to install, connect, and execute queries, as well as how we can interact with it from our application.
As always, the complete source code of the examples is available over on GitHub.