Questa pagina descrive il funzionamento di Spanner con le chiavi principali e offre strategie di migrazione delle chiavi principali per i seguenti casi d'uso:
- Migrazione dei database di chiavi UUID
- Migrazione di database a istanza singola con chiavi sequenziali
- Migrazione di database di chiavi sequenziali con supporto del cutover in tempo reale
- Migrazione dei database di chiavi sequenziali con dipendenze di logica dell'applicazione
Un approccio tipico alle chiavi primarie consiste nell'utilizzare chiavi surrogate come l'incremento automatico numeri. Queste chiavi principali offrono la flessibilità necessaria per ottimizzare le chiavi ora e in futuro, anche se la logica aziendale cambia. In un database a istanza singola all'indirizzo un volume basso, i tasti sequenziali funzionano bene. Tuttavia, in un sistema distribuito, tasti sequenziali non scalano bene.
Chiavi primarie sequenziali in Spanner
In Spanner, ogni tabella ha una chiave primaria composta da una o più colonne della tabella. La chiave primaria della tabella identifica in modo univoco ogni riga in una tabella. Spanner usa la chiave primaria per distribuire gruppi di righe, denominate suddivisioni, tra i nodi di computing in un'istanza Spanner. Questo è chiamato sharding dell'intervallo e consente a Spanner di caricare in contemporanea le query su larga scala.
Se hai righe con chiavi primarie i cui valori sono molto vicini, come le chiavi a incremento automatico monotonico, tendono ad avere la stessa suddivisione. In questo modo, si può creare un hotspot in cui la suddivisione può utilizzare tutte le risorse di calcolo e memoria disponibili. Un hotspot può causare un aumento della latenza, causando potenziali timeout e transazioni interrotte.
Per sfruttare la scalabilità di Spanner ed evitare gli hotspot, Spanner offre soluzioni integrate come alternative alle chiavi principali con incremento automatico.
Consigli per le chiavi principali
Il consiglio predefinito per le chiavi principali in Spanner è di utilizzare valori UUID (Universally Unique Identifier) versione 4 (UUIDv4). Gli UUID sono identificatori di 128 bit che utilizzano 122 bit di dati casuali. I valori UUIDv4 hanno una vasta gamma di valori e sono effettivamente univoci indipendentemente da dove vengono generati. Questo li rende buoni candidati per chiavi primarie senza hotspot in Spanner.
Ti consigliamo di utilizzare chiavi primarie con numeri interi perché occupano meno spazio e riducono e la complessità delle modifiche che dovrai apportare. Puoi usare un valore positivo invertita di bit per generare coppie chiave primaria-valore uniche che distribuite nello spazio intero positivo a 64 bit.
Per saperne di più su come scegliere una chiave primaria per evitare hotspot, consulta le best practice per la progettazione degli schemi.
Strategie di migrazione
A seconda del caso d'uso e delle esigenze della tua applicazione, puoi eseguire il deployment di una chiave primaria di migrazione. Ognuna di queste strategie di migrazione:
- Assicurati la fedeltà e la correttezza delle chiavi primarie migrate.
- Riduci al minimo le modifiche downstream dell'applicazione, come la modifica dei tipi o delle chiave primaria-valore.
- Implementa le best practice di Spanner per prestazioni e scalabilità.
- Spanner modifica solo il metodo di generazione dei nuovi dati e non influisce sui dati esistenti.
Migrazione dei database di chiavi UUID in corso
Considera che stai eseguendo la migrazione da un database che utilizza le chiavi primarie dell'UUID in Spanner. Configura le chiavi UUID esistenti come stringhe nel database di origine e importale in Spanner così come sono. I valori UUID, in particolare la versione 4, sono effettivamente univoci indipendentemente da dove vengono generati.
Puoi utilizzare la funzione GENERATE_UUID()
(GoogleSQL,
PostgreSQL) su Spanner per eseguire la migrazione dei database con chiavi UUID.
Per istruzioni sulla migrazione dei database delle chiavi UUID, consulta Eseguire la migrazione delle colonne delle chiavi UUID.
Migrazione di database a istanza singola con chiavi sequenziali
Supponiamo che tu stia eseguendo la migrazione da un database a istanza singola che utilizza chiavi monotoniche sequenziali, come AUTO_INCREMENT
in MySQL, SERIAL
in PostgreSQL o il tipo IDENTITY
standard in SQL Server o Oracle.
Configura l'oggetto Spanner SEQUENCE
in modo da saltare i valori nell'intervallo delle chiavi esistenti e generare nuove chiavi con i bit invertiti. Le chiavi con inversione dei bit generate dall'oggetto Spanner SEQUENCE
sono sempre maggiori di zero e sono distribuite uniformemente nello spazio di interi positivi a 64 bit.
Per istruzioni sulla migrazione dei database che hanno chiavi sequenziali, consulta Eseguire la migrazione chiavi primarie sequenziali generate automaticamente.
Migrazione di database di chiavi sequenziali che supportano il cutover in tempo reale
Considera che stai eseguendo la migrazione da un database a istanza singola che utilizza chiavi monotoiche sequenziali a Spanner e supportare scenari di replica, ad esempio vuoi eseguire una migrazione live tra i sistemi del database.
Configura l'oggetto Spanner SEQUENCE
per saltare l'intero intervallo di valori
delle chiavi esistenti nel database di origine e genera nuove chiavi invertite dei bit.
su Spanner. Chiavi invertite sui bit generate da Spanner
Gli oggetti SEQUENCE
sono sempre maggiori di zero, ma non in ordine.
Per istruzioni sulla migrazione dei database che supportano il passaggio dal live, consulta Utilizzare Spanner e il database di origine.
Migrazione di database di chiavi sequenziali con dipendenze dalla logica dell'applicazione
Supponiamo che tu stia eseguendo la migrazione da un database che utilizza chiavi monotoniche sequenziali e che la logica della tua applicazione si basi sull'ordine della chiave principale per determinare la pertinenza o per ordinare i dati appena creati.
Crea una chiave composta che combini un valore distribuito in modo uniforme, ad esempio un ID shard o un hash, come primo componente e un numero sequenziale come secondo componente. Ciò conserva le coppie chiave-valore ordinate, senza causare un hotspot su larga scala.
Per istruzioni sulla migrazione dei database di chiavi sequenziali con dipendenze della logica di applicazione, consulta Eseguire la migrazione delle chiavi primarie.
Passaggi successivi
- Per visualizzare i flussi di lavoro di migrazione dettagliati, vedi Eseguire la migrazione delle chiavi principali.