Cassandra Linguaggio di interrogazione (CQL): Inserimento, aggiornamento ed eliminazione

⚡ Riepilogo intelligente

Cassandra Il linguaggio Query gestisce le operazioni di inserimento, aggiornamento, eliminazione e lettura con una sintassi simile a SQL, ma con una semantica sottostante differente. Questa pagina illustra ciascuna istruzione, il comportamento di upsert che unisce inserimento e aggiornamento e i limiti reali della clausola WHERE.

  • ➕ Inserire il comportamento: Solo la chiave primaria è obbligatoria, mentre le colonne omesse non occupano spazio di archiviazione.
  • 🔄 Semantica dell'upsert: L'inserimento e l'aggiornamento sono la stessa operazione, quindi la scrittura di una chiave esistente la sovrascrive automaticamente.
  • 🗑️ Elimina il costo: Le file rimosse diventano lapidi e scompaiono solo dopo i processi di compattazione.
  • 🔍 Dove la clausola limita: Il filtraggio funziona sulle colonne della chiave primaria, oppure su altre colonne una volta creato l'indice.
  • 📊 Supporto complessivo: CONTEGGIO, MIN, MAX, SOMMA, AVG e GROUP BY sono supportati, sebbene in modo efficiente solo all'interno di una singola partizione.
  • 🚫 Ancora senza supporto: Le join, le condizioni OR e le analisi tra partizioni rimangono, per scelta, escluse da CQL.

Cassandra CQL Inserisci Aggiorna Elimina

Inserisci dati

Migliori Cassandra l'istruzione insert scrive i dati Cassandra colonne sotto forma di riga. Cassandra la query di inserimento memorizzerà solo le colonne fornite dall'utente. Devi necessariamente specificare solo la colonna della chiave primaria.

Non occuperà spazio per valori non specificati. Nessun risultato viene restituito dopo l'inserimento.

Sintassi

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

Esempio

Ecco lo snapshot dell'eseguito Cassandra Inserisci nella query della tabella in cui verrà inserito un record Cassandra tabella 'Studente'.

Inserisci dati

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

Dopo aver eseguito con successo il comando Inserisci in Cassandra, una riga verrà inserita nel file Cassandra tabella Studente con RollNo 2, Nome Michael, dipartimento CS e Semestre 2.

Ecco l'istantanea dello stato corrente del database.

Inserisci dati

Aggiorna dati

Cassandra si sconvolge. Upsert significa questo Cassandra inserirà una riga se non esiste già una chiave primaria, altrimenti se la chiave primaria esiste già, aggiornerà quella riga.

Ciò ha una conseguenza pratica che vale la pena di esplicitare: un'istruzione INSERT non segnala mai un errore di chiave duplicata, quindi un reinserimento accidentale sovrascrive la riga esistente senza preavviso. Quando è necessario evitarlo, si aggiunge IF NOT EXISTS per rendere l'istruzione una transazione leggera.

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

Le transazioni leggere utilizzano un round di consenso tra le repliche, quindi sono considerevolmente più lente di una normale scrittura e dovrebbero essere riservate ai casi in cui il controllo è effettivamente necessario.

Aggiorna dati

Migliori Cassandra La query di aggiornamento viene utilizzata per aggiornare i dati nel file Cassandra tavolo. Se non vengono restituiti risultati dopo l'aggiornamento dei dati, significa che i dati sono stati aggiornati correttamente, altrimenti verrà restituito un errore. I valori delle colonne vengono modificati nella clausola 'Set' mentre i dati vengono filtrati con la clausola 'Where'.

Sintassi

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

Esempio

Ecco lo screenshot che mostra lo stato del database prima dell'aggiornamento dei dati.

Aggiorna dati

Ecco lo snapshot dell'eseguito Cassandra Comando Aggiorna che aggiorna il record nella tabella Studenti.

Aggiorna dati

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

Dopo l'esecuzione corretta della query di aggiornamento in Cassandra "Aggiorna studente", il nome dello studente verrà cambiato da "Clark" a "Hayden" che ha il numero 1.

Ecco lo screenshot che mostra lo stato del database dopo l'aggiornamento dei dati.

Aggiorna dati

A causa del comportamento dell'operazione di upsert, un'operazione di UPDATE su una chiave primaria inesistente crea la riga anziché fallire.

Cassandra Elimina dati

Il comando 'Elimina' rimuove un'intera riga o alcune colonne dalla tabella Studente. Quando i dati vengono eliminati, non vengono eliminati immediatamente dalla tabella. Invece i dati cancellati vengono contrassegnati con una pietra tombale e vengono rimossi dopo la compattazione.

Sintassi

DELETE FROM KeyspaceName.TableName
WHERE ColumnName1 = ColumnValue;

Quanto sopra Cassandra la sintassi della riga delete eliminerà una o più righe a seconda del filtraggio dei dati nella clausola where.

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

La sintassi precedente eliminerà alcune colonne dalla tabella.

Esempio

Ecco lo snapshot che mostra lo stato corrente del database prima dell'eliminazione dei dati.

Cassandra Elimina dati

Ecco lo snapshot del comando che rimuoverà una riga dalla tabella Student.

