Bevezetés a DataStax Java illesztőprogramhoz az Apache Cassandra programhoz
1. Áttekintés
Az Apache Cassandra DataStax terjesztése egy gyártásra kész elosztott adatbázis, amely kompatibilis a nyílt forráskódú Cassandrával. Hozzáad néhány olyan funkciót, amelyek nem érhetők el a nyílt forráskódú disztribúcióban, beleértve a megfigyelést, a továbbfejlesztett kötegelt és adatfolyam-adatfeldolgozást.
A DataStax Java klienst is biztosít az Apache Cassandra terjesztéséhez. Ez az illesztőprogram nagyon jól hangolható, és kihasználhatja a DataStax disztribúció összes extra funkcióját, ugyanakkor teljes mértékben kompatibilis a nyílt forráskódú verzióval is.
Ebben az oktatóanyagban meglátjuk hogyan kell használni a DataStax Java illesztőprogramot az Apache Cassandra programhoz csatlakozni egy Cassandra adatbázishoz és elvégezni az alapvető adatkezelést.
2. Maven-függőség
Ahhoz, hogy a DataStax Java illesztőprogramot használhassuk az Apache Cassandra alkalmazáshoz, be kell építenünk az osztályútvonalunkba.
Maven-rel egyszerűen hozzá kell adnunk a java-driver-core függőség a mi pom.xml:
com.datastax.oss java-driver-core 4.1.0 com.datastax.oss java-driver-query-builder 4.1.0
3. A DataStax illesztőprogram használata
Most, hogy a sofőr a helyén van, nézzük meg, mit tehetünk vele.
3.1. Csatlakozás az adatbázishoz
Az adatbázishoz való kapcsolódáshoz létrehozunk egy CqlSession:
CqlSession session = CqlSession.builder (). Build ();
Ha nem határozunk meg kifejezetten egyetlen kapcsolattartási pontot sem, akkor az építtető alapértelmezés szerint ezt állítja be 127.0.0.1:9042.
Hozzunk létre egy csatlakozó osztályt néhány konfigurálható paraméterrel a CqlSession:
nyilvános osztályú CassandraConnector {privát CqlSession munkamenet; public void connect (Karakterlánc-csomópont, Egész port, String dataCenter) {CqlSessionBuilder builder = CqlSession.builder (); builder.addContactPoint (új InetSocketAddress (csomópont, port)); builder.withLocalDatacenter (dataCenter); munkamenet = builder.build (); } public CqlSession getSession () {return this.session; } public void bezárás () {session.close (); }}
3.2. Hozzon létre Kulcsterületet
Most, hogy van kapcsolatunk az adatbázissal, létre kell hoznunk a kulcsterületünket. Kezdjük azzal, hogy írunk egy egyszerű lerakat osztályt a billentyűtér használatához.
Ehhez az oktatóanyaghoz használjuk a SimpleStrategy replikációs stratégia az 1-re állított replikák számával:
public class KeyspaceRepository {public void createKeyspace (String keyspaceName, int numberOfReplicas) {CreateKeyspace createKeyspace = SchemaBuilder.createKeyspace (keyspaceName) .ifNotExists () .withSimpleStrategy (numberOfReplic); session.execute (createKeyspace.build ()); } // ...}
Azt is megtehetjük kezdje el használni a kulcsteret az aktuális munkamenetben:
public class KeyspaceRepository {// ... public void useKeyspace (String keyspace) {session.execute ("USE" + CqlIdentifier.fromCql (keyspace)); }}
3.3. Táblázat létrehozása
Az illesztőprogram utasításokat ad az adatbázisban található lekérdezések konfigurálásához és végrehajtásához. Például, beállíthatjuk a kulcsterületet, hogy az egyes utasításokban egyedileg használjuk.
Meghatározzuk a Videó modellezzen és hozzon létre egy táblázatot az ábrázolásához:
public class Video {private UUID azonosító; privát húr cím; privát Azonnali létrehozásDátum; // szabványos mérőeszközök és beállítók}
Készítsük el a táblánkat, megadva azt a kulcstartományt, amelyben a lekérdezést el akarjuk hajtani. Írunk egy egyszerűt VideoRepository osztály a videoadatainkkal való munkához:
public class VideoRepository {private static final String TABLE_NAME = "videók"; public void createTable () {createTable (null); } public void createTable (String kulcstér) {CreateTable createTable = SchemaBuilder.createTable (TABLE_NAME) .withPartitionKey ("video_id", DataTypes.UUID) .withColumn ("title", DataTypes.TEXT) .withColumn ("creation_date", ); executeStatement (createTable.build (), kulcstér); } privát ResultSet executeStatement (SimpleStatement utasítás, String kulcstér) {if (kulcstér! = null) {utasítás.setKeyspace (CqlIdentifier.fromCql (kulcstér)); } return session.execute (utasítás); } // ...}
Vegye figyelembe, hogy túlterheljük a módszert táblázat létrehozása.
A módszer túlterhelésének ötlete az, hogy két lehetőség áll rendelkezésre a táblázat létrehozásához:
- Hozzon létre egy táblázatot egy meghatározott kulcsterületen, a kulcsterület nevét küldve paraméterként, függetlenül attól, hogy mely munkaterületet használja a munkamenet
- Kezdje el használni a kulcsteret a munkamenetben, és használja a metódust a tábla létrehozásához paraméter nélkül - ebben az esetben a tábla abban a kulcsterületben jön létre, amelyet a munkamenet jelenleg használ
3.4. Adatok beillesztése
Ezenkívül az illesztőprogram elkészített és korlátozott utasításokat ad meg.
A PreparedStatement általában gyakran végrehajtott lekérdezésekhez használatos, csak az értékekben változnak.
Kitölthetjük a PreparedStatement a szükséges értékekkel. Ezt követően létrehozunk egy BoundStatement és végrehajtja.
Írjunk egy módszert néhány adat beillesztésére az adatbázisba:
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 (kulcstér! = null) {insertStatement = insertStatement.setKeyspace (kulcstér); } PreparedStatement készítettStatement = session.prepare (insertStatement); BoundStatement utasítás = előkészítettStatement.bind () .setUuid (0, video.getId ()) .setString (1, video.getTitle ()) .setInstant (2, video.getCreationDate ()); session.execute (utasítás); return videoId; } // ...}
3.5. Lekérdezés adatai
Most adjunk hozzá egy olyan módszert, amely egyszerű lekérdezést hoz létre az adatbázisban tárolt adatok megszerzéséhez:
public class VideoRepository {// ... public List selectAll (String keypace) {Select select = QueryBuilder.selectFrom (TABLE_NAME) .all (); ResultSet resultSet = executeStatement (select.build (), kulcstér); Lista eredménye = new ArrayList (); resultSet.forEach (x -> result.add (új videó (x.getUuid ("video_id"), x.getString ("title"), x.getInstant ("creation_date")))); visszatérési eredmény; } // ...}
3.6. Összedobva az egészet
Végül nézzünk meg egy példát az ebben az oktatóanyagban ismertetett szakaszok használatával:
public class Alkalmazás {public void run () {CassandraConnector csatlakozó = new CassandraConnector (); connector.connect ("127.0.0.1", 9042, "adatközpont1"); CqlSession munkamenet = connector.getSession (); KeyspaceRepository keyspaceRepository = új KeyspaceRepository (munkamenet); keyspaceRepository.createKeyspace ("testKeyspace", 1); keyspaceRepository.useKeyspace ("testKeyspace"); VideoRepository videoRepository = új VideoRepository (munkamenet); videoRepository.createTable (); videoRepository.insertVideo (új videó ("Videó címe 1", Instant.now ())); videoRepository.insertVideo (új videó ("2. videó címe", azonnali.now (). mínusz (1, ChronoUnit.DAYS))); Videók felsorolása = videoRepository.selectAll (); videos.forEach (x -> LOG.info (x.toString ())); csatlakozó.zárja (); }}
Miután végrehajtottuk a példánkat, ennek eredményeként láthatjuk a naplókban, hogy az adatokat megfelelően tárolták az adatbázisban:
INFO com.baeldung.datastax.cassandra.Application - [id: 733249eb-914c-4153-8698-4f58992c4ad4, title: Videó címe 1, creationDate: 2019-07-10T19: 43: 35.112Z] INFO com.baeldung.datastax. cassandra.Application - [id: a6568236-77d7-42f2-a35a-b4c79afabccf, title: Videó 2. címe, creationDate: 2019-07-09T19: 43: 35.181Z]
4. Következtetés
Ebben az oktatóanyagban bemutattuk az Apache Cassandra DataStax Java illesztőprogramjának alapelveit. Csatlakoztunk az adatbázishoz, és létrehoztunk egy kulcsteret és táblázatot. Ezenkívül beillesztettünk adatokat a táblázatba, és lekérdezéssel futtattuk azokat.
Mint mindig, az oktatóanyag forráskódja is elérhető a Githubon.