Architettura
BigTable non è un database relazionale. Non supporta unisce né supporta ricchi query SQL-like. Ogni tabella è una mappa sparse multidimensionale. Le Tavole consistono di righe e colonne, e ogni cella ha un time stamp. Non ci possono essere più versioni di una cella con diversi time stamp. Il timestamp permette operazioni come "selezionare 'n' versioni di questa pagina Web" o "eliminare le cellule più vecchie di una specifica data / ora."
Al fine di gestire tavole enormi, Bigtable divide le tavole tra i confini di riga e li salva in versione compressA. Una tavola è di circa 200 MB, e ogni macchina consente di risparmiare circa 100 compressioni. Questa configurazione permette di comprimere una singola tabella per essere diffusa tra molti server. Essa consente anche il bilanciamento del carico a "grana fine". Se una tabella sta ricevendo molte richieste, si possono aprire altre tavole o spostare la tavola occupata su un'altra macchina che non è così occupata. Inoltre, se una macchina va giù, una tavola può essere ripartita tra molti altri server in modo che l'impatto sulle prestazioni in una data macchina sia minimo.
Le tabelle sono memorizzate come SSTables immutabili e una coda di tronchi (un log per macchina). Quando una macchina esaurisce la memoria di sistema, si comprimono alcune compressioni utilizzando le Google tech di compressione proprietaria (BMDiff e Zippy). Le compressioni minori coinvolgono solo un paio di compressioni, mentre grandi compressioni coinvolgono l'intero sistema di tavole e recuperano spazio sul disco rigido.
Le posizioni delle compressioni Bigtable sono memorizzati in cellule. La ricerca di una tavola particolare è gestita da un sistema a tre livelli. I client ottengono un punto per una tabella META0, di cui solo uno di essi è verificato. La tabella META0 registra molte compressioni META1 che contengono le posizioni delle compressioni per essere guardato in su. Sia META0 e META1 fanno pesante uso di pre-fetching e caching per ridurre al minimo i colli di bottiglia del sistema.
Implementazione
BigTable è costruito su Google File System (GFS), che viene utilizzato come archiviazione secondaria per i file di registro e di dati. GFS fornisce l'archiviazione affidabile per SSTables, in un formato di file Google-proprietario, utilizzato per salvare i dati della tabella.
Un altro servizio che BigTable fa un uso pesante di è Chubby , un affidabile servizio di blocco, distribuito altamente disponibile. Chubby permette ai client di prendere una "serratura", possibilmente associandola con alcuni metadati, che si può rinnovare con l'invio di messaggi conservati come live e poi tornare a Chubby. Le serrature sono memorizzate in una struttura di nomi gerarchici del filesystem-like.
Ci sono tre principali tipi di server nel sistema Bigtable:
- server master: assegnano tablet ai server tablet, tengono traccia di dove si trovano e ridistribuiscono i compiti in base alle esigenze compresse.
- server Tablet: gestiscono le richieste di lettura / scrittura per compressioni e compressioni divise quando si superano i limiti di dimensione (di solito 100MB - 200MB). Se un server tablet non ci riesce, il sistema recupera una compressione da 100 server ogni pick-up 1 nuovo tablet.
- server di blocco: le istanze del Chubby sono distribuite in un servizio di blocco. Un sacco di azioni all'interno BigTable richiedono l'acquisizione di serrature, tra cui l'apertura di tavole per la scrittura, garantendo che non vi è più di un master attivo alla volta, e il controllo del controllo di accesso.
Esempio dal documento di ricerca di Google:

Una fetta di una tabella di esempio che memorizza le pagine Web. Il nome della riga è un URL invertita . La famiglia di contenuti colonna contiene il contenuto della pagina , e la famiglia di colonna di ancoraggio contiene il testo delle ancore che fanno riferimento alla pagina. Home page della CNN si fa riferimento sia dalla Sports Illustrated e le home page MY-look, in modo che il riga contiene le colonne nomeanchor:cnnsi.comeanchor:my.look.ca. Ogni cella di ancoraggio ha una versione ; la colonna contenuti ha tre versioni , a timestampt3,t5et6.
API
operazioni tipiche di BigTable sono la creazione e la cancellazione delle tabelle e delle famiglie delle colonne, la scrittura di dati e l'eliminazione di colonne da un file. BigTable offre queste funzioni per gli sviluppatori di applicazioni in una API. Le operazioni sono supportate a livello di riga, ma non tra diverse chiavi di file.
E qui potete trovare un video che mostra di Google Jeff Dean in una conferenza presso l'Università di Washington , ove si discute sul sistema di memorizzazione dei contenuti Bigtable utilizzato in backend di Google.

