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.
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ář.
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]
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"}
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 |