CouchDB

Apache CouchDB
Apache CouchDB v2.1.1 Fauxton Console.png
VývojářApache Software Foundation
První vydání2005
Aktuální verze3.2.2 (26. dubna 2022)
Operační systémLinux
Microsoft Windows
macOS
Vyvíjeno vErlang
Typ softwaruDocument-oriented database
LicenceApache Licence 2.0
Webhttp://couchdb.apache.org/
Některá data mohou pocházet z datové položky.

Apache CouchDB, (dále pouze CouchDB) je open source dokumentově orientovaný databázový systém napsaný v programovacím jazyku Erlang a navržený pro místní replikaci a snadnou horizontální škálovatelnost napříč rozmanitými zařízeními. CouchDB je podporována komerčními subjekty CouchBase a Cloudant.

Historie

V dubnu 2005, Damien Katz (bývalý vývojář Lotus Notes v IBM; současně zakladatel a CTO CouchBase) zaslal na svůj blog zprávu o novém databázovém systému, na kterém v té době pracoval. Na detaily byl příspěvek o projektu v jeho rané fázi skoupý, nicméně z příspěvku bylo jisté, že se jedná o úložný systém pro objemné objektové databáze nazývaný CouchDB (Couch – pohovka – je akronymem pro cluster nespolehlivého spotřebitelského hardware).[1] Jeho cílem bylo vytvořit databázi určenou pro Internet a od základu ji navrhnout pro služby web aplikací. CouchDB byla původně napsána v C++, později byl však projekt přepsán pro Erlang OTP platformu vybranou pro její toleranci k chybám. Vývoj projektu po téměř dva roky sám sponzoroval a uvolnil jako open source projekt pod GNU GPL.

V únoru 2008 se projekt stal součástí Apache Incubator a byl přelicencován pod Apache Licence.[2] V listopadu 2008 se stal plnohodnotným Apache projektem podobně jako Apache HTTP Server, Apache Tomcat a Apache Ant.[3]

V současnosti je CouchDB spravována Apache Software Foundation s podporou ze strany IBM. Katz na projektu pracuje na plný úvazek jako vedoucí vývojář.

Návrh

CouchDB je v mnohém podobná jiným dokumentovým úložištím jako jsou MongoDB a Lotus Notes. Namísto ukládání dat v řádcích a sloupcích tak, jak to dělají relační databázové systémy, CouchDB spravuje kolekce JSON dokumentů. Dokumenty v rámci kolekce nesdílejí společné schéma, přičemž nabízejí dotazovací kapacity prostřednictvím pohledů. Pohledy jsou definovány agregačními funkcemi a souběžně s tím filtrovány obdobně jako v MapReduce přístupu.

Pohledy jsou většinou ukládány v databázi a jejich indexy plynule obnovovány, nicméně dotazy mohou vyústit i v pouze dočasné pohledy. CouchDB podporuje systém zprostředkovávající pohledy prostřednictvím externích socket serverů a na JSONu založeném protokolu.[4] Díky tomu takové servery mohly být a také byly vytvořeny v mnoha různých jazycích.

CouchDB nabízí RESTful HTTP API spolu s množstvím volně dostupných klientů. Dodatečně, plugin architektura dovoluje užití různých počítačových jazyků pro pohledové servery, za všechny například JavaScript (výchozí), Perl, Ruby, Python, PHP či Erlang. Podpora ostatních jazyků může být snadno doplněna. Návrh CouchDB a její filosofie naplno čerpá z Web architektury, z jeho konceptu, zdrojů a metod a zjednodušeně může být popsána následujícím:

CouchDB je užívána mnoha softwarovými projekty a webovými stránkami.[5] Například v distribuci Ubuntu od její verze 9.10 slouží k ukládání a synchronizaci adresářů, Tomboy poznámek či Firefox záložek se službou one.ubuntu.com.[6] Od verze 0.11 CouchDB podporuje CommonJS' Module specifikaci.[7]

Vlastnosti

Dokumentové úložiště
CouchDB ukládá dokumenty v jejich úplnosti. Celý dokument si můžete představit jako jeden či více pole/hodnota párů vyjádřených v JSON zápisu. Hodnoty pole mohou být jednoduchými entitami jako řetězec, číslo či datum. Můžete však také využít setříděné listy a asociativní mapy. Každý dokument v rámci CouchDB má svůj unikátní identifikátor a zároveň nevyžaduje žádné dokumentové schéma.
ACID transakce
Stejně jako mnoho relačních databázových systémů, nabízí CouchDB ACID transakce[8]. Těch je docíleno díky implementaci formy Multi-Version Concurrency Control (MVCC) ne nepodobné té z InnoDB a PostgreSQL. Tato vlastnost CouchDB zajišťuje bezkonfliktní provoz vzájemně konkurenčních čtecích a zapisovacích operací.
Map/Reduce pohledy a indexy
Pro zajištění jisté struktury datům uloženým v CouchDB si můžete vytvořit, podobně jako u databází relačních, pohledy. V CouchDB je každý pohled vytvořen JavaScript funkcí (serverové vykonání JavaScriptu za pomoci CommonJS a SpiderMonkey) která tvoří Map část MapReduce operace. Funkce transformuje dokument v jedinou hodnotu kterou poté navrací. Logika vaší JavaScript funkce může být libovolně složitá. Z důvodu nákladnosti takové operace nad rozsáhlou databází může CouchDB pohledy indexovat a tyto indexy obnovovat jak jsou dokumenty přidávány, mazány a obnovovány. Toto je velmi mocný indexovací mechanismus udělující bezprecedentní kontrolu nad systémem v porovnání s většinou ostatních databázových systémů.
Distribuovaná architektura podporující replikace
CouchDB byla navrhována s podporou obousměrné replikace (či synchronizace) a offline provozu. To umožňuje situace, kdy mnohonásobné repliky mohou mít své vlastní kopie těch samých dat, modifikovat je a později tyto změny synchronizovat. Největším problémem typicky spojeným s takovouto úrovní flexibility jsou vzájemné konflikty.
REST API
CouchDB jedná se všemi uloženými částmi (těch je více než jen dokumenty) jako se zdroji. Každá část má svou unikátní URI dostupnou přes HTTP. REST využívá HTTP metod POST, GET, PUT a DELETE pro čtyři základní CRUD (Create, Read, Update, Delete) operace nad všemi zdroji. HTTP je široce přijímanou, používanou, škálovatelnou a prověřenou technologií.