Cassandra Elimina dati

DELETE FROM University.Student WHERE rollno = 1;

Dopo la corretta esecuzione del comando CQL Delete, verrà eliminata una riga dalla tabella Student in cui il valore di rollno è 1.

Ecco lo snapshot che mostra lo stato del database dopo l'eliminazione dei dati.

Cassandra Elimina dati

Le lapidi rimangono per gc_grace_seconds, ovvero dieci giorni per impostazione predefinita, in modo che un nodo offline durante l'eliminazione non possa ripristinare la riga al suo ritorno. L'eliminazione di volumi di grandi dimensioni lascia quindi dei marcatori che ogni successiva operazione di lettura deve ignorare.

Che Cassandra non supporta

CQL prende in prestito la sintassi SQL ma non il modello di esecuzione relazionale, quindi diverse strutture familiari si comportano in modo diverso o sono assenti.

  1. CQL non supporta le join tra tabelle. I dati correlati devono essere denormalizzati in un'unica tabella al momento della scrittura.
  2. CQL non supporta le condizioni OR nelle clausole WHERE. Utilizza IN su una singola colonna oppure esegui query separate.
  3. CQL non supporta UNION o INTERSECT.
  4. Le colonne non chiave primaria non possono essere filtrate finché non esiste un indice su di esse.
  5. I confronti "maggiore di" e "minore di" si applicano solo alle colonne di clustering, perché solo queste vengono ordinate su disco.
  6. La corrispondenza di pattern con LIKE richiede un indice SASI e non è disponibile sulle colonne ordinarie.

Una vecchia affermazione necessita di una correzione. Le funzioni aggregate sono supportate: CONTA, MIN, MAX, SOMMA e AVG arrivato a Cassandra 2.2, e RAGGRUPPA PER arrivato nella versione 3.10. Il problema riguarda la portata, non la disponibilità.

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

Limitata a una singola partizione come sopra, un'aggregazione è efficiente. Eseguita sull'intera tabella diventa una scansione a livello di cluster, motivo per cui Cassandra rimane inadatto per analisi ad hoc ed è per questo che la reportistica pesante viene solitamente rimandata Spark o un magazzino esterno.

Cassandra Dove Clausola

In Cassandra, il recupero dei dati è una questione delicata. La colonna viene filtrata Cassandra creando un indice su colonne di chiave non primaria.

Sintassi

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

Esempio

  • Ecco l'istantanea che mostra il recupero dei dati dalla tabella Studente senza filtraggio dei dati.

Cassandra Dove Clausola

SELECT * FROM University.Student;

Vengono recuperati due record dalla tabella Studenti.

  • Ecco l'istantanea che mostra il recupero dei dati da Student con il filtraggio dei dati. Viene recuperato un record.

I dati vengono filtrati in base alla colonna del nome. Vengono recuperati tutti i record che hanno nome uguale a Guru99

Cassandra Dove Clausola

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

Le regole che stabiliscono a quali colonne può fare riferimento una clausola WHERE derivano direttamente dalla chiave primaria.

  • Migliori chiave di partizione Deve essere fornito per intero per qualsiasi query efficiente, poiché identifica il nodo che contiene i dati.
  • Clustercolonne possono quindi essere limitati, ma solo nell'ordine in cui sono stati dichiarati.ping uno viene rifiutato.
  • I confronti di intervallo sono consentiti sull'ultima colonna di clustering a cui si fa riferimento, non su quelle precedenti.
  • Qualsiasi altra colonna necessita di un indice secondario, trattato nel crea e elimina indice tutorial.

Quando una query viene rifiutata, Cassandra Spesso viene suggerito di aggiungere ALLOW FILTERING. Consideratelo un avvertimento piuttosto che una soluzione: il sistema analizza ogni partizione su ogni nodo e una modifica dello schema è quasi sempre la risposta corretta.

DOMANDE FREQUENTI

Un'operazione batch raggruppa le istruzioni in modo che abbiano successo o falliscano insieme. Utilizzatela per mantenere sincronizzate le tabelle duplicate, non per il caricamento in blocco, dove un'operazione batch su molte partizioni rallenta notevolmente il coordinatore.

I driver mettono in pagina automaticamente utilizzando un token di stato di paginazione. In cqlsh, PAGING imposta la dimensione. Evitare di emulare OFFSET con un contatore, perché Cassandra non ha un efficiente salto di rigaping meccanismo.

Se una replica è rimasta inattiva per un periodo superiore a gc_grace_seconds e la riga di dati è già stata compattata, quella replica conserva ancora la vecchia riga e la ridistribuisce. La riparazione regolare impedisce che ciò accada.

Le semplici query SELECT su una singola tabella generano buoni risultati. Qualsiasi operazione con JOIN, OR o subquery non ha un equivalente CQL diretto e l'IA spesso colma questa lacuna con ALLOW FILTERING, che non rappresenta una soluzione.

Sì. Incollare TRACL'output di ING ON solitamente fornisce una lettura chiara delle scansioni dei tombstone, delle partizioni estese o dei salti tra nodi. Verificare la modifica dello schema suggerita su una copia prima di applicarla.

Riassumi questo post con: