Panoramica di Bigtable

Bigtable è una tabella scarsamente popolata che può scalare fino a miliardi di righe e migliaia di colonne, per archiviare terabyte o perfino petabyte di dati. Viene indicizzato un singolo valore in ogni riga; questo valore è noto come chiave di riga. Bigtable è ideale per l'archiviazione di grandi quantità di dati a chiave singola con bassa latenza. Supporta una velocità effettiva di lettura e scrittura elevata a bassa latenza ed è un'origine dati ideale per le operazioni MapReduce.

Bigtable è esposto alle applicazioni tramite più librerie client, tra cui un'estensione supportata della libreria Apache HBase per Java. Di conseguenza, si integra con l'ecosistema Apache esistente del software per big data open source.

I potenti server di backend di Bigtable offrono diversi vantaggi chiave rispetto a un'installazione HBase autogestita:

  • Scalabilità incredibile. Bigtable scala in proporzione diretta al numero di macchine nel cluster. Un'installazione HBase autogestita presenta un collo di bottiglia nella progettazione che limita le prestazioni al raggiungimento di una determinata soglia. Bigtable non ha questo collo di bottiglia, quindi puoi fare lo scale up del tuo cluster per gestire più letture e scritture.
  • Amministrazione semplice. Bigtable gestisce gli upgrade e si riavvia in modo trasparente e mantiene automaticamente un'elevata durabilità dei dati. Per replicare i dati, è sufficiente aggiungere un secondo cluster all'istanza. La replica verrà avviata automaticamente. Non dovrai più gestire repliche o regioni: ti basterà progettare gli schemi delle tabelle e Bigtable si occuperà del resto per te.
  • Ridimensionamento dei cluster senza tempi di inattività. Puoi aumentare le dimensioni di un cluster Bigtable per alcune ore per gestire un carico di grandi dimensioni e poi ridurre di nuovo le dimensioni del cluster, il tutto senza tempi di inattività. Dopo aver modificato le dimensioni di un cluster, in genere sono necessari solo pochi minuti sotto carico affinché Bigtable bilancia le prestazioni in tutti i nodi del cluster.

Per cosa è utile

Bigtable è ideale per le applicazioni che richiedono velocità effettiva elevata e scalabilità per dati chiave/valore, dove ciascun valore non supera in genere i 10 MB. Bigtable eccelle anche come motore di archiviazione per operazioni MapReduce in batch, elaborazione/analisi dei flussi e applicazioni di machine learning.

Puoi utilizzare Bigtable per archiviare ed eseguire query su tutti i seguenti tipi di dati:

  • Dati delle serie temporali,come l'utilizzo di CPU e memoria nel tempo per più server.
  • Dati di marketing,ad esempio le cronologie degli acquisti e le preferenze dei clienti.
  • Dati finanziari, come cronologie delle transazioni, prezzi delle azioni e tassi di cambio della valuta.
  • Dati di Internet of Things, ad esempio report sull'utilizzo provenienti da misuratori di energia ed elettrodomestici.
  • Dati grafici,ad esempio informazioni su come gli utenti sono collegati tra loro.

Modello di archiviazione Bigtable

Bigtable archivia i dati in tabelle ad altissima scalabilità, ciascuna delle quali è una mappa chiave/valore ordinata. La tabella è composta da righe, ciascuna delle quali descrive in genere una singola entità, e colonne, che contengono singoli valori per ogni riga. Ogni riga è indicizzata con una singola chiave di riga e le colonne correlate una all'altra sono generalmente raggruppate in una famiglia di colonne. Ogni colonna è identificata da una combinazione della famiglia di colonne e di un qualificatore di colonna, che è un nome univoco all'interno della famiglia di colonne.

Ogni intersezione di riga/colonna può contenere più celle. Ogni cella contiene una versione univoca con timestamp dei dati della riga e della colonna. L'archiviazione di più celle in una colonna fornisce un record delle modifiche apportate ai dati archiviati per la riga e la colonna in questione nel tempo. Le tabelle Bigtable sono sparse; se una colonna non viene utilizzata in una determinata riga, non occupa spazio.

Diagramma del modello di archiviazione di Bigtable