Příklady

CouchDB nabízí množinu RESTful HTTP metod (POST, GET, PUT, DELETE) za pomoci cURL nástroje příkazové řádky pro komunikaci s CouchDB serverem na výchozím portu 5984:

curl http://127.0.0.1:5984/

CouchDB server zpracuje HTTP požadavek a vrátí následující odpověď formátovanou jako JSON řetězec:

{"couchdb":"Welcome","version":"1.0.1"}

Pro vytvoření nové databáze 'couch' stačí vykonat následující příkaz:

curl -X PUT http://127.0.0.1:5984/couch

V případě, že databáze ještě neexistuje je vytvořena a dostanete následující odpověď:

{"ok":true}

nebo tuto odpověď v případě, že databáze již existuje:

{"error":"file_exists","reason":"The database could not be created, the file already exists."}

Tento příkaz slouží k získání informace o databázi:

curl -X GET http://127.0.0.1:5984/couch

Při úspěšném zpracování server vrátí odpověď:

{"db_name":"couch","doc_count":0,"doc_del_count":0,"update_seq":0,"purge_seq":0,"compact_running":false,"disk_size":79,
"instance_start_time":"1303035684557220","disk_format_version":5,"committed_update_seq":0} 

A databázi včetně veškerého jejího obsahu můžeme samozřejmě i smazat:

curl -X DELETE http://127.0.0.1:5984/couch

Proběhlo-li vše v pořádku, obdržíme kladnou odpověď:

{"ok":true}

či odpověď zápornou v případě, že databáze neexistuje:

{"error":"not_found","reason":"missing"}

Open source komponenty

CouchDB zahrnuje množství jiného open source softwaru jako součást své základní distribuce.

PopisLicence
SpiderMonkeySpiderMonkey je kódové označení pro úplně první JavaScript interpret napsaný Brendanem Eichem v Netscape Communications, později uvolněný jako open source a v současnosti spravovaný Mozilla Foundation.MPL/GPL/LGPL
jQueryjQuery je lehká, na prohlížeči nezávislá JavaScript knihovna zlepšující interakci mezi JavaScript a HTML.GPL a MIT
ICUInternational Components for Unicode (ICU) je open source projekt C/C++ a Java knihoven pro podporu Unicode, internationalizaci a globalizaci softwaru. ICU je snadno portovatelný na mnoho operačních systémů a prostředí.MIT Licence
OpenSSLOpenSSL je open source implementace SSL a TLS protokolů. Jaderná knihovna (napsaná v C) implementuje základní kryptografické funkce a nabízí množství užitečných funkcí.Apache
ErlangErlang je konkurenční programovací jazyk s všeobecným použitím a runtime prostředí. Erlang je funkcionální jazyk s dynamickým typováním.Modifikovaná MPL

Příklady NoSQL databází

Související články

Reference

  1. LENNON, Joe. Exploring CouchDB [online]. IBM, 2009-03-31 [cit. 2009-03-31]. Dostupné online. (anglicky) 
  2. Apache mailing list announcement mail-archives.apache.org
  3. Re: Proposed Resolution: Establish CouchDB TLP mail-archives.apache.org
  4. View Server Documentation Archivováno 20. 10. 2008 na Wayback Machine wiki.apache.org
  5. CouchDB in the wild Archivováno 20. 7. 2017 na Wayback Machine Výčet projektů užívajících CouchDB
  6. Email from Elliot Murphy (Canonical) Archivováno 5. 5. 2011 na Wayback Machine CouchDB-Devel
  7. Archivovaná kopie. wiki.apache.org [online]. [cit. 2011-06-09]. Dostupné v archivu pořízeném dne 2011-06-12. 
  8. [1] Archivováno 20. 10. 2011 na Wayback Machine, sekce ACID Properties.

Bibliografie

  • ANDERSON, J. Chris; SLATER, Noah; LEHNARDT, Jan. CouchDB: The Definitive Guide. 1st. vyd. [s.l.]: O'Reilly Media, November 15, 2009. Dostupné online. ISBN 0596158165. S. 300. (anglicky) 
  • LENNON, Joe. Beginning CouchDB. 1st. vyd. [s.l.]: Apress, December 15, 2009. Dostupné v archivu pořízeném dne 05-12-2010. ISBN 1430272376. S. 300. (anglicky) 
  • HOLT, Bradley. Writing and Querying MapReduce Views in CouchDB. 1st. vyd. [s.l.]: O'Reilly Media, March 7, 2011. Dostupné online. ISBN 1449303129. S. 76. (anglicky) 

Externí odkazy

Video odkazy

Média použitá na této stránce

Apache CouchDB v2.1.1 Fauxton Console.png
Autor: Wohali, Licence: CC BY-SA 4.0
Screenshot of the Apache CouchDB web interface, known as Fauxton, as of version 2.1.1.