MongoDB
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.
Vývojář | MongoDB Inc. |
---|---|
První vydání | 2009 |
Aktuální verze | 5.0.6 (31. ledna 2022) |
Operační systém | multiplatformní |
Vyvíjeno v | C++, Go, JavaScript, C a Python |
Typ softwaru | NoSQL, dokumentově orientovaná databáze, systém řízení báze dat a source-available software |
Licence | GNU AGPL v3.0 (drivers: Apache license) |
Web | www |
Některá data mohou pocházet z datové položky. |
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.
Licence a podpora
MongoDB je k dispozici zdarma pod GNU Affero General Public License.[2] Jazykové ovladače jsou dostupné pod Apache Licence. Dále MongoDB Inc. nabízí proprietární licence pro MongoDB.[1]
Hlavní funkce
Mezi hlavní funkce patří:[3]
- 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, můžou 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.[4]
- Neobsahuje schema
- 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).[5] 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.[6] 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,[7] 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[8] a lighttpd.[9] 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.[10]
- 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.
Nedostatky, úskalí
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é schema, 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ě.
Jazyková podpora
MongoDB oficiálně podporuje velké množství populárních programovacích jazyků a vývojových prostředí.[11] Dále také existuje velké množství neoficiálních a komunitních ovladačů.[12]
Správa
Oficiální MongoDB nástroje
V MongoDB instalaci jsou k dispozici následující příkazy:
- mongo
- MongoDB nabízí interaktivní shell nazývaný mongo,[13] 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í.[14] 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[15] 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[16] 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[17] 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[18] 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[19] nástroj umožňuje manipulovat soubory v MongoDB instanci v GridFS[20] 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.
Příklady NoSQL databází
- CouchDB
- FoundationDB
- ArangoDB
Související články
Odkazy
Externí odkazy
- Obrázky, zvuky či videa k tématu MongoDB na Wikimedia Commons
Reference
- 10gen embraces what it created, becomes MongoDB Inc. [online]. [cit. 2013-08-27]. Dostupné online. (anglicky)
- The AGPL [online]. MongoDB Blog, 2009-05-05 [cit. 2019-09-15]. Dostupné online. (anglicky)
- MongoDB Developer Manual
- Data Modeling for MongoDB. www.technicspub.com [online]. [cit. 2015-04-18]. Dostupné v archivu pořízeném dne 2014-09-04.
- GridFS [online]. MongoDB Manual [cit. 2019-09-15]. Dostupné online. (anglicky)
- NGINX plugin for MongoDB source code
- lighttpd plugin for MongoDB source code. bitbucket.org [online]. [cit. 2015-04-18]. Dostupné v archivu pořízeném z originálu dne 2011-08-07.
- Expertstown - MongoDB overview
- MongoDB Drivers and Client Libraries [online]. Mongodb.org [cit. 2013-07-08]. Dostupné online. (anglicky)
- Community Supported Drivers [online]. Mongodb.org [cit. 2014-07-09]. Dostupné online. (anglicky)
- mongo - The Interactive Shell
- HTTP Console. www.mongodb.org [online]. [cit. 2015-04-18]. Dostupné v archivu pořízeném dne 2013-01-29.
- mongostat [online]. MongoDB Manual [cit. 2019-09-15]. Dostupné online. (anglicky)
- mongotop [online]. MongoDB Manual [cit. 2019-09-15]. Dostupné online. (anglicky)
- mongosniff [online]. MongoDB Manual [cit. 2019-09-15]. Dostupné online. (anglicky)
- mongofiles [online]. MongoDB Manual [cit. 2019-09-15]. Dostupné online. (anglicky)
- mongoimport [online]. MongoDB Manual [cit. 2019-09-15]. Dostupné online. (anglicky)
- mongoexport [online]. MongoDB Manual [cit. 2019-09-15]. Dostupné online. (anglicky)
- mongodump [online]. MongoDB Manual [cit. 2019-09-15]. Dostupné online. (anglicky)
- mongorestore Manual
Bibliografie
- HOBERMAN, Steve. Data Modeling for MongoDB. 1st. vyd. [s.l.]: Technics Publications, June 1, 2014. ISBN 978-1-935504-70-2. S. 226. (anglicky)
- BANKER, Kyle. MongoDB in Action. 1st. vyd. [s.l.]: Manning, March 28, 2011. ISBN 978-1-935182-87-0. S. 375. (anglicky)
- 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. (anglicky)
- PIRTLE, Mitch. MongoDB for Web Development. 1st. vyd. [s.l.]: Addison-Wesley Professional, March 3, 2011. ISBN 978-0-321-70533-4. S. 360. (anglicky)
- 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. (anglicky)