Panoramica di Bigtable
Bigtable è una tabella con poche righe che può scalare fino a miliardi di righe e migliaia di colonne, consentendoti di archiviare terabyte o addirittura petabyte di dati. Viene indicizzato un singolo valore in ogni riga; questo valore è noto come chiave riga. Bigtable è ideale per archiviare grandi quantità di con bassa latenza. Supporta un'elevata velocità effettiva di lettura e scrittura a bassa latenza ed è un'origine dati ideale per le operazioni MapReduce.
Bigtable è esposto alle applicazioni tramite più client librerie Apache HBase, inclusa un'estensione supportata alla libreria Apache HBase per Java. Si integra quindi con l'ecosistema Apache esistente di 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 è scalabile in modo diretto in proporzione al numero di macchine nel tuo cluster. Un HBase autogestito ha un collo di bottiglia nella progettazione che limita le prestazioni dopo viene raggiunta una determinata soglia. Bigtable non dispone di questo collo di bottiglia, così puoi fare lo scale up del tuo cluster per gestire più letture scrive.
- Amministrazione semplice. Bigtable gestisce gli upgrade si riavvia in modo trasparente e mantiene automaticamente nel tempo. Per replicare i dati, aggiungi un secondo cluster all'istanza e la replica inizierà automaticamente. Non dovrai più gestire repliche o regioni. Progetta gli schemi delle tabelle e Bigtable si occuperà del resto.
- Ridimensionamento del cluster senza tempi di inattività. Puoi aumentare le dimensioni di un cluster Bigtable per alcune ore per gestire un carico elevato, quindi 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 per bilanciare il rendimento su tutti i nodi del cluster.
A cosa serve
Bigtable è ideale per applicazioni che richiedono velocità effettiva e scalabilità elevate per dati chiave-valore in cui ogni valore, di solito, non è più grande di 10 MB. Bigtable eccelle anche come motore di archiviazione per operazioni MapReduce batch, analisi/elaborazione di stream e applicazioni di machine learning.
Puoi utilizzare Bigtable per archiviare ed eseguire query su tutti i seguenti tipi di dati:
- Dati di serie temporali,ad esempio l'utilizzo di CPU e memoria nel tempo per più server web.
- Dati di marketing, come cronologia acquisti e preferenze dei clienti.
- Dati finanziari come cronologie delle transazioni, prezzi delle azioni e tassi di cambio delle valute.
- I dati di Internet of Things,ad esempio i report sull'utilizzo dei misuratori di energia e 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 generalmente descrive una singola entità, e colonne, che contengono singoli valori per ciascuna riga. Ogni riga è indicizzata da una singola chiave di riga e colonne che sono correlate tra loro sono generalmente raggruppate in una famiglia di colonne. Ciascuna è identificata da una combinazione della famiglia di colonne e di una colonna qualificatore, un nome univoco all'interno della famiglia di colonne.
Ogni intersezione di una riga e una colonna può contenere più celle. Ogni cella contiene una versione univoca con timestamp dei dati relativi alla riga e alla colonna in questione. L'archiviazione di più celle in una colonna fornisce un record del modo in cui i dati archiviati per la riga e la colonna sono cambiate nel tempo. Le tabelle Bigtable sono sparse; se una colonna non viene utilizzata in una determinata riga, non occupa spazio.
Ecco alcuni aspetti da notare in questa illustrazione:
- Le colonne possono essere inutilizzate 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:
Come illustrato nel diagramma, tutte le richieste del client passano attraverso un server frontend prima di essere inviati a un nodo Bigtable. (Nel Bigtable, questi nodi sono chiamati "server tablet". La 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 può gestire. L'aggiunta di nodi aumenta anche la velocità effettiva massima per il cluster. Se attivi la replica aggiungendo altri cluster, puoi anche inviare diversi tipi di traffico a cluster diversi. In questo modo, se un cluster non è disponibile, puoi eseguire il failover su un altro cluster.
Una tabella Bigtable viene partizionata orizzontalmente in blocchi di righe contigue, denominati tablet, per consentire il bilanciamento del carico di lavoro delle query. I tablet sono simili a regioni HBase). I tablet vengono archiviati su Colossus, il file system di Google, in formato SSTable. Una tabella SSTable fornisce una mappa permanente, ordinata e immutabile dalle chiavi in cui sia le chiavi che i valori sono stringhe di byte arbitrarie. Ogni tablet è associati a uno specifico nodo Bigtable. Oltre ai file SSTable, tutte le scritture vengono archiviate nel log condiviso di Colossus non appena vengono confermate da Bigtable, garantendo una maggiore durabilità.
È importante sottolineare che i dati non vengono mai archiviati nei nodi Bigtable stessi; ogni nodo contiene puntatori a un insieme di tablet archiviati su Colossus. Come risultato:
- Il ribilanciamento dei tablet da un nodo all'altro avviene rapidamente perché i dati effettivi non vengono copiati. Bigtable aggiorna per ciascun nodo.
- Il recupero da un errore di un nodo Bigtable è rapido, perché solo i metadati devono essere migrati al nodo sostitutivo.
- In caso di errore di un nodo Bigtable, non viene perso nessun dato.
Per ulteriori informazioni, consulta Istanze, cluster e nodi informazioni su come utilizzare questi componenti di base fondamentali.
Bilanciamento del carico
Ogni zona Bigtable è gestita da un processo principale che bilancia dei carichi di lavoro e dei dati all'interno dei cluster. Questa procedura suddivide i tablet più grandi o più utilizzati a metà e unisce i tablet meno utilizzati/più piccoli, ridistribuendoli tra i nodi in base alle esigenze. Se un determinato tablet riceve un picco di traffico, Bigtable lo suddivide in due e sposta uno dei nuovi tablet su un altro nodo. Bigtable gestisce la suddivisione, l'unione e il ribilanciamento automatico, evitando per l'amministrazione dei tablet. Informazioni sul rendimento offre ulteriori i dettagli di questa procedura.
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, includendo un nome utente all'inizio della chiave di riga tendono a distribuire le scritture in modo uniforme.
Allo stesso tempo, è utile raggruppare le righe correlate in modo che siano vicine a una.
un'altra, rendendo molto più efficiente la lettura di più righe alla stessa
nel tempo. Ad esempio, se memorizzi diversi tipi di dati meteo nel tempo,
la chiave di riga potrebbe essere la posizione in cui sono stati raccolti i dati, seguita da
timestamp (ad esempio WashingtonDC#201803061617
). Questo tipo di chiave di riga
raggruppare tutti i dati di una singola località in un intervallo contiguo di righe. Per
in altre posizioni, la riga inizierà con un identificatore diverso. con molti
da più località che raccolgono dati alla stessa velocità, le scritture sarebbero comunque distribuite in modo uniforme
su tablet.
Consulta Scelta di una chiave di riga per ulteriori dettagli sulla scelta di una chiave di riga appropriata chiave di riga per i dati.
Tipi di dati supportati
Bigtable tratta tutti i dati come stringhe di byte non elaborate per la maggior parte delle finalità. L'unica volta che Bigtable tenta di determinare il tipo è per le operazioni di incremento, in cui il target deve essere un numero intero a 64 bit codificato come valore big endian di 8 byte.
Utilizzo di memoria e disco
Le sezioni seguenti descrivono in che modo diversi componenti di Bigtable influiscono sull'utilizzo di memoria e disco per l'istanza.
Colonne non utilizzate
Le colonne che non vengono utilizzate in una riga Bigtable non occupano spazio spazio in quella riga. Ogni riga è essenzialmente una raccolta di voci chiave-valore, dove la chiave è una combinazione di famiglia di colonne, qualificatore di colonna e timestamp. Se una riga non include un valore per una colonna specifica, non è presente la coppia chiave-valore.
Qualificatori di colonna
I qualificatori di colonna occupano spazio in una riga, poiché ogni qualificatore di colonna utilizzato in una riga viene memorizzato in quella riga. Di conseguenza, è spesso efficiente utilizzare i qualificatori di colonna come dati.
Per ulteriori informazioni sui qualificatori di colonna, consulta Colonne.
Compazioni
Bigtable riscrive periodicamente le tabelle per rimuovere quelle eliminate e per riorganizzare i dati in modo che le letture e le scritture siano in modo efficace. Questo processo è noto come compattazione. Nessuna configurazione impostazioni per le compattazioni—Bigtable compatta i dati automaticamente.
Mutazioni ed eliminazioni
Le mutazioni, o modifiche, a una riga occupano spazio di archiviazione aggiuntivo, perché Bigtable archivia le mutazioni in sequenza e le comprime solo periodicamente. Quando Bigtable compatta una tabella, rimuove i valori che non sono più necessari. Se aggiorni il valore in una cella, sia il valore originale sia il nuovo valore verranno archiviati sul disco per un determinato periodo di tempo fino al completamento del compattamento dei dati.
Inoltre, le eliminazioni occupano spazio di archiviazione aggiuntivo, almeno a breve termine, perché in realtà sono un tipo specializzato di mutazione. Finché la tabella non viene compatta, un'eliminazione utilizza più spazio di archiviazione invece di 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 che possano essere compressi in modo efficiente:
- I dati casuali non possono essere compressi con la stessa efficienza dei dati con pattern. I dati con pattern includono il testo, ad esempio la pagina che stai leggendo in questo momento.
- La compressione funziona meglio se i valori identici sono vicini tra loro, 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 valori che raggiungono una dimensione massima di 1 MiB. Se memorizzi valori superiori a 1 MiB, comprimili prima di scriverli in Bigtable, in modo da risparmiare cicli della CPU, memoria del server e larghezza di banda della rete.
Durabilità dei dati
Quando utilizzi Bigtable, i tuoi dati vengono archiviati su Colossus, file system interno a elevata durabilità, che usa dispositivi di archiviazione nei dati di Google center. Per utilizzare Bigtable non è necessario eseguire un cluster HDFS o qualsiasi altro file system. Dietro le quinte, Google utilizza metodi di archiviazione di proprietà per garantire la durabilità dei dati oltre a quanto offerto dalla replica trilaterale HDFS standard.
La durabilità viene ulteriormente migliorata con l'utilizzo della replica. Bigtable conserva una copia separata dei tuoi dati nella località che selezioni per ciascun cluster di un'istanza replicata.
Modello di coerenza
Le istanze Bigtable a cluster singolo offrono un'elevata coerenza. Per impostazione predefinita, le istanze con più di un cluster forniscono coerenza finale, ma per alcuni casi d'uso possono essere configurate per fornire coerenza di lettura delle tue scritture o coerenza forte, a seconda del carico di lavoro e delle impostazioni del profilo dell'app.
Sicurezza
L'accesso alle tabelle Bigtable è controllato da Google Cloud e ai ruoli IAM (Identity and Access Management) che assegni utenti. Ad esempio, puoi assegnare ruoli IAM che impediscono per i singoli utenti, ad esempio leggendo dalle tabelle, scrivendo nelle tabelle o creando di Compute Engine. Se qualcuno non ha accesso al tuo progetto o non dispone di ruolo IAM con le autorizzazioni appropriate per Bigtable non possono accedere alle tue tabelle.
Puoi anche controllare l'accesso ai dati della tabella creando una vista autorizzata di una tabella che rappresenta un sottoinsieme dei dati della tabella. Quindi puoi concedere autorizzazioni a livello di vista autorizzate per alcuni utenti senza concedendo loro le autorizzazioni a livello di tabella.
Puoi gestire la sicurezza a livello di progetto, istanza, tabella ai livelli di visualizzazione autorizzati. Bigtable non supporta a livello di riga, colonna o cella.
Crittografia
Per impostazione predefinita, tutti i dati archiviati in Google Cloud, inclusi quelli presenti in Bigtable è crittografia at-rest tramite gli stessi sistemi di gestione delle chiavi rafforzati che usiamo per i nostri dati criptati.
Se vuoi un maggiore controllo sulle chiavi utilizzate per criptare i tuoi Dati inattivi di Bigtable, puoi utilizzare la crittografia gestita dal cliente (CMEK).
Backup
I backup di Bigtable consentono di salvare una copia lo schema e i dati della tabella per poi ripristinarli in una nuova tabella in un secondo momento. Utilizzando i backup e le copie di backup, puoi eseguire il ripristino in una nuova tabella in qualsiasi regione o progetto in cui hai un'istanza Bigtable, indipendentemente da dove si trova la tabella di origine.
Change Data Capture (CDC)
Bigtable fornisce il Change Data Capture (CDC) sotto forma di stream di modifiche. Le modifiche in tempo reale consentono di acquisire e trasferire le modifiche ai dati in una tabella man mano che le modifiche vengono apportate. Puoi leggere uno stream di modifiche utilizzando un servizio come Dataflow per supportare casi d'uso come analisi dei dati, controlli, requisiti di archiviazione e attivazione della logica dell'applicazione a valle. Per maggiori informazioni informazioni, consulta la Panoramica delle streaming.
Routing delle richieste con i profili delle app
I criteri di routing dei profili delle app ti consentono di controllare quali cluster per gestire le richieste in arrivo dalle tue applicazioni. Le opzioni per i criteri di routing includono:
- Routing a un cluster singolo: invia tutte le richieste a un singolo cluster.
- Routing a cluster multipli a qualsiasi cluster: invia le richieste al cluster più vicino disponibile in un'istanza, incluse le seguenti opzioni:
- Qualsiasi cluster: qualsiasi cluster nell'istanza può ricevere richieste.
- Routing dei gruppi di cluster: un gruppo specificato di cluster nell'istanza può ricevere richieste.
Altre opzioni di archiviazione e database
Bigtable non è un database relazionale tradizionale. Anche se supportare le query SQL, alcuni casi d'uso potrebbero per un'altra opzione di database.
- Se hai bisogno di eseguire query interattive in un sistema di elaborazione analitica online (OLAP), valuta la possibilità di utilizzare BigQuery.
- Se devi archiviare oggetti altamente strutturati in un database di documenti con supporto per le transazioni ACID e le query di tipo SQL, valuta la possibilità di utilizzare Firestore.
- Per l'archiviazione di dati in memoria con bassa latenza, prendi in considerazione Memorystore
- Per sincronizzare dati tra utenti in tempo reale, prendi in considerazione l'uso di Firebase Realtime Database.
Per ulteriori informazioni su altre opzioni di database, consulta la panoramica dei servizi di database. Google Cloud offre inoltre varie opzioni di archiviazione.
Passaggi successivi
- Prova la guida rapida di Bigtable utilizzando il
interfaccia a riga di comando
cbt
, lo strumento a riga di comando per Bigtable. - Segui un codelab su Bigtable.
- Scopri di più su istanze, cluster e servizi Bigtable nodi.
- Scopri come creare un'istanza Bigtable.
- Scopri di più sulle librerie client per Cloud Bigtable.
- Leggi l'articolo originale sull'OSDI su Bigtable.