Alcuni aspetti da notare in questa illustrazione:

  • Le colonne possono non essere utilizzate in una riga.
  • Ogni cella in una determinata riga e colonna ha un timestamp univoco (t).

Architettura di Bigtable

Il seguente diagramma mostra una versione semplificata dell'architettura complessiva di Bigtable:

Architettura generale di
Bigtable.

Come illustrato nel diagramma, tutte le richieste del client passano attraverso un server frontend prima di essere inviate a un nodo Bigtable. (Nell'articolo originale di Bigtable, questi nodi sono chiamati "server tablet"). I nodi sono organizzati in un cluster Bigtable, che appartiene a un'istanza Bigtable, un container per il cluster.

Ogni nodo nel cluster gestisce un sottoinsieme delle richieste al cluster. Aggiungendo nodi a un cluster, puoi aumentare il numero di richieste simultanee che il cluster è in grado di gestire. L'aggiunta di nodi aumenta anche la velocità effettiva massima per il cluster. Se abiliti la replica aggiungendo altri cluster, puoi anche inviare diversi tipi di traffico a cluster diversi. Se un cluster non è più disponibile, è possibile eseguire il failover su un altro cluster.

Una tabella Bigtable è suddivisa in blocchi di righe contigue, denominati tablet, per bilanciare il carico di lavoro delle query. I tablet sono simili alle regioni HBase. I tablet sono archiviati su Colossus, il file system di Google, in formato SSTable. Una SSTable fornisce una mappa immutabile permanente e ordinata dalle chiavi ai valori, dove sia le chiavi che i valori sono stringhe di byte arbitrarie. Ogni tablet è associato a uno specifico nodo Bigtable. Oltre ai file SSTable, tutte le scritture vengono archiviate nel log condiviso di Colossus non appena vengono riconosciute da Bigtable, offrendo una maggiore durabilità.

È importante sottolineare che i dati non vengono mai archiviati nei nodi Bigtable. Ogni nodo ha puntatori a un set di tablet archiviati su Colossus. Ne consegue che:

  • Il riequilibrio dei tablet da un nodo all'altro avviene rapidamente, poiché i dati effettivi non vengono copiati. Bigtable aggiorna semplicemente i puntatori per ciascun nodo.
  • Il ripristino dall'errore di un nodo Bigtable è rapido perché è necessario eseguire solo la migrazione dei metadati al nodo sostitutivo.
  • In caso di errore di un nodo Bigtable, i dati non vanno persi.

Consulta la sezione Istanze, cluster e nodi per ulteriori informazioni su come utilizzare questi componenti di base fondamentali.

Bilanciamento del carico

Ogni zona Bigtable è gestita da un processo principale, che bilancia il carico di lavoro e il volume di dati all'interno dei cluster. Questo processo suddivide a metà i tablet più occupati/grandi e unisce insieme tablet più piccoli/meno accessibili, ridistribuendoli tra i nodi in base alle esigenze. Se un determinato tablet riceve un picco di traffico, Bigtable suddivide il tablet in due, quindi sposta uno dei nuovi tablet su un altro nodo. Bigtable gestisce la suddivisione, l'unione e il riequilibrio automaticamente, evitando di dover gestire manualmente i tablet. Comprendi le prestazioni fornisce ulteriori dettagli su questo processo.

Per ottenere le migliori prestazioni di scrittura da Bigtable, è importante distribuire le scritture nel modo più uniforme possibile tra i nodi. Un modo per raggiungere questo obiettivo è utilizzare chiavi di riga che non seguono un ordine prevedibile. Ad esempio, i nomi utente tendono a essere distribuiti in modo più o meno uniforme nell'alfabeto alfabeto, quindi includere un nome utente all'inizio della chiave di riga tenderà a distribuire le scritture in modo uniforme.

Allo stesso tempo, è utile raggruppare le righe correlate in modo che siano una accanto all'altra, il che rende molto più efficiente leggere più righe contemporaneamente. Ad esempio, se stai memorizzando diversi tipi di dati meteo nel tempo, la chiave di riga potrebbe essere la località in cui sono stati raccolti i dati, seguita da un timestamp (ad esempio, WashingtonDC#201803061617). Questo tipo di chiave di riga raggruppa tutti i dati di una località in un intervallo contiguo di righe. Per altre località, la riga inizia con un identificatore diverso. Con molte località che raccolgono dati con la stessa frequenza, le scritture vengono comunque distribuite in modo uniforme tra i tablet.

Consulta Scelta di una chiave di riga per ulteriori dettagli sulla scelta di una chiave di riga appropriata per i tuoi dati.

Tipi di dati supportati

Bigtable tratta tutti i dati come stringhe di byte non elaborati per la maggior parte degli scopi. L'unica volta che Bigtable prova a determinare il tipo è per le operazioni di incremento, in cui la destinazione deve essere un numero intero a 64 bit codificato come valore big-end a 8 byte.

Utilizzo memoria e disco

Le seguenti sezioni descrivono in che modo diversi componenti di Bigtable influiscono sull'utilizzo della memoria e del disco per l'istanza.

Colonne inutilizzate

Le colonne che non vengono utilizzate in una riga Bigtable non occupano spazio. Ogni riga è essenzialmente una raccolta di voci chiave/valore, in cui la chiave è una combinazione di famiglia di colonne, qualificatore di colonna e timestamp. Se una riga non include un valore per una colonna specifica, la voce chiave/valore semplicemente non è presente.

Qualificatori di colonna

I qualificatori di colonna occupano spazio in una riga, poiché ogni qualificatore di colonna utilizzato in una riga è archiviato in quella riga. Di conseguenza, spesso è efficace utilizzare i qualificatori di colonna come dati.

Compattazioni

Bigtable riscrive periodicamente le tabelle per rimuovere le voci eliminate e riorganizzare i dati in modo che le operazioni di lettura e scrittura siano più efficienti. Questo processo è noto come compatzione. Non sono presenti impostazioni di configurazione per la compattazione: Bigtable compatta i dati automaticamente.

Mutazioni ed eliminazioni

Le mutazioni, o modifiche, a una riga occupano spazio di archiviazione aggiuntivo, poiché Bigtable archivia le mutazioni in sequenza e le compatte solo periodicamente. Quando Bigtable compatta una tabella, rimuove i valori non più necessari. Se aggiorni il valore in una cella, sia il valore originale sia quello nuovo verranno archiviati su disco per un certo periodo di tempo fino alla compattazione dei dati.

Le eliminazioni occupano anche spazio di archiviazione aggiuntivo, almeno nel breve termine, perché le eliminazioni sono in realtà un tipo specializzato di mutazione. Finché la tabella non è compatta, un'eliminazione utilizza lo spazio di archiviazione aggiuntivo anziché liberare spazio.

Compressione dei dati

Bigtable comprime automaticamente i dati utilizzando un algoritmo intelligente. Non puoi configurare le impostazioni di compressione per la tabella. Tuttavia, è utile sapere come archiviare i dati in modo da poter essere compressi in modo efficiente:

  • I dati casuali non possono essere compressi con la stessa efficienza dei dati basati su pattern. I dati con pattern includono testo, ad esempio la pagina che stai leggendo adesso.
  • La compressione funziona meglio se valori identici sono vicini,nella stessa riga o in righe adiacenti. Se disponi le chiavi di riga in modo che le righe con blocchi di dati identici siano una accanto all'altra, i dati possono essere compressi in modo efficiente.
  • Bigtable comprime i valori di dimensione massima di 1 MiB. Se archivi valori superiori a 1 MiB, comprimili prima di scriverli in Bigtable per risparmiare cicli della CPU, memoria del server e larghezza di banda di rete.

Durabilità dei dati

Quando utilizzi Bigtable, i dati vengono archiviati su Colossus, il file system interno a elevata durabilità di Google, che utilizza dispositivi di archiviazione nei data center di Google. Non è necessario eseguire un cluster HDFS o qualsiasi altro file system per utilizzare Bigtable. Dietro le quinte, Google utilizza metodi di archiviazione proprietari per ottenere la durabilità dei dati oltre a quella fornita dalla replica tre vie HDFS standard.

La durabilità è ulteriormente migliorata quando si utilizza la replica. Bigtable conserva una copia separata dei tuoi dati nella località selezionata per ogni cluster di un'istanza replicata.

Modello di coerenza

Le istanze Bigtable a cluster singolo offrono elevata coerenza. Per impostazione predefinita, le istanze che hanno più di un cluster forniscono coerenza finale, ma per alcuni casi d'uso possono essere configurate per fornire coerenza di lettura/scrittura o un'elevata coerenza, a seconda del carico di lavoro e delle impostazioni del profilo dell'app.

Sicurezza

L'accesso alle tabelle Bigtable è controllato dal progetto Google Cloud e dai ruoli IAM (Identity and Access Management) che assegni agli utenti. Ad esempio, puoi assegnare ruoli IAM che impediscono ai singoli utenti di leggere da tabelle, scrivere su tabelle o creare nuove istanze. Se qualcuno non ha accesso al tuo progetto o non dispone di un ruolo IAM con le autorizzazioni appropriate per Bigtable, non può accedere a nessuna delle tue tabelle.

Puoi anche controllare l'accesso ai dati della tabella creando una vista autorizzata di una tabella che rappresenti un sottoinsieme di dati della tabella. Successivamente, puoi concedere ad alcuni utenti le autorizzazioni autorizzate a livello di vista senza concedere a questi utenti le autorizzazioni a livello di tabella.

Puoi gestire la sicurezza a livello di progetto, istanza, tabella o visualizzazione autorizzata. Bigtable non supporta limitazioni di sicurezza a livello di riga, colonna o cella.

Crittografia

Per impostazione predefinita, tutti i dati archiviati in Google Cloud, inclusi quelli nelle tabelle Bigtable, vengono criptati at-rest mediante gli stessi sistemi di gestione delle chiavi protetti che utilizziamo per i nostri dati criptati.

Se vuoi avere un maggiore controllo sulle chiavi utilizzate per criptare i dati at-rest di Bigtable, puoi utilizzare chiavi di crittografia gestite dal cliente (CMEK).

Backup

I backup di Bigtable consentono di salvare una copia dello schema e dei dati di una tabella e di ripristinarli in una nuova tabella in un secondo momento. Utilizzando i backup e le copie di backup, puoi ripristinare in una nuova tabella in qualsiasi regione o progetto in cui è presente un'istanza Bigtable, indipendentemente da dove si trova la tabella di origine.

Change Data Capture (CDC)

Bigtable offre Change Data Capture (CDC) sotto forma di flussi di modifiche. Le modifiche in tempo reale consentono di acquisire e trasmettere in streaming le modifiche ai dati di una tabella quando si verificano le modifiche. Puoi leggere un flusso di modifiche utilizzando un servizio come Dataflow per supportare casi d'uso, inclusi analisi dei dati, controlli, requisiti di archiviazione e attivazione della logica dell'applicazione downstream. Per ulteriori informazioni, consulta la panoramica dei flussi di modifiche.

Routing delle richieste con i profili di app

I criteri di routing del profilo app consentono di controllare quali cluster gestiscono le richieste in entrata dalle tue applicazioni. Le opzioni per i criteri di routing includono:

  • Routing a cluster singolo:invia tutte le richieste a un singolo cluster.
  • Routing multi-cluster a qualsiasi cluster: invia le richieste al cluster più vicino disponibile in un'istanza.
  • Routing di gruppi di cluster: invia le richieste al cluster più vicino disponibile all'interno di un gruppo selezionato di cluster in un'istanza.

Altre opzioni di archiviazione e database

Bigtable non è un database relazionale. Non supporta query SQL, join o transazioni su più righe.

  • Se hai bisogno del supporto SQL completo per un sistema di elaborazione delle transazioni online (OLTP), prendi in considerazione Spanner o Cloud SQL.
  • Se hai bisogno di eseguire query interattive in un sistema di elaborazione analitica online (OLAP), prendi in considerazione BigQuery.
  • Se devi archiviare oggetti altamente strutturati in un database di documenti con supporto per transazioni ACID e query di tipo SQL, prendi in considerazione Firestore.
  • Per l'archiviazione dei dati in memoria con bassa latenza, prendi in considerazione Memorystore.
  • Per sincronizzare i dati tra utenti in tempo reale, valuta il database in tempo reale di Firebase.

Per maggiori informazioni sulle altre opzioni di database, consulta la panoramica dei servizi di database. Google Cloud offre anche varie opzioni di archiviazione.

Passaggi successivi