Cassandra - Instrukcje wsadowe

Korzystanie z instrukcji wsadowych

Za pomocą BATCH,można jednocześnie wykonywać wiele instrukcji modyfikujących (wstawianie, aktualizowanie, usuwanie). Jego składnia jest następująca -

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

Przykład

Załóżmy, że w Cassandrze znajduje się tabela o nazwie emp, która zawiera następujące dane -

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

W tym przykładzie wykonamy następujące operacje -

  • Wstaw nowy wiersz z następującymi szczegółami (4, rajeev, pune, 9848022331, 30000).
  • Zaktualizuj wynagrodzenie pracownika z identyfikatorem wiersza 3 na 50000.
  • Usuń miasto pracownika o identyfikatorze wiersza 2.

Aby wykonać powyższe operacje za jednym razem, użyj następującego polecenia 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;

Weryfikacja

Po wprowadzeniu zmian sprawdź tabelę za pomocą instrukcji SELECT. Powinien dać następujący wynik -

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)

Tutaj możesz obserwować tabelę ze zmodyfikowanymi danymi.

Instrukcje wsadowe przy użyciu Java API

Instrukcje wsadowe można zapisać programowo w tabeli przy użyciu metody execute () klasy Session. Postępuj zgodnie z instrukcjami podanymi poniżej, aby wykonać wiele instrukcji za pomocą instrukcji wsadowej za pomocą interfejsu API języka Java.

Krok 1: Utwórz obiekt klastra

Utwórz wystąpienie Cluster.builder klasa com.datastax.driver.core pakiet, jak pokazano poniżej.

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

Dodaj punkt kontaktowy (adres IP węzła) za pomocą rozszerzenia addContactPoint() metoda Cluster.Builderobiekt. Ta metoda zwracaCluster.Builder.

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

Korzystając z nowego obiektu konstruktora, utwórz obiekt klastra. Aby to zrobić, masz metodę o nazwiebuild() w Cluster.Builderklasa. Użyj następującego kodu, aby utworzyć obiekt klastra -

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

Możesz zbudować obiekt klastra przy użyciu jednej linii kodu, jak pokazano poniżej.

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

Krok 2: Utwórz obiekt sesji

Utwórz wystąpienie obiektu Session za pomocą metody connect () klasy Cluster, jak pokazano poniżej.

Session session = cluster.connect( );

Ta metoda tworzy nową sesję i inicjuje ją. Jeśli masz już przestrzeń kluczy, możesz ustawić ją na istniejącą, przekazując nazwę KeySpace w formacie ciągu do tej metody, jak pokazano poniżej.

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

Tutaj używamy KeySpace o nazwie tp. Dlatego utwórz obiekt sesji, jak pokazano poniżej.

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

Krok 3: Wykonaj zapytanie

Zapytania CQL można wykonywać za pomocą metody execute () klasy Session. Przekaż zapytanie w formacie ciągu znaków lub jako obiekt klasy Statement do metody execute (). Cokolwiek przekażesz do tej metody w formacie ciągu, zostanie wykonane nacqlsh.

W tym przykładzie wykonamy następujące operacje -

  • Wstaw nowy wiersz z następującymi szczegółami (4, rajeev, pune, 9848022331, 30000).
  • Zaktualizuj wynagrodzenie pracownika z identyfikatorem wiersza 3 na 50000.
  • Usuń miasto pracownika o identyfikatorze wiersza 2.

Musisz zapisać zapytanie w zmiennej łańcuchowej i przekazać je do metody execute (), jak pokazano poniżej.

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;”;

Poniżej podano kompletny program do jednoczesnego wykonywania wielu instrukcji na tabeli w Cassandrze przy użyciu Java API.

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");
   }
}

Zapisz powyższy program z nazwą klasy, a następnie .java, przejdź do lokalizacji, w której jest zapisany. Skompiluj i uruchom program, jak pokazano poniżej.

$javac Batch.java $java Batch

W normalnych warunkach powinien dać następujący wynik -

Changes done