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