Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE

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.

Course – LSD (cat=Persistence)

Get started with Spring Data JPA through the reference Learn Spring Data JPA course:

>> CHECK OUT THE COURSE
res – Persistence (eBook) (cat=Persistence)
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.