CouchDB

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Apache CouchDB
Vývojář Apache Software Foundation
Aktuální verze 1.1.0 (6.6.2011)
Operační systém Cross-platform
Vyvíjeno v Erlang
Typ softwaru Document-oriented database
Licence Apache Licence 2.0
Web http://couchdb.apache.org/

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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í), 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[editovat | editovat zdroj]

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 Oracle. 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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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

Popis Licence
SpiderMonkey SpiderMonkey 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
jQuery jQuery je lehká, na prohlížeči nezávislá JavaScript knihovna zlepšující interakci mezi JavaScript a HTML. GPL a MIT
ICU International 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
OpenSSL OpenSSL 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
Erlang Erlang 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

Související články[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

  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 wiki.apache.org
  5. CouchDB in the wild Výčet projektů užívajících CouchDB
  6. Email from Elliot Murphy (Canonical) CouchDB-Devel
  7. http://wiki.apache.org/couchdb/CommonJS_Modules
  8. [1], sekce ACID Properties.

Bibliografie[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]

Video odkazy[editovat | editovat zdroj]