Inleiding tot DataStax Java-stuurprogramma voor Apache Cassandra

1. Overzicht

De DataStax-distributie van Apache Cassandra is een productieklare gedistribueerde database, compatibel met open-source Cassandra. Het voegt een aantal functies toe die niet beschikbaar zijn in de open-source distributie, waaronder monitoring, verbeterde batchverwerking en streaming gegevensverwerking.

DataStax biedt ook een Java-client voor de distributie van Apache Cassandra. Dit stuurprogramma is zeer afstembaar en kan profiteren van alle extra functies in de DataStax-distributie, maar het is ook volledig compatibel met de open-source-versie.

In deze tutorial zullen we zien hoe u het DataStax Java-stuurprogramma voor Apache Cassandra gebruikt om verbinding te maken met een Cassandra-database en basisgegevensmanipulatie uit te voeren.

2. Maven Afhankelijkheid

Om het DataStax Java-stuurprogramma voor Apache Cassandra te gebruiken, moeten we het opnemen in ons klassenpad.

Met Maven hoeven we alleen maar de java-driver-core afhankelijkheid van onze pom.xml:

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

3. Met behulp van het DataStax-stuurprogramma

Nu we de driver op zijn plaats hebben, gaan we kijken wat we ermee kunnen doen.

3.1. Maak verbinding met de database

Om verbinding te maken met de database, maken we een CqlSession:

CqlSession-sessie = CqlSession.builder (). Build ();

Als we niet expliciet een contactpunt definiëren, zal de bouwer dat standaard doen 127.0.0.1:9042.

Laten we een connectorklasse maken, met enkele configureerbare parameters, om het CqlSession:

openbare klasse CassandraConnector {privé CqlSession-sessie; public void connect (String node, Integer poort, String dataCenter) {CqlSessionBuilder builder = CqlSession.builder (); builder.addContactPoint (nieuw InetSocketAddress (knooppunt, poort)); builder.withLocalDatacenter (datacenter); session = builder.build (); } openbare CqlSession getSession () {retourneer this.session; } public void close () {session.close (); }}

3.2. Creëer Keyspace

Nu we verbinding hebben met de database, moeten we onze keyspace maken. Laten we beginnen met het schrijven van een eenvoudige repository-klasse om met onze keyspace te werken.

Voor deze tutorial, we zullen de SimpleStrategy replicatiestrategie met het aantal replica's ingesteld op 1:

openbare klasse KeyspaceRepository {public void createKeyspace (String keyspaceName, int numberOfReplicas) {CreateKeyspace createKeyspace = SchemaBuilder.createKeyspace (keyspaceName) .ifNotExists () .withSimpleStrategy (numberOfReplicas); session.execute (createKeyspace.build ()); } // ...}

We kunnen ook gebruik de keyspace in de huidige sessie:

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

3.3. Maak een tabel

De driver geeft instructies om query's in de database te configureren en uit te voeren. Bijvoorbeeld, we kunnen de keyspace instellen om afzonderlijk in elke instructie te gebruiken.

We zullen de Video model en maak een tabel om het weer te geven:

openbare klasse Video {privé UUID-id; private String-titel; privé Directe aanmaakDatum; // standaard getters en setters}

Laten we onze tabel maken, met de mogelijkheid om de keyspace te definiëren waarin we de query willen uitvoeren. We zullen een simpel schrijven VideoRepository klasse voor het werken met onze videogegevens:

openbare klasse 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.TIMEST ); executeStatement (createTable.build (), keyspace); } private ResultSet executeStatement (SimpleStatement-instructie, String-keyspace) {if (keyspace! = null) {statement.setKeyspace (CqlIdentifier.fromCql (keyspace)); } return session.execute (statement); } // ...}

Merk op dat we de methode overbelasten createTable.

Het idee achter het overbelasten van deze methode is om twee opties te hebben voor het maken van tabellen:

  • Maak de tabel in een specifieke sleutelruimte, waarbij u de naam van de sleutelruimte als parameter verzendt, onafhankelijk van welke sleutelruimte de sessie momenteel gebruikt
  • Begin een keyspace te gebruiken in de sessie en gebruik de methode voor het maken van een tabel zonder enige parameter - in dit geval wordt de tabel gemaakt in de keyspace die de sessie momenteel gebruikt

3.4. Gegevens invoegen

Bovendien geeft de bestuurder voorbereide en begrensde verklaringen.

De PreparedStatement wordt doorgaans gebruikt voor query's die vaak worden uitgevoerd, met alleen wijzigingen in de waarden.

We kunnen de PreparedStatement met de waarden die we nodig hebben. Daarna maken we een BoundStatement en voer het uit.

Laten we een methode schrijven om wat gegevens in de database in te voegen:

openbare klasse VideoRepository {// ... openbare UUID insertVideo (videovideo, tekenreeks-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 voorbereideStatement = session.prepare (insertStatement); BoundStatement-instructie = voorbereideStatement.bind () .setUuid (0, video.getId ()) .setString (1, video.getTitle ()) .setInstant (2, video.getCreationDate ()); session.execute (instructie); terug videoId; } // ...}

3.5. Gegevens opvragen

Laten we nu een methode toevoegen die een eenvoudige query maakt om de gegevens op te halen die we in de database hebben opgeslagen:

openbare klasse VideoRepository {// ... openbare lijst selectAll (String keyspace) {Select select = QueryBuilder.selectFrom (TABLE_NAME) .all (); ResultSet resultSet = executeStatement (select.build (), keyspace); Lijstresultaat = nieuwe ArrayList (); resultSet.forEach (x -> result.add (nieuwe video (x.getUuid ("video_id"), x.getString ("title"), x.getInstant ("creation_date")))); resultaat teruggeven; } // ...}

3.6. Alles samenvoegen

Laten we tot slot een voorbeeld bekijken met elke sectie die we in deze zelfstudie hebben behandeld:

openbare klasse Application {public void run () {CassandraConnector-connector = nieuwe CassandraConnector (); connector.connect ("127.0.0.1", 9042, "datacenter1"); CqlSession-sessie = connector.getSession (); KeyspaceRepository keyspaceRepository = nieuwe KeyspaceRepository (sessie); keyspaceRepository.createKeyspace ("testKeyspace", 1); keyspaceRepository.useKeyspace ("testKeyspace"); VideoRepository videoRepository = nieuwe VideoRepository (sessie); videoRepository.createTable (); videoRepository.insertVideo (nieuwe video ("Videotitel 1", Instant.now ())); videoRepository.insertVideo (nieuwe video ("Videotitel 2", Instant.now (). minus (1, ChronoUnit.DAYS))); Lijst video's = videoRepository.selectAll (); videos.forEach (x -> LOG.info (x.toString ())); connector.close (); }}

Nadat we ons voorbeeld hebben uitgevoerd, kunnen we in de logboeken zien dat de gegevens correct in de database zijn opgeslagen:

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

4. Conclusie

In deze zelfstudie hebben we de basisconcepten van de DataStax Java-driver voor Apache Cassandra behandeld. We hebben verbinding gemaakt met de database en hebben een keyspace en een tabel gemaakt. We hebben ook gegevens in de tabel ingevoegd en een query uitgevoerd om deze op te halen.

Zoals altijd is de broncode voor deze tutorial beschikbaar op Github.


$config[zx-auto] not found$config[zx-overlay] not found