MongoDB (z anglického humongous, česky obrovský) je multiplatformní dokumentová databáze. Řadí se mezi NoSQL databáze a místo tradičních relačních databází využívajících tabulky používá dokumenty podobné formátu JSON (MongoDB formát nazývá BSON) a dynamické databázové schéma, které umožňuje vytváření a integraci dat pro aplikace jednodušeji a rychleji. Jedná se o open source software vydaný pod GNU Affero General Public License a Apache licencemi.
MongoDB byla původně vyvinuta softwarovou společností 10gen (nyní MongoDB Inc.) v listopadu 2007 jako komponenta plánovaného platforma jako služba produktu. V roce 2009 se z projektu stal opensource. 10gen nabízel komerční podporu a další služby.[1] Od té doby bylo MongoDB implementováno jako backend řešení množstvím velikých stránek a služeb včetně stránek Craiglist, eBay, Foursquare, SourceForge, Viacom a New York Times. MongoDB je nejpopulárnější NoSQL databázový systém.
MongoDB je k dispozici zdarma pod licencí Server Side Public License (SSPL),[2] do října 2018 bylo dostupné pod GNU Affero General Public License.[3] Jazykové ovladače jsou dostupné pod Apache Licence. Dále MongoDB Inc. nabízí proprietární licence pro MongoDB.[1]
Mezi hlavní funkce patří:[4]
- Orientace na dokumenty
- Místo rozpadu bussiness subjektu do množství relačních struktur, MongoDB může ukládat bussiness subject v minimálním množství dokumentů. Například místo ukládání informace o názvu a autorovi knihy ve dvou relačních strukturách, mohou být název, autor a ostatní informace týkající se knihy v jednom dokumentu s názvem Kniha, který je více intuitivní a často se s ním lépe pracuje.[5]
- Neobsahuje schéma
- Nepotřebuje a ani nemá definované jednotné schéma. Každý záznam může mít jinou strukturu bez nutnosti/možnosti zahrnout toto do návrhu schématu jak je tomu u relačních databází. Což přináší jednodušší práci při ukládání dat. Na druhou stranu ale databáze nepomáhá validovat a udržovat v datech pořádek - pokud si validaci nenapíšete sami.
- Ad hoc dotazy
- MongoDB podporuje hledání podle pole, rozsahové dotazy a hledání podle regulárních výrazů. Dotazy mohou vracet specifická pole dokumentu a také obsahovat uživatelsky definované JavaScriptové funkce.
- Indexace
- Jakékoliv pole v MongoDB dokumentu může být indexované (Indexy v MongoDB jsou koncepčně stejné jako ty v relačních databázích). Jsou dostupné i sekundární indexy.
- Replikace
- MongoDB poskytuje vysokou dostupnost s pomocí sady replik (replica sets).[6] Sada replik obsahuje dvě nebo více kopií dat. Každý člen sady replik může kdykoliv zastávat funkci primární nebo sekundární repliky. Primární replika implicitně provádí všechny čtecí a zapisovací operace. Sekundární repliky udržují kopii dat primární repliky s využitím vestavěné replikace. Když primární replika selže, sada replik automaticky provede proces výběru náhrady ze sekundárních replik. Sekundární repliky mohou také provádět čtecí operace, ale data jsou nakonec vždy konzistentní.
- Vyvažování zátěže
- MongoDB se škáluje horizontálně pomocí shardingu.[7] Uživatel zvolí shard klíč, který rozhodne, jak bude kolekce dat distribuována. Data se dělí na rozsahy (podle shard klíče) a jsou distribuována mezi více shardů. (Shard existuje master s jedním nebo více slave.)
- MongoDB může běžet na více serverech a vyvažovat zátěž nebo duplikovat data aby systém dále běžel v případě chyby hardwaru. Automatická konfigurace je jednoduchá na nasazení a nové počítače mohou být přidány při běhu databáze.
- Ukládání souborů
- MongoDB může být použit jako souborový systém a tím využít vyvažování zátěže a replikace dat přes více počítačů.
- Tato funkce, nazývaná GridFS,[8] je zahrnuta v MongoDB ovladačích a jednoduše dostupná pro vývojové jazyky. MongoDB umožňuje vývojářům využívat funkce pro manipulaci souborů a obsahu. GridFS je například využit v pluginech NGINX[9] a lighttpd.[10] Místo ukládání souborů v jednom dokumentu, GridFS soubor rozdělí na více částí (kusů) a každou část uloží jako nezávislý dokument.[11]
- V MongoDB systému s více počítači mohou být soubory vícenásobně distribuovány a kopírovány v rámci více počítačů transparentně a tím vytvořit systém, který dokáže vyvažovat zátěž a zvládnout případné chyby.
- Agregace
- MapReduce na dávkové zpracování dat a agregující operace. Agregační framework umožňuje uživatelům získat stejný druh výsledků jako na který se používá SQL GROUP BY příkaz.
- Vykonávání JavaScriptu na straně serveru
- JavaScript může být použit v dotazech, agregačních funkcích (jako MapReduce) a být přímo odeslán do databáze, aby se provedl.
- Omezené kolekce
- MongoDB podporuje kolekce s omezenou velikostí a nazývá je omezené kolekce (capped collections). Tento typ kolekcí udržuje pořadí vložení a pokud je specifikovaní velikost naplněna, chová se jako kruhová fronta.
Díky svým vlastnostem má ale i určitá omezení, či nedostatky. Například:
- Neexistuje podpora pro relace mezi záznamy (inner/left/right/outer join). Je třeba si dělat ručně.
- Špatná podpora pro transakce.
- Neobsahuje pevné schéma, a s tím související validaci.
- Žádná referenční integrita.
- Global write lock.
- Žádná pokročilá správa cache, používá se disková cache z OS.
- Větší spotřeba místa na HDD kvůli nutné duplicitě.
MongoDB oficiálně podporuje velké množství populárních programovacích jazyků a vývojových prostředí.[12] Dále také existuje velké množství neoficiálních a komunitních ovladačů.[13]
V MongoDB instalaci jsou k dispozici následující příkazy:
- mongo
- MongoDB nabízí interaktivní shell nazývaný mongo,[14] který umožňuje vývojářům zobrazovat, vkládat, mazat a aktualizovat data v jejich databázi, ale také získat informace o replikaci, nastavit sharding, vypnout servery, vykonat JavaScript a mnohem více.
- Administrativní informace jsou také zpřístupněny přes webové rozhraní.[15] Jedná se o jednoduchou webovou stránku, která poskytuje informace o současném stavu serveru. Implicitně je rozhraní dostupné pod portem o 1000 vyšším než databázový port (28017).
- mongostat
- mongostat[16] je nástroj příkazové řádky, který zobrazí shrnující informace pro běžící MongoDB instanci: kolik vkládání, aktualizací, mazání, dotazů a příkazů bylo provedeno. Dále také informace o tom, kolik procent času byla databáze zamčena a kolik využívá paměti. Tento nástroj je podobný UNIXovému/LINUXovému nástroji vmstat.
- mongotop
- mongotop[17] je nástroj příkazové řádky poskytuje možnost sledování kolik času MongoDB instance strávila čtením a zápisem dat. Tento nástroj je podobný UNIXovému/LINUXovému nástroji top.
- mongosniff
- mongosniff[18] je nástroj příkazové řádky poskytující nízkoúrovňové sledování aktivit databáze skrze monitorování síťového provozu proudícího do a od MongoDB.
mongosniff vyžaduje Libpcap síťovou knihovnu dostupnou pouze na systémech založených na UNIXu. Multiplatformní alternativa je Wireshark, který podporuje MongoDB síťový protokol.
- mongooplog
- mongooplog[19] je jednoduchý nástroj, který spojí operace z replikačního oplogu vzdáleného serveru a aplikuje ho na lokální server.
- mongofiles
- mongofiles[20] nástroj umožňuje manipulovat soubory v MongoDB instanci v GridFS[21] objektech přes příkazovou řádku. Je převážně užitečný jako rozhraní mezi objekty ukládané na souborový systém a GridFS.
- mongoimport, mongoexport
- mongoimport[22] je nástroj příkazové řádky pro import obsahu z JSON, CSV nebo TSV formátu vytvořených mongoexport[23] nebo jako exporty nástrojů třetích stran.
- mongodump, mongorestore
- mongodump[24] je nástroj příkazové řádky pro vytváření binárních exportů obsahu MongoDB databáze. mongorestore[25] může být použit pro obnovení databáze z mongodump.
- HOBERMAN, Steve. Data Modeling for MongoDB. 1st. vyd. [s.l.]: Technics Publications, June 1, 2014. ISBN 978-1-935504-70-2. S. 226. Je zde použita šablona
{{Citation}}
označená jako k „pouze dočasnému použití“.
- BANKER, Kyle. MongoDB in Action. 1st. vyd. [s.l.]: Manning, March 28, 2011. ISBN 978-1-935182-87-0. S. 375. Je zde použita šablona
{{Citation}}
označená jako k „pouze dočasnému použití“.
- CHODOROW, Kristina; DIROLF, Michael. MongoDB: The Definitive Guide. 1st. vyd. [s.l.]: O'Reilly Media, September 23, 2010. ISBN 978-1-4493-8156-1. S. 216. Je zde použita šablona
{{Citation}}
označená jako k „pouze dočasnému použití“.
- PIRTLE, Mitch. MongoDB for Web Development. 1st. vyd. [s.l.]: Addison-Wesley Professional, March 3, 2011. ISBN 978-0-321-70533-4. S. 360. Je zde použita šablona
{{Citation}}
označená jako k „pouze dočasnému použití“.
- HAWKINS, Tim; PLUGGE, Eelco; MEMBREY, Peter. The Definitive Guide to MongoDB: The NoSQL Database for Cloud and Desktop Computing. 1st. vyd. [s.l.]: Apress, September 26, 2010. ISBN 978-1-4302-3051-9. S. 350. Je zde použita šablona
{{Citation}}
označená jako k „pouze dočasnému použití“.