MongoDB a CouchDB jsou typy dokumentových databází NoSQL. Databáze dokumentů se také nazývá mdocument store a obvykle se používají k ukládání formátu dokumentu polostrukturovaných dat a jejich podrobného popisu. Umožňuje vytváření a aktualizaci programů bez nutnosti odkazovat na hlavní schéma. Správa obsahu a manipulace s daty v mobilní aplikaci jsou dvě z oblastí, kde lze úložiště dokumentů použít.
Přehled MongoDB
MongoDB byl start 10gen, který vznikl v roce 2007. Pochází z rodiny Document Stores a je jednou z typických NoSQL databází bez schémat s poměrně vysokým výkonem, škálovatelností a bohatou ve funkcích zpracování dat. Tato open-source databáze je napsána v C++ a využívá dynamická schémata. Architektura MongoDB obsahuje dokumenty seskupené do kolekcí na základě jejich struktury. Tato databáze využívá BSON. BSON je binární reprezentace JSON a podporuje ukládání dokumentů a výměnu dat. V MongoDB mohou být obchodní subjekty uloženy v minimálním počtu dokumentů, které mohou být primárně nebo sekundárně indexovány, aniž by byly rozděleny na více relačních.
Spolu s výše uvedenými schopnostmi MongoDB poskytuje také velkou kolekci sad replik, kde každá sada může obsahovat více než jednu kopii dat. V sadách replik jsou všechny primární funkce (čtení a zápis) prováděny na primární sadě, zatímco sekundární sady se používají v případě selhání první sady. MongoDB obsahuje sharding, který využívá proces škálování horizontálně. Vlastnost vyvažování zátěže této databáze úložiště dokumentů je odůvodněna skutečností, že běží na více serverech, čímž poskytuje duplikaci dat a vyrovnává zátěž. Na oplátku také poskytuje zálohu při selhání hardwaru. Využívá také mřížkový souborový systém, který rozděluje konkrétní soubor na různé části a ukládá je samostatně.
Společné rysy MongoDB:
- Návrh datového modelu snižuje potřebu spojení a poskytuje snadný vývoj schématu.
- Vysoký výkon, protože neobsahuje spojení ani transakce, které poskytují rychlý přístup, a tím se zvyšuje výkon.
- Vysoká dostupnost díky začlenění sad replik, které jsou schopny poskytovat zálohu při selhání a jsou také vysoce robustní.
- Snadná škálovatelnost.
- Vlastnost sharding MongoDB umožňuje provádět rychle a efektivně distribuované funkce. To je také možné, protože podporuje horizontální škálování dat.
- Jazyk je v dotazu velmi bohatý. MongoDB má svůj vlastní dotazovací jazyk s názvem Mongo dotazovací jazyk, který může nahradit SQL. Obslužné funkce a mapování nebo redukování mohou podobně nahradit složité agregační funkce.
Přehled CouchDB
CouchDB, produkt Apache Software Foundation a inspirovaný Lotus Notes, je také open source databáze NoSQL založená na dokumentech, která se zaměřuje hlavně na snadné použití. Je to databáze s jedním uzlem, která funguje stejně jako jiné databáze. Obecně začíná instancí jednoho uzlu, ale lze jej bez problémů upgradovat na cluster. Umožňuje uživateli provozovat jedinou databázi na mnoha serverech nebo virtuálních počítačích. Cluster CouchDB poskytuje vysokou kapacitu a dostupnost ve srovnání s jedním uzlem CouchDB. Používá Erlang, univerzální jazyk. Stejně jako MongoDB také používá javascript a map/reduce. Data ukládá spíše ve formě sbírky dokumentů než jako tabulky. Aktualizovaná CouchDB je bez zámků, což znamená, že není potřeba zamykat databázi během zápisu. Dokumenty v této databázi také využívají protokol HTTP a JSON spolu s možností připojovat k nim soubory, které nejsou JSON. CouchDB je tedy kompatibilní s jakoukoli aplikací nebo softwarem, který podporuje formát JSON.
Společné funkce CouchDB
- Server CouchDB hostí pojmenované databáze, které ukládají dokumenty s jedinečným názvem v databázi, a CouchDB poskytuje RESTful HTTP API pro čtení a aktualizaci (přidávání, úpravy, mazání) databázových dokumentů
- CouchDB poskytuje grafické uživatelské rozhraní založené na prohlížeči, které zpracovává data, oprávnění a konfiguraci.
- CouchDB poskytuje nejjednodušší formu replikace.
- CouchDB usnadňuje ověřování a podporu relací:udržuje ověřování otevřené prostřednictvím souboru cookie relace jako webová aplikace.
- CouchDB poskytuje zabezpečení na úrovni databáze, kde jsou oprávnění pro každou databázi rozdělena na čtenáře a správce. Čtenáři mohou číst a zapisovat do databáze CouchDB.
- CouchDB ověřuje vložená data do databáze pomocí ověřování, aby ověřil, že tvůrce a ID relace přihlášení jsou stejné.
REST API se používá k zápisu a dotazování na data . Nabízí také čtení, přidávání, úpravy a mazání dokumentů. Používá ACID model spíše než BASE by MVCC implementace. Stejně jako MongoDB podporuje replikaci zařízení, když jsou offline. Používá speciální model replikace nazvaný Eventual Consistency. CouchDB je vysoce a vážně spolehlivý z hlediska dat. Jednouzlové databáze využívají datovou strukturu odolnou proti zhroucení pouze s připojením a vícerežimová nebo klastrová databáze může data ukládat redundantně, takže je lze zpřístupnit, kdykoli je uživatel potřebuje. CouchDB lze škálovat od velkých clusterů, jako jsou globální clustery, až po tak malé, jako jsou mobilní zařízení. Díky možnosti spustit na jakémkoli zařízení se systémem Android nebo iOS vyniká CouchDB mezi ostatními databázemi.
Je distribuována architektura CouchDB, která podporuje obousměrnou synchronizaci. Nevyžaduje žádné schéma, protože využívá jedinečné ID. Přestože CouchDB dodržuje funkci AP (odolnost vůči dostupnosti a oddílům) modelu CAP, aby překonal obchodovanou konzistenci, na praktickém základě se řídí modelem ACID.
Srovnání mezi CouchDB a MongoDB
Funkce porovnání | CouchDB | MongoDB |
Datový model | Řídí se dokumentově orientovaným modelem a data jsou prezentována ve formátu JSON. | Řídí se dokumentově orientovaným modelem, ale data jsou prezentována ve formátu BSON. |
Rozhraní | CouchDB používá rozhraní založené na HTTP/REST. Je velmi intuitivní a velmi dobře navržený. | MongoDB používá binární protokol a vlastní protokol přes TCP/IP. |
Ukládání objektů | V CouchDB obsahuje databáze dokumenty. | V MongoDB obsahuje databáze kolekce a kolekce obsahuje dokumenty. |
Rychlost | Rychlost čtení je pro databázi kritická, MongoDB je rychlejší než CouchDB | MongoDB poskytuje vyšší rychlost čtení. |
Mobilní podpora | CouchDB lze provozovat na zařízeních Apple iOS a Android a nabízí podporu pro mobilní zařízení. | Neposkytována žádná mobilní podpora |
Velikost | Databáze může růst s CouchDB; MongoDB je vhodnější pro rychlý růst, když struktura není od začátku jasně definovaná. | Pokud máme rychle rostoucí databázi, MongoDB je lepší volba. |
Metoda dotazu | Dotazy používají funkce map-reduce. I když se může jednat o elegantní řešení, pro lidi s tradiční zkušeností s SQL může být obtížnější se s ním naučit. | MongoDB následuje Map/Reduce (JavaScript) vytvářející kolekci + objektově založený dotazovací jazyk. Pro uživatele se znalostmi SQL se MongoDB snáze učí, protože je syntaxi bližší. |
Replikace | CouchDB podporuje replikaci master-master s vlastními funkcemi pro řešení konfliktů. | MongoDB podporuje replikaci master-slave. |
Souběh | Řídí se MVCC (Multi-Version Concurrency Control). | Aktualizace na místě. |
Předvolby | CouchDB upřednostňuje dostupnost. | MongoDB upřednostňuje konzistenci. |
Konzistence výkonu | CouchDB je bezpečnější než MongoDB. | MongoDB, databáze obsahuje sbírky a kolekce obsahuje dokumenty. |
Konzistence | CouchDB je nakonec konzistentní. | MongoDB je silně konzistentní. |
Napsáno | Je napsán v Erlangu. | Je napsán v C++. |
Analýza | Pokud požadujeme databázi, která běží na mobilním zařízení, potřebuje replikaci master-master nebo trvanlivost jediného serveru, pak je CouchDB skvělou volbou. | Pokud hledáme maximální propustnost nebo máme rychle rostoucí databázi, MongoDB je správná cesta. |
CouchDB a MongoDB:Velmi odlišné dotazy
CouchDB a MongDB jsou datová úložiště orientovaná na dokumenty, která pracují s dokumenty JSON, ale pokud jde o dotazy, obě databáze už se nemohou lišit. CouchDB vyžaduje předdefinované pohledy (což jsou v podstatě JavaScriptové funkce MapReduce) a MongoDB podporuje dynamické dotazy (v podstatě to, na co jsme zvyklí u běžných RDBMS ad-hoc SQL dotazů).
Například za účelem vložení některých dat do CouchDB pomocí Groovy's RESTClient a vydání příspěvku RESTful, jak je uvedeno níže:
import static groovyx.net.http.ContentType.JSON
import groovyx.net.http.RESTClient
def client = new RESTClient("http://localhost:5498/")
response = client.put(path: "parking_tickets/1280002020",
contentType: JSON,
requestContentType: JSON,
body: [officer: "Micheal Jordan",
location: "189 Berkely Road",
vehicle_plate: "KL5800",
offense: "Parked in no parking zone",
date: "2020/02/01"])
Ukázkový kód funkce pro dotaz na jakýkoli dokument, jehož důstojnická vlastnost je „Micheal Jordan“:
function(doc) {
if(doc.officer == "Micheal Jordan"){
emit(null, doc);
}
}
Když vyšleme požadavek HTTP GET na název tohoto výběru dat, můžeme očekávat alespoň jeden dokument, jak je uvedeno níže:
response = client.get(path: "parking_tickets/_view/by_name/officer_grey",
contentType: JSON, requestContentType: JSON)
assert response.data.total_rows == 1
response.data.rows.each{
assert it.value.officer == "Micheal Jordan"
}
MongoDB funguje podobně, jako jsme zvyklí u běžných databází:za běhu můžeme dotazovat, co si naše srdce přeje.
Vložení stejné instance parkovacího lístku pomocí nativního Java ovladače MongoDB:
DBCollection coll = db.getCollection("parking_tickets");
BasicDBObject doc = new BasicDBObject();
doc.put("officer", "Micheal Jordan");
doc.put("location", "189 Berkely Road ");
doc.put("vehicle_plate", "KL5800");
//...
coll.insert(doc);
Chcete-li se zeptat na jakýkoli lístek z MongoDB vydaný důstojníkem Michealem Jordanem, jednoduše zadáním dotazu na majetek důstojníka:
BasicDBObject query = new BasicDBObject();
query.put("officer", "Micheal Jordan");
DBCursor cur = coll.find(query);
while (cur.hasNext()) {
System.out.println(cur.next());
}
Závěr
V tomto blogu jsme porovnali dvě databáze NoSQL založené na dokumentech – MongoDB a CouchDB. Tabulka poskytuje přehled hlavních parametrických srovnání těchto dvou databází. Jak jsme viděli, priorita projektu bude určovat výběr systému. Mezi hlavní rozdíly patří způsob replikace a podpora platformy. Také ze srovnání je zřejmé, že pokud aplikace vyžaduje větší efektivitu a rychlost, pak je MongoDB lepší volbou než CouchDB. Pokud uživatel potřebuje provozovat svou databázi na mobilu a také potřebuje multimaster replikaci, pak je CouchDB jasnou volbou. MongoDB je také vhodnější než CouchDB, pokud databáze rychle roste. Hlavní výhodou použití CouchDB je, že je podporováno na mobilních zařízeních (Android a iOS) spíše než MongoDB. Takže v zásadě budou různé požadavky aplikací vyžadovat různé databáze založené na scénářích.
Zjistili jsme, že MongoDB je o něco lepší než CouchDB, protože používá strukturu dotazování podobnou SQL, a totéž je jednodušší v prvním. Také pro použití dynamických dotazů je MongoDB mnohem lepší volbou. Pokud jde o bezpečnost v obou databázích, výzkum stále pokračuje a je těžké říci, která z nich poskytuje lepší a bezpečnější prostředí.