CouchDB
Vývojář | Apache Software Foundation |
---|---|
První vydání | 2005 |
Aktuální verze | 3.4.2 (20. října 2024) |
Operační systém | Linux Microsoft Windows macOS |
Vyvíjeno v | Erlang |
Typ softwaru | Document-oriented database |
Licence | Apache Licence 2.0 |
Web | http://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.
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 |
Příklady NoSQL databází
Související články
Reference
- ↑ LENNON, Joe. Exploring CouchDB [online]. IBM, 2009-03-31 [cit. 2009-03-31]. Dostupné online.
- ↑ Apache mailing list announcement mail-archives.apache.org
- ↑ Re: Proposed Resolution: Establish CouchDB TLP mail-archives.apache.org
- ↑ View Server Documentation Archivováno 20. 10. 2008 na Wayback Machine. wiki.apache.org
- ↑ CouchDB in the wild Archivováno 20. 7. 2017 na Wayback Machine. Výčet projektů užívajících CouchDB
- ↑ Email from Elliot Murphy (Canonical) Archivováno 5. 5. 2011 na Wayback Machine. CouchDB-Devel
- ↑ Archivovaná kopie. wiki.apache.org [online]. [cit. 2011-06-09]. Dostupné v archivu pořízeném dne 2011-06-12.
- ↑ [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.
- 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.
- 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.
Externí odkazy
- Obrázky, zvuky či videa k tématu CouchDB na Wikimedia Commons
- oficiální stránky projektu
- CouchDB: The Definitive Guide
- CouchDB articles on NoSQLDatabases.com
- CouchDB green paper
- CouchDB news and articles on myNoSQL
- Scaling CouchDB
- Complete HTTP API Reference
Video odkazy
- Erlang eXchange 2008: Couch DB at 10,000 feet Jan Lehnardt Archivováno 9. 11. 2012 na Wayback Machine. Erlang eXchange 2008
- Jan Lehnardt is Giving the Following Talks, CouchDB for Erlang Developers
- CouchDB and Me 31. ledna 2009, Damien Katz