Storage NewSQL
Datastore che cerca di mantenere le proprietà ACID aggiungendo scalabilità orizzontale agli RDBMS .
Lo scaling può essere ottenuto con uno schema Multi-master
Google Spanner
Utilizza Paxos per la replicazione, in modo da garantire che una sequenza di comandi siano eseguiti nello
stesso ordine in tutte i nodi di replica.
Offre:
- Transazioni ACID
- Linguaggio SQL
- Tabelle semi-relazionali: le tabelle sono raggruppate in modo gerarchico, in modo da permettere
il salvataggio in directory che possono essere facilmente gestite
Riesce a fornire CAP grazie ad hardware specializzato, che possiede solo Google.
Proprietà:
- lock-freedom per transazioni read-only distribuite
lock-freedom: nessun bisogno di prendere il lock sui dati in lettura
- External consistency per transazioni distribuite”
External consistency: consistenza più stringente della linearizzabilità. Il
comporamento del sistema è come se tutte le transazioni siano eseguite in
ordine sequenziale
Tutto questo avviene grazie ad una nuova API chiamata True Time:
o Clock distribuito, reso affidabile grazie a dei server speciali che restituiscono un clock
atomico
o Il problema è che richiede risorse hardware inpossibili da utilizzare per la maggior parte
delle aziende
Per mantenere il controllo sulla concorrenza, Spanner utilizza un meccanismo chiamato Multi-Version
Concurrency Control (MVCC), ovvero mantiene versioni multiple e immutabili dei dati:
o Ogni write crea una nuova versione immutabile dei dati, il cui timestamp è quello della
write transaction. In questo modo, readers concorrenti possono ancora vedere la
vecchia versione mentre la transazione di scrittura viene completata
o Una read fatta ad un certo timestamp, ritorna il valore della versione del dato più
recente rispetto a quel timestamp
VoltDB
Database in memory, partizionato, single thread, distribuito e ACID-compliant:
- In memory: i dati sono mantenuti in RAM invece che sul disco
- Partizionato e distribuito: le tabelle del DB sono partizionate su diversi server per avere migliore
concorrenza e altro throughput
- Single-threaded: processamento serializzato dei dati nella stessa partizione, per evitare
overhead dovuto al lock
Altre features:
- Basato sul paradigma dello shared nothing
- Scaling orizzontale
Le tabelle del DB sono automaticamente partizionati su server multipli, e i client possono chiamare
qualsiasi server specificando la partition column.
Se la tabella è partizionata, ogni volta in cui inserisco una riga in questa tabella, VoltDB in base al valore
della partitioning column stabilisce a quale partizione dovrà andare quella riga.
La gestione della concorrenza si basa su due concetti:
- Tutta la RAM disponibile è sufficiente per salvare il db
- Tutte le transazioni sono brevi e possono essere eseguite sui dati in memoria
Le transazioni che coinvolgono una singola partizione sono eseguite in modo sequenziale in un ambiente
single thread e lock-free. Le transazioni che vengono eseguite su partizioni multiple sono inviate ad uno
speciale global controller, che decide l’ordine di esecuzione
TIME SERIES DATABASE
Modelli di database ottimizzati per gestire grandi volumi di dati relativi a serie temporali.
Le serie temporali possono essere organizzate in modo gerarchico
Fornisce computazioni di basi sulle serie (somme, moltiplicazioni e merge con un’altra serie) e funzioni
statistiche come media, deviazione standard ecc.
InfluxDB
Fornisce delle query SQL per interagire con database di serie temporali
Inoltre fornisce delle API per interagire col db.
Le serie temporali sono organizzate come “punti”, ognuno dei quali è composto da:
- Timestamp
- Misurazione: simile ad una tabella SQL con indice primario sul timestamp. Rispetto al DBMS, non
c’è bisogno di definire lo schema a priori e non accetta valori a null
- Almeno una coppia (chiave,valore) che rappresenta il valore misurato in quel timestamp
- Può contenere coppie (chiave,valore) per gestire i metadati
La limitazione è data dalla scalabilità orizzontale.
Viene integrato con Telegraph, Chronograf e Kapacitor per realizzare un MAPE control loop.