CouchDB

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

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, [url= Server][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). +more 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. V listopadu 2008 se stal plnohodnotným Apache projektem podobně jako [[Apache[/url]], Apache Tomcat a Apache Ant.

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 [url= API][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ů. +more 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. +more Díky tomu takové servery mohly být a také byly vytvořeny v mnoha různých jazycích.

CouchDB nabízí [[Representational State Transfer|RESTful[/url]] 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. +more 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. Například v distribuci Ubuntu od její verze 9. +more10 slouží k ukládání a synchronizaci adresářů, Tomboy poznámek či Firefox záložek se službou one. ubuntu. com. Od verze 0. 11 CouchDB podporuje CommonJS' Module specifikaci.

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. +more 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. 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

CouchDB server zpracuje HTTP požadavek a vrátí následující odpověď formátovanou jako JSON řetězec: {"couchdb":"Welcome","version":"1. +more1"} Pro vytvoření nové databáze 'couch' stačí vykonat následující příkaz: curl -X PUT.

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

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

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.

width = "100%"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. +moreMPL/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í

MongoDB * FoundationDB * ArangoDB

Reference

Bibliografie

Externí odkazy

[url= API Reference[/url]url=http://couchdb. apache. +moreorg/]oficiální stránky projektu[/url] * [url=https://web. archive. org/web/20090831050402/http://books. couchdb. org/relax/]CouchDB: The Definitive Guide[/url] * [url=https://web. archive. org/web/20130602041727/http://www. nosqldatabases. com/main/tag/couchdb]CouchDB articles on NoSQLDatabases. com[/url] * [url=http://manning. com/free/green_chandler. html]CouchDB green paper[/url] * [url=http://nosql. mypopescu. com/tagged/couchdb]CouchDB news and articles on myNoSQL[/url] * [url=http://nosql. mypopescu. com/post/683838234/scaling-couchdb]Scaling CouchDB[/url] * [url=https://web. archive. org/web/20160303172725/http://wiki. apache. org/couchdb/Complete_HTTP_API_Reference]Complete[/url].

Video odkazy

[url=http://video. google. +morecom/videoplay. docid=-3714560380544574985&hl=en]Erlang eXchange 2008: Couch DB at 10,000 feet Jan Lehnardt[/url] Erlang eXchange 2008 * [url=https://web. archive. org/web/20110619041527/http://www. erlang-factory. com/conference/London2009/speakers/janlehnardt]Jan Lehnardt is Giving the Following Talks, CouchDB for Erlang Developers[/url] * [url=https://web. archive. org/web/20110427212129/http://www. infoq. com/presentations/katz-couchdb-and-me]CouchDB and Me[/url] 31. ledna 2009, Damien Katz.

Kategorie:Systémový software Kategorie:Systémy řízení báze dat

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top