MongoDB
Vývojář | MongoDB Inc. |
---|---|
První vydání | 2009 |
Aktuální verze | 7.0.5 (5. ledna 2024) |
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 | SSPL v1 (drivers: Apache license) |
Web | www |
Některá data mohou pocházet z datové položky. |
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.
Licence a podpora
[editovat | editovat zdroj]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]
Hlavní funkce
[editovat | editovat zdroj]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 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).[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.
Nedostatky, úskalí
[editovat | editovat zdroj]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
[editovat | editovat zdroj]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]
Správa
[editovat | editovat zdroj]Oficiální MongoDB nástroje
[editovat | editovat zdroj]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.
Příklady NoSQL databází
[editovat | editovat zdroj]Související články
[editovat | editovat zdroj]Odkazy
[editovat | editovat zdroj]Externí odkazy
[editovat | editovat zdroj]Obrázky, zvuky či videa k tématu MongoDB na Wikimedia Commons
Reference
[editovat | editovat zdroj]- ↑ a b 10gen embraces what it created, becomes MongoDB Inc. [online]. [cit. 2013-08-27]. Dostupné online.
- ↑ Server Side Public License [online]. MongoDB, 2018-09-16 [cit. 2022-05-10]. 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.
- ↑ [1]
- ↑ [2]
- ↑ 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.
- ↑ Community Supported Drivers [online]. Mongodb.org [cit. 2014-07-09]. Dostupné online.
- ↑ mongo - The Interactive Shell. www.mongodb.org [online]. [cit. 2015-04-18]. Dostupné v archivu pořízeném z originálu dne 2012-11-20.
- ↑ 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)
- ↑ [3]
- ↑ mongofiles [online]. MongoDB Manual [cit. 2019-09-15]. Dostupné online. (anglicky)
- ↑ [4]
- ↑ 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
[editovat | editovat zdroj]- HOBERMAN, Steve. Data Modeling for MongoDB. 1st. vyd. [s.l.]: Technics Publications, June 1, 2014. ISBN 978-1-935504-70-2. S. 226.
- BANKER, Kyle. MongoDB in Action. 1st. vyd. [s.l.]: Manning, March 28, 2011. ISBN 978-1-935182-87-0. S. 375.
- 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.
- PIRTLE, Mitch. MongoDB for Web Development. 1st. vyd. [s.l.]: Addison-Wesley Professional, March 3, 2011. ISBN 978-0-321-70533-4. S. 360.
- 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.