Cassandra Język zapytań (CQL): wstawianie, aktualizowanie i usuwanie

⚡ Inteligentne podsumowanie

Cassandra Język zapytań obsługuje operacje wstawiania, aktualizowania, usuwania i odczytu za pomocą składni zbliżonej do SQL, ale z inną semantyką. Ta strona omawia każdą instrukcję, działanie upsert, które łączy wstawianie i aktualizowanie, oraz rzeczywiste ograniczenia klauzuli WHERE.

  • ➕ Wstaw zachowanie: Obowiązkowy jest tylko klucz podstawowy, a pominięte kolumny nie zajmują żadnej pamięci.
  • 🔄 Semantyka upsertowania: Wstawianie i aktualizowanie to ta sama operacja, więc zapisanie istniejącego klucza powoduje jego ciche nadpisanie.
  • 🗑️ Usuń koszt: Usunięte rzędy stają się nagrobkami i znikają dopiero po zakończeniu zagęszczania.
  • 🔍 Ograniczenia klauzuli Where: Filtrowanie działa w kolumnach klucza podstawowego lub w innych kolumnach, jeśli istnieje indeks.
  • 📊 Łączne wsparcie: LICZBA, MIN, MAX, SUMA, AVG i GROUP BY są obsługiwane, choć efektywnie tylko w obrębie jednej partycji.
  • ???? Nadal nieobsługiwane: Połączenia, warunki OR i analiza międzypartycjonowa pozostają poza zakresem CQL.

Cassandra Wstaw Aktualizuj Usuń CQL

Wstaw dane

Cassandra instrukcja wstaw zapisuje dane Cassandra kolumny w formie wierszy. Cassandra zapytanie wstawiające zapisze tylko te kolumny, które podał użytkownik. Musisz koniecznie określić tylko kolumnę klucza podstawowego.

Nie zajmie miejsca na nie podane wartości. Po wstawieniu nie są zwracane żadne wyniki.

Składnia

INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3)
VALUES (Column1Value, Column2Value, Column3Value);

Przykład

Oto migawka wykonanego Cassandra Wstaw do tabeli zapytanie, które wstawi jeden rekord Cassandra tabela „Student”.

Wstaw dane

INSERT INTO University.Student (RollNo, Name, dept, Semester)
VALUES (2, 'Michael', 'CS', 2);

Po pomyślnym wykonaniu polecenia Wstaw do Cassandra, jeden wiersz zostanie wstawiony do Cassandra tabela Student z rolką nr 2, imieniem Michael, dział CS i semestr 2.

Oto migawka bieżącego stanu bazy danych.

Wstaw dane

Wstaw dane

Cassandra podnosi. Upsert to oznacza Cassandra wstawi wiersz, jeśli klucz podstawowy jeszcze nie istnieje; w przeciwnym razie, jeśli klucz podstawowy już istnieje, wiersz zostanie zaktualizowany.

Ma to praktyczną konsekwencję, którą warto wyraźnie podkreślić: polecenie INSERT nigdy nie zgłasza błędu duplikatu klucza, więc przypadkowe ponowne wstawienie nadpisuje istniejący wiersz bez ostrzeżenia. W razie potrzeby należy temu zapobiec, dodając polecenie IF NOT EXISTS, aby uczynić instrukcję lekką transakcją.

INSERT INTO University.Student (RollNo, Name)
VALUES (2, 'Michael') IF NOT EXISTS;

Lekkie transakcje wykorzystują rundę konsensusu w obrębie replik, więc są znacznie wolniejsze od zwykłego zapisu i powinny być zarezerwowane dla przypadków, w których sprawdzenie jest naprawdę konieczne.

Aktualizować dane

Cassandra Zapytanie aktualizacyjne służy do aktualizacji danych w pliku Cassandra stół. Jeśli po zaktualizowaniu danych nie zostaną zwrócone żadne wyniki, oznacza to, że dane zostały pomyślnie zaktualizowane, w przeciwnym razie zostanie zwrócony błąd. Wartości kolumn są zmieniane w klauzuli „Set”, podczas gdy dane są filtrowane za pomocą klauzuli „Where”.

