Zgłębiając temat baz danych nie sposób nie trafić na teorię CAP. Czym ona jest? Wbrew pozorom nie jest ona żadną tajemną wiedzą, dostępną tylko dla wybrańców. Jest ona niczym innym, jak przełożeniem na grunt baz danych potocznego stwierdzenia, że nie ma nic za darmo.

Autorem teorii jest Eric Brewer. Przypisał on bazom danych trzy własności:

  • Consistency - spójność, mówiąca o tym, że każdy działający węzeł odpowie tymi samymi danymi;
  • Availability - dostępność, określająca możliwość przyjmowania oraz zapisu danych nawet w przypadku awarii dowolnego węzła;
  • Partition Tolerance - odporność na podział, pozwalająca na rozproszenie niewrażliwe na awarię.

Baza danych może spełniać co najwyżej dwie spośród nich. Co ciekawe, nie jest wykluczona zmiana właściwości w trakcie działania bazy danych, aczkolwiek w praktyce nie jest to raczej zbyt często spotykane.

Podsumowując, teoria jest udokumentowaniem tego, że nie ma idealnej bazy danych do wszystkich zastosowań i każda z nich jest pewnym kompromisem, kładącym nacisk na pewne własności, kosztem innych.

CAP

Dla przykładu, tradycyjne relacyjne bazy danych (MySQL, PostgreSQL itp.) lokują się na boku CA trójkąta - kładą nacisk na spójność i dostępność danych ale skalują się przede wszystkim pionowo. Pozostałe boki obstawione są przede wszystkim przez bazy NoSQL. Apache Cassandra jest przykładem bazy AP, która nastawiona jest na skalowanie poziome z równoczesną odpornością na awarie i wysoką dostępnością, przy czym nie mamy gwarancji, że odczytujemy najbardziej aktualne dane. Alternatywą może być MongoDB, którą można zaklasyfikować jako CP, czyli pozwala na rozproszenie z zachowaniem integralności danych, lecz w przypadku awarii węzła, należy liczyć się z brakiem dostępu do części danych.