CouchDB je open-sourcový dokumentově orientovaný databázový systém, který je napsaný v programovacím jazyce Erlang a navržený pro snadnou horizontální škálovatelnost a místní replikaci napříč různými zařízeními. CouchDB podporují komerční subjekty CouchBase a Cloudant.

Princip CouchDB

CouchDB je v některých ohledech relativně podobná jiným dokumentovým úložištím jako jsou například MongoDB nebo Lotus Notes. Místo toho, aby ukládala data v řádcích a sloupcích po vzoru relačních databázových systémů, spravuje CouchDB kolekce JSON dokumentů. Dokumenty patřící do kolekce nesdílejí společné schéma. Dotazovací kapacity jsou nabízeny prostřednictvím pohledů. Pohledy definují agregační funkce a zároveň jsou filtrovány srovnatelně jako například u MapReduce.

Pohledy bývají typicky ukládány v databázi a jejich indexy bývají plynule obnovovány. Některé dotazy ale mohou vyústit v dočasné pohledy. CouchDB podporuje systém, který zprostředkovává pohledy skrze externí socket servery a za využití protokolů postavených na JSONu. To umožňuje, aby takové servery mohly být vytvářeny v mnoha rozmanitých jazycích.

CouchDB je navázáno na RESTful http API, ke kterému je mnoho volně dostupných klientů. Navíc za pomoci plugin architektury je možné dosáhnout použití různých jazyků pro pohledové servery. Jako příklad může posloužit výchozí JavaScript, Perl, Ruby, Python, PHP nebo Erlang. Podpora pro další jazyky může být jednoduše doplněna. Návrh CouchDB a její filosofie vychází plně z Web architektury a to v oblasti konceptu, zdrojů i metod.

CouchDB využívá mnoho softwarových projektů a webových stránek. Jako příklad může posloužit distribuce Ubuntu, kde slouží k ukládání nebo synchronizaci adresářů, Tomboy, kde se používá pro poznámky nebo Firefox záložky s použitím služby one.ubuntu.com.

Vlastnosti CouchDB

  • Dokumentové úložiště. CouchDB ukládá celé kompletní dokumenty.
  • ACID Transakce. Podobně jako mnohé relační databázové systémy, nabízí CouchDB ACID transakce.
  • Distribuovaná architektura s podporou replikace. CouchDB je navržena tak, že podporuje obousměrnou replikaci nebo synchronizaci. To vede k tomu, že mohou existovat mnohonásobné repliky, které mají vlastní kopie stejných dat, které následně modifikují a teprve později synchronizují. Rizikem může v takovém případě být vznik konfliktů.

Výhody použití CouchDB

  • Dokumentový model. Dokumentový model se hodí pro mnoho aplikací v reálném životě. Je jednoduché serializovat objekty do JSON souborů, ukládat je a následně je deserializovat, když je opět potřebujeme. Je možné indexovat a vyhledávat v obsahu souborů.
  • Jednoduché REST API.
  • Relativně jednoduché uložení více uzlů. To je možné využít k replikaci stejných dat i k optimalizaci při velkých datových sadách.

Nevýhody použití CouchDB

  • Data jsou uložená v souboru JSON. To znamená, že jsou soubory relativně objemné. Zároveň popisná struktura názvů může ještě navyšovat velikost souboru.
  • Fulltextové vyhledávání. CouchDB nemá žádné vestavěné fulltextové vyhledávání. Existují ale možnosti za využití couchdb-lucene nebo elasticsearch.
  • Nepodporuje transakce. Obvyklé operace jako vyžadování unikátního uživatelského jména nebo zvyšování hodnoty a její znovu-ukládání mohou být nebezpečné.
  • Relační data. Pokud máme data, která dávají smysl v relační databázi a uložíme je do CouchDB, pravděpodobně narazíme na mnoho problémů.
  • Datové sklady. Dočasné pohledy nad velkými datovými sadami jsou velmi pomalé.
  • Často aktualizovaná data. CouchDB není navržena pro práci s často aktualizovanými daty.