Składnia

UPDATE KeyspaceName.TableName
SET ColumnName1 = NewValue1,
    ColumnName2 = NewValue2
WHERE ColumnName = ColumnValue;

Przykład

Oto zrzut ekranu przedstawiający stan bazy danych przed aktualizacją danych.

Aktualizować dane

Oto migawka wykonanego Cassandra Polecenie aktualizacji aktualizujące rekord w tabeli Student.

Aktualizować dane

UPDATE University.Student
SET name = 'Hayden'
WHERE rollno = 1;

Po pomyślnym wykonaniu zapytania aktualizacyjnego w Cassandra „Aktualizuj ucznia”, imię i nazwisko ucznia zostanie zmienione z „Clark” na „Hayden”, którego rolka ma numer 1.

Oto zrzut ekranu przedstawiający stan bazy danych po aktualizacji danych.

Aktualizować dane

Ze względu na zachowanie funkcji upsert, polecenie UPDATE dotyczące nieistniejącego klucza podstawowego tworzy wiersz, zamiast zakończyć się niepowodzeniem.

Cassandra Usunąć dane

Polecenie „Usuń” usuwa cały wiersz lub niektóre kolumny z tabeli Student. Usunięte dane nie są natychmiast usuwane z tabeli. Zamiast tego usunięte dane są oznaczane nagrobkiem i usuwane po zagęszczeniu.

Składnia

DELETE FROM KeyspaceName.TableName
WHERE ColumnName1 = ColumnValue;

Powyżej Cassandra Składnia usuwania wierszy usunie jeden lub więcej wierszy, w zależności od filtrowania danych w klauzuli Where.

DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName
WHERE ColumnName1 = ColumnValue;

Powyższa składnia spowoduje usunięcie niektórych kolumn z tabeli.

Przykład

Oto migawka pokazująca bieżący stan bazy danych przed usunięciem danych.

Cassandra Usunąć dane

Oto migawka polecenia, które usunie jeden wiersz z tabeli Student.

Cassandra Usunąć dane

DELETE FROM University.Student WHERE rollno = 1;

Po pomyślnym wykonaniu polecenia CQL Delete, jeden wiersz zostanie usunięty z tabeli Student, której wartość rollno wynosi 1.

Oto migawka pokazująca stan bazy danych po usunięciu danych.

Cassandra Usunąć dane

Nagrobki są zachowywane przez gc_grace_seconds, czyli domyślnie dziesięć dni, więc węzeł offline podczas usuwania nie może wskrzesić wiersza po jego usunięciu. Usuwanie dużych woluminów pozostawia zatem znaczniki, które każdy kolejny odczyt musi przeskanować.

Co Cassandra nie wspiera

Język CQL zapożycza składnię języka SQL, ale nie czerpie z modelu wykonywania relacji, dlatego też kilka znanych konstrukcji zachowuje się inaczej lub w ogóle nie występuje.

  1. Język CQL nie obsługuje połączeń między tabelami. Powiązane dane muszą zostać zdenormalizowane do jednej tabeli w momencie zapisu.
  2. Język CQL nie obsługuje warunków OR w klauzuli WHERE. Użyj warunku IN w pojedynczej kolumnie lub uruchom osobne zapytania.
  3. CQL nie obsługuje UNION ani INTERSECT.
  4. Kolumn niebędących kluczami podstawowymi nie można filtrować, dopóki nie zostanie utworzony dla nich indeks.
  5. Porównania „większe” i „mniejsze” mają zastosowanie wyłącznie do kolumn klastrowanych, ponieważ tylko takie kolumny są sortowane na dysku.
  6. Dopasowywanie wzorców za pomocą LIKE wymaga indeksu SASI i nie jest dostępne w zwykłych kolumnach.

Jedno długo powtarzane roszczenie wymaga sprostowania. Obsługiwane są funkcje agregujące: LICZ, MIN, MAX, SUMA i AVG przybyć Cassandra 2.2 i GRUPUJ WEDŁUG pojawiło się w wersji 3.10. Zastrzeżenie dotyczy zakresu, a nie dostępności.

