Рубрики
Без рубрики

Введение в драйвер Java DataStax для Apache Cassandra

Узнайте, как работать с базами данных Cassandra с помощью драйвера Java DataStax для Apache Cassandra.

Автор оригинала: baeldung.

1. Обзор

Дистрибутив DataStax Apache Cassandra-это готовая к производству распределенная база данных, совместимая с открытым исходным кодом Cassandra. Он добавляет несколько функций, которые недоступны в дистрибутиве с открытым исходным кодом, включая мониторинг, улучшенную пакетную и потоковую обработку данных.

DataStax также предоставляет Java-клиент для распространения Apache Cassandra. Этот драйвер легко настраивается и может использовать все дополнительные функции в дистрибутиве DataStax, но он также полностью совместим с версией с открытым исходным кодом.

В этом уроке мы увидим, как использовать Java-драйвер DataStax для Apache Cassandra | для подключения к базе данных Cassandra и выполнения основных манипуляций с данными.

2. Зависимость Maven

Чтобы использовать драйвер Java DataStax для Apache Cassandra, нам нужно включить его в наш путь к классам.

С Maven нам просто нужно добавить java-драйвер-ядро зависимость к вашему pom.xml :


    com.datastax.oss
    java-driver-core
    4.1.0



    com.datastax.oss
    java-driver-query-builder
    4.1.0

3. Использование драйвера DataStax

Теперь, когда у нас есть водитель, давайте посмотрим, что мы можем с ним сделать.

3.1. Подключение к базе данных

Чтобы подключиться к базе данных, мы создадим сеанс Cql :

CqlSession session = CqlSession.builder().build();

Если мы явно не определим какую-либо точку контакта, конструктор по умолчанию будет иметь значение 127.0.0.1:9042 .

Давайте создадим класс соединителя с некоторыми настраиваемыми параметрами для построения сеанса Cql :

public class CassandraConnector {

    private CqlSession session;

    public void connect(String node, Integer port, String dataCenter) {
        CqlSessionBuilder builder = CqlSession.builder();
        builder.addContactPoint(new InetSocketAddress(node, port));
        builder.withLocalDatacenter(dataCenter);

        session = builder.build();
    }

    public CqlSession getSession() {
        return this.session;
    }

    public void close() {
        session.close();
    }
}

3.2. Создание пространства ключей

Теперь, когда у нас есть подключение к базе данных, нам нужно создать наше пространство ключей. Давайте начнем с написания простого класса репозитория для работы с нашим пространством ключей.

Для этого урока мы будем использовать Простую стратегию стратегию репликации с количеством реплик, равным 1 :

public class KeyspaceRepository {

    public void createKeyspace(String keyspaceName, int numberOfReplicas) {
        CreateKeyspace createKeyspace = SchemaBuilder.createKeyspace(keyspaceName)
          .ifNotExists()
          .withSimpleStrategy(numberOfReplicas);

        session.execute(createKeyspace.build());
    }

    // ...
}

Кроме того, мы можем начать использовать пространство клавиш в текущем сеансе :

public class KeyspaceRepository {

    //...
 
    public void useKeyspace(String keyspace) {
        session.execute("USE " + CqlIdentifier.fromCql(keyspace));
    }
}

3.3. Создание таблицы

Драйвер предоставляет инструкции для настройки и выполнения запросов в базе данных. Например, мы можем задать пространство клавиш для использования индивидуально в каждом операторе .

Мы определим модель Video и создадим таблицу для ее представления:

public class Video {
    private UUID id;
    private String title;
    private Instant creationDate;

    // standard getters and setters
}

Давайте создадим нашу таблицу, имея возможность определить пространство ключей, в котором мы хотим выполнить запрос. Мы напишем простой Репозиторий видео класс для работы с нашими видеоданными:

public class VideoRepository {
    private static final String TABLE_NAME = "videos";

    public void createTable() {
        createTable(null);
    }

    public void createTable(String keyspace) {
        CreateTable createTable = SchemaBuilder.createTable(TABLE_NAME)
          .withPartitionKey("video_id", DataTypes.UUID)
          .withColumn("title", DataTypes.TEXT)
          .withColumn("creation_date", DataTypes.TIMESTAMP);

        executeStatement(createTable.build(), keyspace);
    }

    private ResultSet executeStatement(SimpleStatement statement, String keyspace) {
        if (keyspace != null) {
            statement.setKeyspace(CqlIdentifier.fromCql(keyspace));
        }

        return session.execute(statement);
    }

    // ...
}

Обратите внимание, что мы перегружаем метод CreateTable .

Идея перегрузки этого метода заключается в том, чтобы иметь два варианта создания таблицы:

  • Создайте таблицу в определенном пространстве ключей, отправив имя пространства ключей в качестве параметра, независимо от того, какое пространство ключей в данный момент использует сеанс
  • Начните использовать пространство ключей в сеансе и используйте метод создания таблицы без каких — либо параметров-в этом случае таблица будет создана в пространстве ключей, которое в данный момент использует сеанс

3.4. Вставка Данных

Кроме того, драйвер предоставляет подготовленные и ограниченные заявления.

То Подготовленное Заявление обычно используется для запросов, выполняемых часто, с изменениями только в значениях.

Мы можем заполнить Подготовленное заявление нужными нам значениями. После этого мы создадим BoundStatement и выполним его.

Давайте напишем метод для вставки некоторых данных в базу данных:

public class VideoRepository {

    //...
 
    public UUID insertVideo(Video video, String keyspace) {
        UUID videoId = UUID.randomUUID();

        video.setId(videoId);

        RegularInsert insertInto = QueryBuilder.insertInto(TABLE_NAME)
          .value("video_id", QueryBuilder.bindMarker())
          .value("title", QueryBuilder.bindMarker())
          .value("creation_date", QueryBuilder.bindMarker());

        SimpleStatement insertStatement = insertInto.build();

        if (keyspace != null) {
            insertStatement = insertStatement.setKeyspace(keyspace);
        }

        PreparedStatement preparedStatement = session.prepare(insertStatement);

        BoundStatement statement = preparedStatement.bind()
          .setUuid(0, video.getId())
          .setString(1, video.getTitle())
          .setInstant(2, video.getCreationDate());

        session.execute(statement);

        return videoId;
    }

    // ...
}

3.5. Данные запроса

Теперь давайте добавим метод, который создает простой запрос для получения данных, которые мы сохранили в базе данных:

public class VideoRepository {
 
    // ...
 
    public List

3.6. Собрать Все Это Воедино

Наконец, давайте рассмотрим пример использования каждого раздела, который мы рассмотрели в этом руководстве:

public class Application {
 
    public void run() {
        CassandraConnector connector = new CassandraConnector();
        connector.connect("127.0.0.1", 9042, "datacenter1");
        CqlSession session = connector.getSession();

        KeyspaceRepository keyspaceRepository = new KeyspaceRepository(session);

        keyspaceRepository.createKeyspace("testKeyspace", 1);
        keyspaceRepository.useKeyspace("testKeyspace");

        VideoRepository videoRepository = new VideoRepository(session);

        videoRepository.createTable();

        videoRepository.insertVideo(new Video("Video Title 1", Instant.now()));
        videoRepository.insertVideo(new Video("Video Title 2",
          Instant.now().minus(1, ChronoUnit.DAYS)));

        List

После выполнения нашего примера в результате мы можем видеть в журналах, что данные были правильно сохранены в базе данных:

INFO com.baeldung.datastax.cassandra.Application - [id:733249eb-914c-4153-8698-4f58992c4ad4, title:Video Title 1, creationDate: 2019-07-10T19:43:35.112Z]
INFO com.baeldung.datastax.cassandra.Application - [id:a6568236-77d7-42f2-a35a-b4c79afabccf, title:Video Title 2, creationDate: 2019-07-09T19:43:35.181Z]

4. Заключение

В этом уроке мы рассмотрели основные концепции драйвера Java DataStax для Apache Cassandra. Мы подключились к базе данных и создали пространство ключей и таблицу. Кроме того, мы вставили данные в таблицу и выполнили запрос, чтобы получить их.

Как всегда, исходный код этого учебника доступен на Github .