Uvod u DataStax Java upravljački program za Apache Cassandra
1. Pregled
DataStax Distribution of Apache Cassandra je distribuirana baza podataka spremna za proizvodnju, kompatibilna s Cassandrom otvorenog koda. Dodaje nekoliko značajki koje nisu dostupne u distribuciji otvorenog koda, uključujući nadzor, poboljšanu seriju i obradu podataka u strujanju.
DataStax također nudi Java klijent za distribuciju Apache Cassandre. Ovaj je upravljački program vrlo prilagodljiv i može iskoristiti sve dodatne značajke u distribuciji DataStax, no u potpunosti je kompatibilan i s verzijom otvorenog koda.
U ovom uputstvu ćemo vidjeti kako koristiti DataStax Java upravljački program za Apache Cassandra za povezivanje s bazom podataka Cassandre i izvođenje osnovnih manipulacija podacima.
2. Ovisnost Mavena
Da bismo koristili DataStax Java upravljački program za Apache Cassandra, moramo ga uključiti u svoju stazu do razreda.
S Mavenom jednostavno moramo dodati java-driver-core ovisnost o našoj pom.xml:
com.datastax.oss java-driver-core 4.1.0 com.datastax.oss java-driver-query-builder 4.1.0
3. Korištenje DataStax upravljačkog programa
Sad kad imamo vozača na mjestu, pogledajmo što možemo učiniti s njim.
3.1. Povežite se s bazom podataka
Da bismo se povezali s bazom podataka, stvorit ćemo CqlSession:
Sjednica CqlSession = CqlSession.builder (). Build ();
Ako izričito ne definiramo niti jednu kontaktnu točku, graditelj će to zadati 127.0.0.1:9042.
Stvorimo klasu konektora s nekim podesivim parametrima za izgradnju CqlSession:
javna klasa CassandraConnector {privatna sesija CqlSession; javna void veza (čvor niza, integrirani port, niz podatkovnih centara) {CqlSessionBuilder builder = CqlSession.builder (); builder.addContactPoint (novi InetSocketAddress (čvor, priključak)); builder.withLocalDatacenter (centar podataka); session = builder.build (); } public CqlSession getSession () {return this.session; } javna void close () {session.close (); }}
3.2. Izradite prostor s tipkama
Sad kad imamo vezu s bazom podataka, moramo stvoriti svoj prostor ključeva. Počnimo s pisanjem jednostavne klase spremišta za rad s našim prostorom ključeva.
Za ovaj vodič, koristit ćemo SimpleStrategy strategija replikacije s brojem replika postavljenim na 1:
javna klasa KeyspaceRepository {javna praznina createKeyspace (String keyspaceName, int numberOfReplicas) {CreateKeyspace createKeyspace = SchemaBuilder.createKeyspace (keyspaceName) .ifNotExists () .withSimpleStrategy (numberOfReplicas); session.execute (createKeyspace.build ()); } // ...}
Također, možemo počnite koristiti prostor tipki u trenutnoj sesiji:
javna klasa KeyspaceRepository {// ... public void useKeyspace (String keypace) {session.execute ("USE" + CqlIdentifier.fromCql (pace)); }}
3.3. Stvori tablicu
Upravljački program pruža izjave za konfiguriranje i izvršavanje upita u bazi podataka. Na primjer, prostor ključeva možemo postaviti za pojedinačnu upotrebu u svakoj izjavi.
Mi ćemo definirati Video model i stvorite tablicu koja će ga predstavljati:
javna klasa Video {privatni UUID id; privatni naslov niza; privatni trenutak izrade datum; // standardni geteri i postavljači}
Stvorimo našu tablicu, imajući mogućnost definiranja prostora ključeva u kojem želimo izvršiti upit. Napisat ćemo jednostavno VideoRepository klasa za rad s našim video podacima:
javna klasa VideoRepository {private static final String TABLE_NAME = "videos"; javna praznina createTable () {createTable (null); } javna nevažeća createTable (String tipkovnica) {CreateTable createTable = SchemaBuilder.createTable (TABLE_NAME) .withPartitionKey ("video_id", DataTypes.UUID) .withColumn ("title", DataTypes.TEXT) .withColumn ("create_date", DataTypes.date ", DataTypes.date", DataTypes.date ", DataTypes.date", DataTypes.date ", DataTypes.date", DataType.DATE.IMP. ); executeStatement (createTable.build (), prostor ključeva); } privatni ResultSet executeStatement (izjava SimpleStatement, prostor ključeva niza) {if (prostor ključeva! = null) {statement.setKeyspace (CqlIdentifier.fromCql (prostor ključeva)); } return session.execute (statement); } // ...}
Imajte na umu da preopterećujemo metodu createTable.
Ideja preopterećenja ove metode je imati dvije mogućnosti za stvaranje tablice:
- Stvorite tablicu u određenom prostoru ključeva, šaljući naziv prostora ključeva kao parametar, neovisno o tome koji prostor ključeva trenutno koristi sesija
- Počnite koristiti prostor ključeva u sesiji i koristite metodu za stvaranje tablice bez ikakvog parametra - u ovom slučaju tablica će se stvoriti u prostoru ključeva koji sesija trenutno koristi
3.4. Umetni podatke
Uz to, vozač pruža pripremljene i ograničene izjave.
The PreparedStatement obično se koristi za upite koji se često izvode, s promjenama samo u vrijednostima.
Možemo ispuniti PreparedStatement s vrijednostima koje su nam potrebne. Nakon toga ćemo stvoriti BoundStatement i izvrši ga.
Napišimo metodu za umetanje nekih podataka u bazu podataka:
javna klasa VideoRepository {// ... javni UUID insertVideo (Video video, String ključni prostor) {UUID videoId = UUID.randomUUID (); video.setId (videoId); RegularInsert insertInto = QueryBuilder.insertInto (TABLE_NAME) .value ("video_id", QueryBuilder.bindMarker ()) .value ("title", QueryBuilder.bindMarker ()) .value ("create_date", QueryBuilder.bindMarker) bindMarker SimpleStatement insertStatement = insertInto.build (); if (razmak ključeva! = null) {insertStatement = insertStatement.setKeyspace (razmak ključeva); } PreparedStatement pripremljenStatement = session.prepare (insertStatement); Izjava BoundStatement = PrepaStatement.bind () .setUuid (0, video.getId ()) .setString (1, video.getTitle ()) .setInstant (2, video.getCreationDate ()); session.execute (izjava); vratiti videoId; } // ...}
3.5. Podaci upita
Sada, dodajmo metodu koja stvara jednostavan upit za dobivanje podataka koje smo pohranili u bazu podataka:
javna klasa VideoRepository {// ... javni popis selectAll (Prostor tipki niza) {Select select = QueryBuilder.selectFrom (TABLE_NAME) .all (); ResultSet resultSet = executeStatement (select.build (), prostor tipki); Rezultat popisa = novi ArrayList (); resultSet.forEach (x -> result.add (novi Video (x.getUuid ("video_id"), x.getString ("naslov"), x.getInstant ("datum_stvaranja")))); povratni rezultat; } // ...}
3.6. Sve to zajedno
Na kraju, pogledajmo primjer koristeći svaki odjeljak koji smo obradili u ovom vodiču:
aplikacija javne klase {public void run () {CassandraConnector konektor = novi CassandraConnector (); konektor.connect ("127.0.0.1", 9042, "datacenter1"); CqlSession sesija = konektor.getSession (); KeyspaceRepository keyspaceRepository = novi KeyspaceRepository (sesija); keyspaceRepository.createKeyspace ("testKeyspace", 1); keyspaceRepository.useKeyspace ("testKeyspace"); VideoRepository videoRepository = novo VideoRepository (sesija); videoRepository.createTable (); videoRepository.insertVideo (novi Video ("Naslov videozapisa 1", Instant.now ())); videoRepository.insertVideo (novi Video ("Naslov videozapisa 2", Instant.now (). minus (1, ChronoUnit.DAYS))); Popis video zapisa = videoRepository.selectAll (); videos.forEach (x -> LOG.info (x.toString ())); konektor.close (); }}
Nakon što izvršimo naš primjer, kao rezultat, u zapisnicima možemo vidjeti da su podaci pravilno pohranjeni u bazi podataka:
INFO com.baeldung.datastax.cassandra.Application - [id: 733249eb-914c-4153-8698-4f58992c4ad4, title: Video Title 1, createDate: 2019-07-10T19: 43: 35.112Z] INFO com.baeldung.datastax. cassandra.Aplikacija - [id: a6568236-77d7-42f2-a35a-b4c79afabccf, naslov: Video Title 2, izradaDatum: 2019-07-09T19: 43: 35.181Z]
4. Zaključak
U ovom smo tutorijalu pokrili osnovne koncepte DataStax Java upravljačkog programa za Apache Cassandra. Povezali smo se s bazom podataka i stvorili prostor ključeva i tablicu. Također, umetnuli smo podatke u tablicu i pokrenuli upit za njihovo preuzimanje.
Kao i uvijek, izvorni kod za ovu lekciju dostupan je na Githubu.