Teorema PACELC
# Teorema PACELC

Nell'informatica teorica, il teorema PACELC è un'estensione del teorema CAP. Asserisce che nel caso di tolleranza di partizione (P) in un sistema informatico distribuito si deve scegliere tra disponibilità (A) e consistenza (C) (come per il teorema CAP), ma altrimenti (E), anche quando il sistema è in esecuzione normalmente in assenza di partizioni, si deve scegliere tra latenza (L) e consistenza (C).

## Descrizione

PACELC si basa sul teorema CAP. Entrambi i teoremi descrivono come i database distribuiti abbiano delle limitazioni e presentano i compromessi relativi a consistenza, disponibilità e tolleranza al partizionamento dei dati. PACELC tuttavia va oltre e asserisce che esiste anche un compromesso, questa volta tra latenza e consistenza, anche in assenza di partizioni, fornendo così una rappresentazione più completa del potenziale compromesso per sistemi distribuiti.

Un requisito di alta disponibilità implica che il sistema debba replicare dei dati. Non appena un sistema distribuito replica dei dati, nasce un compromesso tra consistenza e latenza.

Il teorema PACELC è stato inizialmente descritto nel 2010 da Daniel J. Abadi nell'università di Yale in un post di un blog, che successivamente formalizzò in uno scritto nel 2012. Lo scopo di PACELC è di indirizzare la sua tesi che "ignorando il conflitto consistenza/latenza di sistemi replicati è uno dei principali errori in CAP, visto che questo è presente in tutte le operazioni di sistema, mentre CAP è soltanto rilevante nei rari casi di tolleranza di partizione."

## Classifica dei database rispetto a PACELC

La classifica dei database rispetto a PACELC è ripreso da

* Le versioni predefinite di Dynamo, Cassandra e Riak sono sistemi PA/EL: se occorre una partizione, essi rinunciano alla consistenza per la disponibilità e sotto operazioni normali essi rinunciano alla consistenza per bassa latenza.
* Sistemi rispettanti completamente ACID come VoltDB/H-Store e Megastore sono PC/EC: rifiutano di rinunciare alla consistenza e, per raggiungerla, pagano in disponibilità e costi di latenza. Anche BigTable e sistemi congiunti come HBase sono PC/EC.
* MongoDB può essere classificato come un sistema PC/EC: nel caso base il sistema garantisce la consistenza di letture e scritture.
* PNUTS è un sistema PC/EL.

| DDBS | P+A | P+C | E+L | E+C |
| - | - | - | - | - |
| Dynamo | sì | | sì | |
| Cassandra | sì | | sì | |
| Riak | sì | | sì | |
| VoltDB/H-Store | | sì | | sì |
| Megastore | | sì | | sì |
| MongoDB | | sì | | sì |
| PNUTS | | sì | sì | |
