Cassandra - Dichiarazioni sui lotti

Utilizzo di dichiarazioni batch

Utilizzando BATCH,è possibile eseguire più istruzioni di modifica (inserire, aggiornare, eliminare) contemporaneamente. La sua sintassi è la seguente:

BEGIN BATCH
<insert-stmt>/ <update-stmt>/ <delete-stmt>
APPLY BATCH

Esempio

Supponiamo che ci sia una tabella in Cassandra chiamata emp con i seguenti dati:

emp_id emp_name emp_city emp_phone emp_sal
1 ariete Hyderabad 9848022338 50000
2 pettirosso Delhi 9848022339 50000
3 rahman Chennai 9848022330 45000

In questo esempio, eseguiremo le seguenti operazioni:

  • Inserisci una nuova riga con i seguenti dettagli (4, rajeev, pune, 9848022331, 30000).
  • Aggiorna lo stipendio del dipendente con l'ID di riga 3 a 50000.
  • Elimina la città del dipendente con l'ID di riga 2.

Per eseguire le operazioni di cui sopra in una volta sola, utilizzare il seguente comando BATCH:

cqlsh:tutorialspoint> BEGIN BATCH
... INSERT INTO emp (emp_id, emp_city, emp_name, emp_phone, emp_sal) values(  4,'Pune','rajeev',9848022331, 30000);
... UPDATE emp SET emp_sal = 50000 WHERE emp_id =3;
... DELETE emp_city FROM emp WHERE emp_id = 2;
... APPLY BATCH;

Verifica

Dopo aver apportato le modifiche, verificare la tabella utilizzando l'istruzione SELECT. Dovrebbe produrre il seguente output:

cqlsh:tutorialspoint> select * from emp;

 emp_id |  emp_city | emp_name |  emp_phone | emp_sal
--------+-----------+----------+------------+---------
      1 | Hyderabad | ram      | 9848022338 | 50000
      2 | null      | robin    | 9848022339 | 50000
      3 | Chennai   | rahman   | 9848022330 | 50000
      4 | Pune      | rajeev   | 9848022331 | 30000
    
(4 rows)

Qui puoi osservare la tabella con i dati modificati.

Dichiarazioni batch utilizzando l'API Java

Le istruzioni batch possono essere scritte in modo programmatico in una tabella utilizzando il metodo execute () della classe Session. Seguire i passaggi indicati di seguito per eseguire più istruzioni utilizzando l'istruzione batch con l'aiuto dell'API Java.

Passaggio 1: creare un oggetto cluster

Crea un'istanza di Cluster.builder classe di com.datastax.driver.core pacchetto come mostrato di seguito.

//Creating Cluster.Builder object
Cluster.Builder builder1 = Cluster.builder();

Aggiungi un punto di contatto (indirizzo IP del nodo) utilizzando il file addContactPoint() metodo di Cluster.Builderoggetto. Questo metodo restituisceCluster.Builder.

//Adding contact point to the Cluster.Builder object
Cluster.Builder builder2 = build.addContactPoint( "127.0.0.1" );

Utilizzando il nuovo oggetto builder, creare un oggetto cluster. Per fare ciò, hai un metodo chiamatobuild() nel Cluster.Builderclasse. Utilizzare il codice seguente per creare l'oggetto cluster:

//Building a cluster
Cluster cluster = builder.build();

È possibile creare l'oggetto cluster utilizzando una singola riga di codice come mostrato di seguito.

Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();

Passaggio 2: creare un oggetto sessione

Crea un'istanza dell'oggetto Session utilizzando il metodo connect () della classe Cluster come mostrato di seguito.

Session session = cluster.connect( );

Questo metodo crea una nuova sessione e la inizializza. Se si dispone già di uno spazio chiavi, è possibile impostarlo su quello esistente passando il nome KeySpace in formato stringa a questo metodo come mostrato di seguito.

Session session = cluster.connect(“ Your keyspace name ”);

Qui stiamo usando il KeySpace denominato tp. Pertanto, creare l'oggetto sessione come mostrato di seguito.

Session session = cluster.connect(“tp”);

Passaggio 3: eseguire la query

È possibile eseguire query CQL utilizzando il metodo execute () della classe Session. Passa la query in formato stringa o come oggetto della classe Statement al metodo execute (). Qualunque cosa passi a questo metodo in formato stringa verrà eseguita nel filecqlsh.

In questo esempio, eseguiremo le seguenti operazioni:

  • Inserisci una nuova riga con i seguenti dettagli (4, rajeev, pune, 9848022331, 30000).
  • Aggiorna lo stipendio del dipendente con l'ID di riga 3 a 50000.
  • Elimina la città del dipendente con l'ID di riga 2.

È necessario memorizzare la query in una variabile stringa e passarla al metodo execute () come mostrato di seguito.

String query1 = ” BEGIN BATCH INSERT INTO emp (emp_id, emp_city, emp_name,   emp_phone, emp_sal) values( 4,'Pune','rajeev',9848022331, 30000);
UPDATE emp SET emp_sal = 50000 WHERE emp_id =3;
DELETE emp_city FROM emp WHERE emp_id = 2;
APPLY BATCH;”;

Di seguito è riportato il programma completo per eseguire più istruzioni contemporaneamente su una tabella in Cassandra utilizzando l'API Java.

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;

public class Batch {

   public static void main(String args[]){
    
      //query
      String query =" BEGIN BATCH INSERT INTO emp (emp_id, emp_city,
         emp_name, emp_phone, emp_sal) values( 4,'Pune','rajeev',9848022331, 30000);"
    
         + "UPDATE emp SET emp_sal = 50000 WHERE emp_id =3;"
         + "DELETE emp_city FROM emp WHERE emp_id = 2;"
         + "APPLY BATCH;";

      //Creating Cluster object
      Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
 
      //Creating Session object
      Session session = cluster.connect("tp");
 
      //Executing the query
      session.execute(query);

      System.out.println("Changes done");
   }
}

Salva il programma sopra con il nome della classe seguito da .java, vai alla posizione in cui è stato salvato. Compilare ed eseguire il programma come mostrato di seguito.

$javac Batch.java $java Batch

In condizioni normali, dovrebbe produrre il seguente output:

Changes done