Introduksjon til DataStax Java Driver for Apache Cassandra

1. Oversikt

DataStax-distribusjonen av Apache Cassandra er en produksjonsklar distribuert database, kompatibel med åpen kildekode Cassandra. Det legger til noen få funksjoner som ikke er tilgjengelige i open source-distribusjonen, inkludert overvåking, forbedret batch og streaming databehandling.

DataStax tilbyr også en Java-klient for distribusjon av Apache Cassandra. Denne driveren er svært avstemelig og kan dra nytte av alle ekstra funksjonene i DataStax-distribusjonen, men den er også fullstendig kompatibel med åpen kildekodeversjon.

I denne opplæringen får vi se hvordan du bruker DataStax Java Driver for Apache Cassandra for å koble til en Cassandra-database og utføre grunnleggende databehandling.

2. Maven avhengighet

For å kunne bruke DataStax Java Driver for Apache Cassandra, må vi inkludere den i klassestien vår.

Med Maven må vi ganske enkelt legge til java-driver-core avhengighet til vår pom.xml:

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

3. Bruke DataStax-driveren

Nå som vi har sjåføren på plass, la oss se hva vi kan gjøre med den.

3.1. Koble til databasen

For å bli koblet til databasen, oppretter vi en CqlSession:

CqlSession-økt = CqlSession.builder (). Build ();

Hvis vi ikke eksplisitt definerer noe kontaktpunkt, vil byggherren som standard gjøre det 127.0.0.1:9042.

La oss lage en kontaktklasse, med noen konfigurerbare parametere, for å bygge CqlSession:

offentlig klasse CassandraConnector {privat CqlSession-økt; public void connect (String node, Integer port, String dataCenter) {CqlSessionBuilder builder = CqlSession.builder (); builder.addContactPoint (ny InetSocketAddress (node, port)); builder.withLocalDatacenter (dataCenter); økt = builder.build (); } public CqlSession getSession () {return this.session; } offentlig ugyldig lukk () {session.close (); }}

3.2. Opprett Keyspace

Nå som vi har en forbindelse til databasen, må vi opprette nøkkelområdet vårt. La oss starte med å skrive en enkel lagerklasse for å jobbe med nøkkelområdet vårt.

For denne opplæringen, vi bruker SimpleStrategy replikeringsstrategi med antall kopier satt til 1:

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

Vi kan også begynn å bruke nøkkelområdet i den gjeldende økten:

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

3.3. Lag tabell

Driveren gir uttalelser for å konfigurere og utføre spørsmål i databasen. For eksempel, vi kan stille nøkkelområdet til å bruke individuelt i hvert utsagn.

Vi definerer Video modell og lag en tabell for å representere den:

offentlig klasse Video {privat UUID-id; privat strengetittel; private Instant creationDate; // standard getters og setters}

La oss lage bordet vårt, med muligheten til å definere nøkkelområdet vi ønsker å utføre spørringen i. Vi skriver en enkel VideoRepository klasse for å jobbe med videodataene våre:

offentlig klasse VideoRepository {privat statisk slutt String TABLE_NAME = "videoer"; public void createTable () {createTable (null); } public void createTable (String keypace) {CreateTable createTable = SchemaBuilder.createTable (TABLE_NAME) .withPartitionKey ("video_id", DataTypes.UUID) .withColumn ("title", DataTypes.TEXT) .withColumn ("creation_date., DataTIM. ); executeStatement (createTable.build (), nøkkelplass); } privat ResultSet executeStatement (SimpleStatement-setning, String keypace) {if (keypace! = null) {statement.setKeyspace (CqlIdentifier.fromCql (keypace)); } returner økt. utfør (uttalelse); } // ...}

Merk at vi overbelaster metoden createTable.

Ideen bak overbelastning av denne metoden er å ha to alternativer for å lage bordet:

  • Opprett tabellen i et bestemt nøkkelområde, og send nøkkelområdet som parameter, uavhengig av hvilket nøkkelområde som økten er i bruk for øyeblikket
  • Begynn å bruke et nøkkelområde i økten, og bruk metoden for å opprette tabellen uten noen parameter - i dette tilfellet blir tabellen opprettet i nøkkelområdet økten bruker for øyeblikket

3.4. Sett inn data

I tillegg gir sjåføren utarbeidede og begrensede uttalelser.

De PreparedStatement brukes vanligvis for spørsmål som utføres ofte, med bare endringer i verdiene.

Vi kan fylle PreparedStatement med verdiene vi trenger. Etter det oppretter vi en BoundStatement og utfør det.

La oss skrive en metode for å sette inn noen data i databasen:

public class VideoRepository {// ... public UUID insertVideo (Video video, String keypace) {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 (); hvis (nøkkelplass! = null) {insertStatement = insertStatement.setKeyspace (nøkkelplass); } PreparedStatement preparedStatement = session.prepare (insertStatement); BoundStatement uttalelse = preparedStatement.bind () .setUuid (0, video.getId ()) .setString (1, video.getTitle ()) .setInstant (2, video.getCreationDate ()); session.execute (uttalelse); returner videoId; } // ...}

3.5. Spørringsdata

La oss nå legge til en metode som lager en enkel forespørsel for å få dataene vi har lagret i databasen:

public class VideoRepository {// ... public List selectAll (String keypace) {Select select = QueryBuilder.selectFrom (TABLE_NAME) .all (); ResultSet resultSet = executeStatement (select.build (), nøkkelplass); Listeresultat = ny ArrayList (); resultSet.forEach (x -> result.add (ny video (x.getUuid ("video_id"), x.getString ("tittel"), x.getInstant ("creation_date")))); returresultat; } // ...}

3.6. Sette alt sammen

Til slutt, la oss se et eksempel på hver seksjon vi har dekket i denne opplæringen:

public class Application {public void run () {CassandraConnector connector = new CassandraConnector (); connector.connect ("127.0.0.1", 9042, "datasenter1"); CqlSession-økt = connector.getSession (); KeyspaceRepository keyspaceRepository = nytt KeyspaceRepository (økt); keyspaceRepository.createKeyspace ("testKeyspace", 1); keyspaceRepository.useKeyspace ("testKeyspace"); VideoRepository videoRepository = nytt VideoRepository (økt); videoRepository.createTable (); videoRepository.insertVideo (ny video ("Videotittel 1", Instant.now ())); videoRepository.insertVideo (ny video ("Videotittel 2", Instant.now (). minus (1, ChronoUnit.DAYS))); Liste videoer = videoRepository.selectAll (); videos.forEach (x -> LOG.info (x.toString ())); connector.close (); }}

Etter at vi har utført eksemplet vårt, som et resultat, kan vi se i loggene at dataene ble riktig lagret i databasen:

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. Konklusjon

I denne opplæringen dekket vi de grunnleggende konseptene til DataStax Java Driver for Apache Cassandra. Vi koblet oss til databasen og opprettet et nøkkelområde og en tabell. Vi satte også inn data i tabellen og kjørte et spørsmål for å hente dem.

Som alltid er kildekoden for denne opplæringen tilgjengelig på Github.


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