SELECT dept, COUNT(*) FROM University.Student
WHERE RollNo = 1 GROUP BY dept;

Ograniczony do pojedynczej partycji, jak powyżej, agregat jest wydajny. Przeprowadzony na całej tabeli staje się skanowaniem całego klastra, dlatego Cassandra pozostaje nieodpowiedni do doraźnych analiz i dlaczego zwykle wykonuje się obszerne raportowanie Spark lub magazynu zewnętrznego.

Cassandra Gdzie klauzula

In Cassandra, pobieranie danych jest kwestią delikatną. Kolumna jest filtrowana Cassandra tworząc indeks dla kolumn innych niż klucz podstawowy.

Składnia

SELECT ColumnNames FROM KeyspaceName.TableName
WHERE ColumnName1 = Column1Value
  AND ColumnName2 = Column2Value;

Przykład

  • Oto migawka pokazująca pobieranie danych z tabeli Studenta bez filtrowania danych.

Cassandra Gdzie klauzula

SELECT * FROM University.Student;

Z tabeli Studenta pobierane są dwa rekordy.

  • Oto migawka pokazująca pobieranie danych od Studenta z filtracją danych. Pobrano jeden rekord.

Dane są filtrowane według kolumny z nazwą. Pobierane są wszystkie rekordy, których nazwa jest równa Guru99.

Cassandra Gdzie klauzula

SELECT * FROM University.Student WHERE name = 'Guru99';

Reguły regulujące, do których kolumn może odwoływać się klauzula WHERE, wynikają bezpośrednio z klucza podstawowego.

  • klucz partycji musi zostać podany w całości, aby można było wykonać jakiekolwiek efektywne zapytanie, ponieważ identyfikuje węzeł przechowujący dane.
  • Clusterkolumny ing mogą być następnie ograniczone, ale tylko w kolejności, w jakiej zostały zadeklarowane. Pomińping jeden jest odrzucany.
  • Porównania zakresów są dozwolone w odniesieniu do ostatniej kolumny klastrowania, do której się odwołujesz, a nie do kolumn wcześniejszych.
  • Każdy inna kolumna potrzebuje indeksu wtórnego, objętego tworzenie i usuwanie indeksu poradnik.

Gdy zapytanie zostanie odrzucone, Cassandra Często sugeruje dodanie opcji „Zezwól na filtrowanie”. Potraktuj to jako ostrzeżenie, a nie rozwiązanie: skanuje ona każdą partycję na każdym węźle, a zmiana schematu jest prawie zawsze poprawną odpowiedzią.

FAQ

Partia grupuje polecenia tak, aby były one wykonywane razem lub niepowodzeniem. Używaj jej do synchronizacji duplikatów tabel, a nie do ładowania zbiorczego, gdzie partia obejmująca wiele partycji znacznie spowalnia koordynatora.

Sterowniki automatycznie uruchamiają stronę za pomocą tokena stanu stronicowania. W cqlsh, PAGING ustawia rozmiar. Unikaj emulacji OFFSET za pomocą licznika, ponieważ Cassandra nie ma efektywnego pomijania rzędówping mechanizm.

Jeśli replika była niedostępna dłużej niż gc_grace_seconds, a nagrobek był już zagęszczony, replika nadal utrzymuje stary rząd i rozprowadza go z powrotem. Regularna naprawa zapobiega temu.

Proste selekcje jednotabelowe konwertują dobrze. Wszystko z łączeniem, komendą „LUB” lub podzapytaniem nie ma bezpośredniego odpowiednika w CQL, a AI często maskuje lukę za pomocą opcji „Zezwól na filtrowanie”, co nie jest rozwiązaniem.

Tak. Wklejanie TRACWyjście ING ON zazwyczaj daje wyraźny odczyt skanów Tombstone, szerokich partycji lub przeskoków między węzłami. Przed zastosowaniem należy zweryfikować sugerowaną zmianę schematu na kopii.

Podsumuj ten post następująco: