BigTable

Da Wikipedia, l'enciclopedia libera.

Panoramica[modifica | modifica wikitesto]

BigTable è un sistema proprietario di base di dati compresso ad alte prestazioni, sviluppato da Google a partire dal 2004 e costruito su Google File System (GFS), su Chubby Lock Service, su SSTable e su alcune altre tecnologie di Google.

È progettato per poter supportare carichi a livello del petabyte attraverso centinaia o migliaia di macchine e di rendere facile l'aggiunta di nuove macchine al sistema, utilizzando le nuove risorse senza che sia necessaria alcuna riconfigurazione[1].

Sebbene cominci dalla tipica convenzione di un numero fisso di colonne, condivide le caratteristiche sia di database orientati alla riga che di quelli orientati alla colonna.

Attualmente il prodotto viene utilizzato internamente da Google e non viene distribuito: viene usato da diverse applicazioni di Google come: MapReduce, Google Reader, Google Maps, Google Libri, Google Earth, Blogger.com, Google Code hosting, Orkut, YouTube, Gmail e ne viene offerto l'accesso come parte del Google App Engine.

Le ragioni che hanno spinto Google a sviluppare il proprio database sono la scalabilità e un miglior controllo sulle caratteristiche prestazionali.

Descrizione[modifica | modifica wikitesto]

BigTable Data Model[modifica | modifica wikitesto]

Bigtable è una sparsa, distribuita e persistente mappa ordinata multi-dimensionale.

Il modello dei dati utilizza tre diversi tipi di indicizzazione:

  • Chiavi di riga

Le chiavi di riga sono stringhe arbitrarie ed ogni lettura/scrittura di dati su una riga è una operazione atomica. Non viene quindi permesso l’accesso contemporaneo alla stessa chiave di riga. Ogni riga può essere partizionata dinamicamente in tablet in modo da poter distribuire il carico e bilanciarlo.

  • Chiavi di colonna

Le chiavi di colonna sono raggruppate in set detti famiglie di colonne dove ogni famiglia contiene lo stesso tipo di dato. I dati nelle chiavi di colonna di una famiglia sono salvati all'interno du una famiglia di colonne e identificati tramite chiavi di colonna chiamate Family Qualifier.

  • Timestamp

Ogni cella di una tabella in BigTable può contenere più versioni dello stesso dato, e per indicizzare queste versioni utilizzo il Time Stamp che mi identifica univocamente la versione del dato. Generalmente la versione più recente è quella che viene letta per prima e l’applicativo decide quante versioni mantenere per ogni cella.

BigTable Partition Model[modifica | modifica wikitesto]

Il sistema BigTable è composto da tre componenti.

Tablet[modifica | modifica wikitesto]

Ogni Tablet è identificato da un Tablet Identifier e dal range di chiavi di riga di cui è responsabile. Le dimensioni di un Tablet variano dai 100MB ai 200MB. A sua volta ogni Tablet è costituito da più SSTable[2] (BigTable File Format) che sono utilizzate per salvare e recuperare le coppie chiave-dato.

Una funzione fondamentale è che le SSTable possono essere condivise su più Tablet.

Tablet Server[modifica | modifica wikitesto]

Ogni Tablet è assegnato a un solo Tablet Server che può contenerne da 10 a 1000. I Tablet Server possono splittare i Tablet che diventano troppo grandi. Ogni Tablet Server è responsabile delle proprie Tablet locali.

Master Server[modifica | modifica wikitesto]

Il master server ha tre compiti fondamentali:

  • assegnare i vari tablet ai Tablet Server
  • gestire l’aggiunta o l’eliminazione dei Tablet Server
  • bilanciare il carico tra i vari server

Il Master Server tiene in memoria un elenco di Tablet attualmente attive e anche una lista degli assegnamenti di tutti i tablets ai rispettivi Tablets Servers.

Operazioni di lettura e scrittura[modifica | modifica wikitesto]

La replicazione dei dati è gestita dal Google File System. Ogni Tablet ha una propria Memtable[3] e la comunicazione dei client con i singoli Tablet Server per operazioni di lettura/scrittura avviene in maniera diretta.

Operazioni di scrittura[modifica | modifica wikitesto]

La richiesta di scrittura arriva direttamente al tablet server che:

  • segna sul LOG la richiesta
  • dopo il commit successivo ad un operazione di scrittura, il contenuto viene inserito nella Memtable che si trova in memoria RAM
  • ogni volta che viene effettuata una scrittura, la Memtable aumenta di misura fino a quando non raggiunge il limite massimo; raggiunto il limite la Memtable viene "congelata" e diventa una SSTable.

Successivamente viene generata una nuova Memtable.

Operazioni di lettura[modifica | modifica wikitesto]

La richiesta di lettura viene inviata al Tablet Server, e questa avviene tramite una consultazione contemporanea della SSTable che appartiene al tablet e l'attuale Memtable.

Note[modifica | modifica wikitesto]

  1. ^ *"Database War Stories #7: Google File System and BigTable"
  2. ^ "ApacheWiki, SSTable
  3. ^ "ApacheWiki, Memtable"

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]