MongoDB

MongoDB

MongoDB Logo.svg
Základní data

vývojář MongoDB, Inc.
Rok vydání 2009
Aktuální  verze 5,0
( 13. července 2021 )
operační systém Linux , macOS , Microsoft Windows , OpenBSD
programovací jazyk C ++ , Go , JavaScript , C , Python
kategorie Dokumentově orientovaná databáze
Licence Veřejná licence na straně serveru
www.mongodb.com

MongoDB (odvozeno z anglického hu Mongo nás , „gigantický“) je dokument - orientovaný NoSQL databázový systém napsaný v C ++ programovací jazyk . Protože je databáze orientovaná na dokumenty, může spravovat kolekce dokumentů podobných formátu JSON . To umožňuje mnoha aplikacím modelovat data přirozenějším způsobem, protože data lze vnořovat do složitých hierarchií, ale vždy je lze dotazovat a indexovat.

Vývoj MongoDB byla zahájena v říjnu 2007, které společnost 10gen , který byl přejmenován MongoDB, Inc. dne 27. srpna 2013 . První publikace proběhla v únoru 2009. MongoDB byl publikován jako open source do 15. října 2018 a od té doby je k dispozici pod proprietárním SSPL . Je to nejpoužívanější databáze NoSQL (k říjnu 2019).

Požadavky na systém

Binární soubory jsou k dispozici pro Windows , Linux , macOS a Solaris . MongoDB lze kompilovat téměř na každém malém endianovém systému .

konstrukce

Databáze

MongoDB proces může spravovat více databází a databáze může obsahovat více kolekcí . Databáze a kolekce tvoří jmenný prostor oddělený tečkou . U databáze, která by měla spravovat data společnosti, a kolekce, která by měla obsahovat všechny zaměstnance, lze například zvolit obor názvů firma.mitarbeiter.

Sbírky

Kolekce obsahuje dokumenty a je srovnatelná s tabulkou v relační databázi. Zásadním rozdílem je, že dokumenty ve sbírce mohou být strukturovány zcela odlišně. Oni nemají následovat na schématu , ani hodnoty stejným klíčem musí být stejného datového typu .

Sbírky s limitem

MongoDB podporuje sbírky dokumentů s omezenou velikostí - také nazývané omezené kolekce . Je vytvořena omezená kolekce s určitou velikostí a - v závislosti na požadavcích - s řadou prvků. Limitován kolekce je jediný druh dokumentu kolekci , která udržuje pořádek: Jakmile se dosáhne zadané velikosti, limitován kolekce se chová stejně, jako kruhový buffer digitální .

V omezených kolekcích  lze použít speciální typ kurzoru - nazývaný přizpůsobitelný kurzor . Kurzor byl pojmenován podle příkazu Unix tail -f. Nezmizí, jakmile skončí přehrávání výsledků, ale čeká a přehraje nové výsledky, jakmile budou do sbírky přidány nové dokumenty.

Systémové sbírky

MongoDB automaticky vytváří systémové kolekce . Jedna ze systémových kolekcí obsahuje všechny indexy databáze, další všechny jmenné prostory , kód JavaScript a další informace o profilování a uživatelích.

Vyslýchat

Mongo vám umožňuje kdykoli dotazovat jakékoli pole. Mongo také kromě příkladných vyhledávání podporuje dotazy na rozsah, vyhledávání pomocí regulárních výrazů a další speciální vyhledávací dotazy. Tyto dotazy také zahrnují vlastní funkce JavaScriptu. Dotazy mohou vracet konkrétní pole dokumentu (místo celého dokumentu) a také třídit, přeskakovat a omezovat výsledky. Dotazy mohou zasahovat do vložených objektů a uspořádání.

Každý výsledek dotazu je poskytován jako kurzor .

indexování

Software podporuje indexové struktury, jako jsou B-stromy a geoprostorové indexy. Vnořená pole (jak je popsáno výše v dotazu ad hoc) lze také indexovat. Indexování seznamů má za následek indexování každého jednotlivého prvku seznamu.

Optimalizace dotazů MongoDB zkoumal při spuštění dotazu autonomně mezi různými hodnotících plánů a vybere nejrychlejší; opakování vzorku probíhá pravidelně . Vývojáři mohou explainvidět index použitý pomocí funkce a hintvybrat jiný index pomocí funkce .

Indexy lze kdykoli vytvářet a mazat.

Indexy MongoDB je nedostatek podpory pro obvyklé abecední třídění z přehlásky a dalších znaků Unicode .

Agregace

Kromě dotazů ad hoc databáze podporuje také další nástroje pro agregaci, včetně MapReduce a seskupovací funkce podobné SQL GROUP BY.

GridFS

Aby bylo možné ukládat dokumenty, které překračují limit velikosti 16 MB, lze použít GridFS („Grid File System“). Tento mechanismus ukládání souborů byl použit v zásuvných modulech pro Apache , nginx a lighttpd .

Odlišení od relačních (SQL) databází

MongoDB je klasifikován jako databáze NoSQL a jako takový se liší od tradičních databází tím, že nabízí méně výkonný dotazovací jazyk. To je nevýhoda i výhoda: Na jedné straně musí být v aplikační vrstvě k dispozici více logiky, aby bylo dosaženo stejných výsledků jako u databází SQL. Na druhou stranu může MongoDB distribuovat databázi a pracovní zátěž na několik serverů, což v monolitických databázích SQL není možné. Nyní však existují také databáze SQL, jako je. B. Exasol nebo Greenplum, které jsou distribuovány na několika serverech. Velké spojovací operace lze provádět pouze v rozumném čase na víceserverových systémech .

Při distribuci dat na několik serverů si MongoDB klade za cíl zvýšit dostupnost prostřednictvím replikace a distribuovat práci a zatížení dat pomocí shardingu (viz níže). Replikace má však ještě jednu nevýhodu: Pokud je přístup pro zápis potvrzen MongoDB, existuje standardní časové okno, ve kterém následné přístupy pro čtení vrátí stará data. Tento model konzistence je znám jako případná konzistence .

Další vlastností, která odlišuje MongoDB od relačních databází, je svoboda od schématu. Zatímco struktura databázového záznamu v relačních databázích je dána definicí tabulky, databázové záznamy v MongoDB se mohou navzájem libovolně lišit (i když patří do stejné kolekce ). Tato svoboda prý podporuje agilní vývoj softwaru, protože je snazší reagovat na měnící se požadavky.

Informace však musí být během analýz také strukturovány.

Odlišnost od ostatních databází NoSQL

Věta CAP se často používá ke klasifikaci databází na základě jejich kvalitativních charakteristik . Věta CAP uvádí, že v případě dělení na síť musí distribuovaný systém rozhodnout, zda má zůstat k dispozici, nebo zaručit konzistenci. MongoDB se zde rozhoduje pro konzistenci, ale může udržovat dostupnost, pokud může většina uzlů v sadě replik komunikovat mezi sebou. CouchDB ve srovnání s MongoDB s podobnými funkcemi staví dostupnost před konzistenci.

administrativní nástroje

Oficiální nástroje

Se spuštěným serverem MongoDB lze navázat spojení různými způsoby. Mongo Shell je součástí distribuce. Rozhraní pro správu založené na HTTP a rozhraní REST lze vyvolat v prohlížeči po předchozí aktivaci. Nakonec mají programátoři k dispozici ovladače pro mnoho programovacích jazyků, aby mohli implementovat komunikaci svých aplikací s MongoDB.

Mongo Shell

Mongo Shell je příkazový řádek - klient . Slouží ke správě MongoDB a umožňuje jeho uživateli operace čtení a zápisu. K tomu dostanete příkazový řádek, na kterém můžete spouštět příkazy v jazyce JavaScript .

Řidič

MongoDB přichází s oficiálními ovladači pro C , C ++ , C # , Haskell , Java , JavaScript , Lisp , Perl , PHP , Python , Ruby a Scala .

Existují také oficiálně podporované ORM pro MongoDB pro některé programovací jazyky , jako například B. Mongoose pro platformu Node.js.

Cloudová monitorovací služba

MongoDB Management Service (MMS) je cloudové monitorovací řešení a výstražná služba pro servery MongoDB.

Grafická rozhraní

Pro prohlížení a zpracování dat existuje několik grafických rozhraní ( GUI ). To zahrnuje:

Příjmení popis Licence Linux Okna Mac
Kompas MongoDB oficiální multiplatformní GUI pro MongoDB Veřejná licence na straně serveru Ano Ano Ano
Studio 3T (dříve MongoChef) multiplatformní uživatelské rozhraní MongoDB bezplatná licence a proprietární Ano Ano Ano
Nucleon BI Studio Frontend Business Intelligence pro MongoDB proprietární - Ano -
Tesák Mongo webové uživatelské rozhraní vytvořené pomocí Django a jQuery GNU AGPL v3.0 Ano - -
Nucleon Database Master databázový klientský software pro Windows, který také podporuje RDMS proprietární - Ano -
Futon4Mongo klon na CouchDB futon webové rozhraní pro MongoDB - - - -
mms, Mongo Management Studio multiplatformní i webové GUI bezplatná licence a proprietární Ano Ano Ano
Mongo3 rozhraní založené na Ruby Licence Apache 2.0 Ano Ano Ano
MongoHub nativní aplikace OS X pro správu MongoDB, neaktivní od dubna 2015 - Ne Ne Ano
Meruňka shell MongoDB založený na prohlížeči napsaný pomocí PHP GNU GPL v3.0 Ano - -
Robo 3T (dříve Robomongo) multiplatformní uživatelské rozhraní MongoDB GNU GPL v3.0 Ano Ano Ano
UMongo (JMongoBrowser) GUI pro správu různých platforem napsané v Javě různé open source licence - - -
DBHawk webový nástroj MongoDB proprietární Ano Ano Ano

Replikace

MongoDB nabízí dva typy replikace ke kompenzaci selhání jednotlivých serverů a k distribuci zatížení přístupu pro čtení na několik serverů :

Replikace master-slave

Master-slave replikace je zastaralá a již není k dispozici od verze 4.0.

Mistr byl schopen provádět čtení ( „ čte ‚) a možnosti zápisu (‘píše“). Slave zkopíroval data z masteru a mohl být použit pouze pro přístup ke čtení nebo pro zálohování dat, ale ne pro přístup pro zápis.

Replikace Master-Slave umožnila vývojářům zaručit, že alespoň jeden proces byl replikován na N serverů na základě běhu .

Sady replik

Sady replik jsou podobné vztahu master-slave, ale zahrnují schopnost otroků zvolit si nový master, pokud ten současný selže.

Sharding

MongoDB škáluje horizontálně pomocí systému zvaného horizontální fragmentace, který je velmi podobný škálovacím systémům Bigtable a PNUTS. Vývojář zvolí klíč fragmentace, který určuje, jak jsou data agregována agregovaně. Data jsou rozdělena do oblastí (na základě klíče fragmentace) a distribuována do několika instancí.

Aplikace nebo její vývojář musí vědět, že určité procesy komunikují s fragmentovaným clusterem . Pokud je například požadovaná kolekce horizontálně fragmentována, musí dotaz „findAndModify“ obsahovat klíč fragmentace. Aplikace komunikuje pomocí speciálního směrovacího procesu zvaného „mongos“, který vypadá jako jeden server MongoDB. Tento proces „mongos“ ví, která data jsou spravována kterou instancí, a podle toho směruje dotaz. Všechny dotazy procházejí tímto procesem: Toto nejen přeposílá dotazy a odpovědi, ale také provádí všechna nezbytná, konečná propojení dat a rozuzlení. Lze spustit libovolný počet procesů „mongos“, ale obvykle se doporučuje pouze jeden pro každý aplikační server.

technické základy

V případě přístupu pro čtení a zápis jsou data původně uložena v paměti RAM a po určité době (standardně každých 60 sekund) jsou synchronizována na disk pouze službou operačního systému mmap . To má za následek rychlostní výhodu, protože k RAM lze přistupovat v nanosekundách, zatímco k souborům lze přistupovat v tříciferném milisekundovém rozsahu. Jednou nevýhodou je, že například v případě selhání serveru dojde ke ztrátě všech dat, která jsou pouze v paměti RAM. MongoDB působí proti této nevýhodě metodou žurnálování .

Vzhledem k použití mmap , velikost dat je omezen na 2 GB na 32-bitových počítačích ( horní hranice je odpovídajícím způsobem mnohem vyšší pro 64-bitové počítače). Server MongoDB lze použít pouze na málo endian systémech, ačkoli většina řidičů spustit na obou málo endian a big-endian systémech.

Další funkce jsou:

  • Kódování dokumentů UTF-8 . Data jiná než UTF-8 lze ukládat, požadovat a přistupovat k nim pomocí speciálního binárního datového typu.
  • Podpora data, regulárních výrazů , kódu a binárních dat (všechny kategorie BSON ).
  • Provedení JavaScriptu na straně serveru: JavaScript je lingua franca MongoDB a lze použít dotazovací a agregační funkce (například MapReduce ) a také JavaScript lze odeslat přímo do databáze a tam jej spustit.

Licencování a podpora

MongoDB byl do října 2018 volně dostupný pod licencí GNU Affero General Public License (AGPL). Jazykové ovladače jsou k dispozici pod licencí Apache .

V říjnu 2018 vývojáři databáze MongoDB přešli na proprietární serverovou veřejnou licenci (SSPL), aby poskytovatelé cloudu nepoužívali databázi bez vracení kódu.
SSPL vyžaduje, aby každý, kdo nabízí službu MongoDB, také publikoval zdrojový kód služby podle této licence, včetně kódu všech programů pro správu, uživatelských rozhraní, monitorování a zálohování. MongoDB předložila licenci Open Source Initiative (OSI), kde byla zamítnuta. Nová verze 2 licence byla znovu předložena OSI, ale poté stažena poté, co vyšlo najevo, že nebude přijata. MongoDB je v současné době k dispozici pouze v zastaralé verzi 1. Tomu předcházela podobná změna licence ze strany vývojářů databáze Redis .

Kvůli změně licence byl MongoDB odstraněn z distribucí Linuxu Debian , Fedora a Red Hat Enterprise Linux . Projekt Fedora rozhodl, že SSPL verze 1 není licencí svobodného softwaru .

bezpečnost

Četné instalace MongoDB na internetu může přečíst a v některých případech dokonce kdokoli napsat. Prohledáním Shodana bylo v lednu 2017 nalezeno 52 000 otevřených databází.

Důvodem je, že ve standardní instalaci není nakonfigurováno žádné řízení přístupu. Pokud je databáze později přesunuta na veřejný server a konfigurace není upravena, k datům lze volně přistupovat zvenčí. Částečně to bylo zneužito ransomwarem, který tato data zašifroval. Výrobce komerční verze dlouhodobě doporučuje ochranná opatření.

Známí uživatelé

literatura

webové odkazy

Jednotlivé reference a komentáře

  1. Poznámky k verzi MongoDB 5.0 . (přístup 13. července 2021).
  2. ^ Jazyky . (Angličtina, přístup 6. srpna 2018).
  3. www.mongodb.com . (přístup 13. listopadu 2018).
  4. jira.mongodb.org . (přístup 13. listopadu 2018).
  5. ^ MongoDB. (Online již není k dispozici.) Archivováno z originálu 3. prosince 2013 ; Citováno 20. listopadu 2013 .
  6. ^ Web MongoDB. Citováno 22. června 2012 .
  7. 10gen oznamuje změnu názvu společnosti na MongoDB, Inc. 27. srpna 2013, přístup 28. srpna 2013.
  8. Blog MongoDB - březen 2010. Citováno 22. června 2012 .
  9. MongoDB nyní vydán pod veřejnou licencí na straně serveru. Citováno 29. listopadu 2018 .
  10. Pořadí DB motorů. Citováno 14. října 2019 .
  11. Sbírky s limitem. Citováno 22. června 2012 .
  12. Kurzory přizpůsobitelné. Citováno 22. června 2012 .
  13. ^ Příkaz pro hledání MongoDB. Citováno 16. října 2016 .
  14. ^ Geoprostorové indexy. Citováno 22. června 2012 .
  15. Derick Rethans: Řazení podle přirozeného jazyka pomocí MongoDB. 26. srpna 2014, přístup 26. října 2015 .
  16. Seřadit podle řazení. In: Jira MongoDB. 11. října 2010, přístup 26. října 2015 .
  17. GridFS. Citováno 15. ledna 2016 .
  18. mod_gridfs. Citováno 19. listopadu 2014 .
  19. nginx. Citováno 22. června 2012 .
  20. lighttpd. Citováno 22. června 2012 .
  21. Výhody a nevýhody MongoDB. Citováno 30. ledna 2016 .
  22. Proč svoboda od schématu? Citováno 30. ledna 2016 .
  23. ^ CAP věta. Citováno 30. ledna 2016 .
  24. Řidiči. Citováno 22. června 2012 .
  25. Ovladač MongoDB Node.js docs.mongodb.org
  26. Mongo Cloud , přístup 17. října 2015
  27. Kompas. Citováno 23. září 2020 (americká angličtina).
  28. mongodb-js / kompas. Citováno 23. září 2020 .
  29. Studio 3T (dříve MongoChef) - IDE pro MongoDB. Citováno 1. října 2014 .
  30. Tesák Mongo. Citováno 22. června 2012 .
  31. Fang-of-Mongo / LICENCE na fom_object Fiedzia / Fang-of-Mongo-GitHub
  32. Futon4Mongo. Citováno 22. června 2012 .
  33. Mongo Management Studio. Získaný 1. září 2014 .
  34. Mongo3. Citováno 22. června 2012 .
  35. MongoHub. Archivováno od originálu 7. února 2015 ; Citováno 22. června 2012 .
  36. jeromelebel / MongoHub-Mac. Přístup 30. srpna 2018 .
  37. Opricot. Citováno 22. června 2012 .
  38. robomongo. Citováno 10. ledna 2018 .
  39. robomongo / LICENCE na master paralect / robomongo - GitHub
  40. UMongo. Citováno 22. června 2012 .
  41. umongo / README.rst na master agirbal / umongo - GitHub
  42. DBHawk. Citováno 6. ledna 2018 .
  43. https://docs.mongodb.com/manual/release-notes/4.0-compatibility/index.html#replica-sets
  44. Tobias Trelle: MongoDB. Praktický úvod , dpunkt, Heidelberg 2014, s. 21.
  45. 32bitová omezení. Citováno 22. června 2012 .
  46. ^ AGPL - blog MongoDB: 5. května 2009. Získáno 22. června 2012 .
  47. [Kontrola licence] Schválení: Veřejná licence na straně serveru, verze 1 (SSPL v1). Citováno 29. listopadu 2018 .
  48. [Kontrola licence] Schválení: Veřejná licence na straně serveru, verze 2 (SSPL v2). Citováno 29. listopadu 2018 .
  49. [Kontrola licence] Schválení: Veřejná licence na straně serveru, verze 2 (SSPL v2). Citováno 22. března 2019 .
  50. Hanno Böck: MongoDB mění licenci
  51. Steven J. Vaughan-Nichols: Veřejná licence na straně serveru MongoDB „open-source“ zamítnuta ( cs )
  52. Změny licencí MongoDB vedly Red Hat k tomu, že 16. ledna 2019 zrušil databázi z nejnovější verze svého serverového OS ( en-US ).
  53. Vyděrači vymažou tisíce databází, oběti, které zaplatí, se ztuhnou , Krebs o bezpečnosti, 10. ledna 2017
  54. a b MongoDB: Zabezpečte nechráněné databáze. 18. února 2015, přístup 18. února 2015 .
  55. MongoDB ransacking  ( stránka již není k dispozici , vyhledávání ve webových archivechInfo: Odkaz byl automaticky označen jako vadný. Zkontrolujte odkaz podle pokynů a poté toto oznámení odeberte.@1@ 2Šablona: Dead Link / docs.g00gle.com  
  56. Pokyny pro zabezpečení: Jak zabezpečit MongoDB na produkčním serveru Linux nebo Unix , nixCraft, 9. ledna 2017
  57. ^ MongoDB Powering webových vlastností MTV . 10. května 2011. Citováno 6. července 2011.
  58. ^ Úložiště centrálních služeb Disney: Využití znalostí a dovedností . 24. května 2011. Archivováno z originálu 11. června 2011. Získáno 6. července 2011.
  59. MongoDB na foursquare - prezentace na MongoNYC . 21. května 2010. Archivováno z originálu 12. června 2010. Info: Odkaz na archiv byl vložen automaticky a dosud nebyl zkontrolován. Zkontrolujte původní a archivační odkaz podle pokynů a poté toto oznámení odeberte. Citováno 28. června 2010. @1@ 2Šablona: Webachiv / IABot / blip.tv
  60. Jacqueline Maher: Budování lepšího formuláře pro podání , NYTimes Open Blog. 25. května 2010. Citováno 28. června 2010. 
  61. Jak Python, TurboGears a MongoDB transformují SourceForge.net . PyCon 2010. 20. února 2010. Archivováno od originálu 19. srpna 2010. Získáno 22. června 2012.
  62. MongoDB v Etsy . Code as Craft: Etsy Developer Blog. 19. května 2010. Citováno 28. června 2010.
  63. Svatý velký hadronový urychlovač, Batmane! . Databázový blog MongoDB NoSQL. 3. června 2010. Citováno 3. srpna 2010.
  64. AppScale - podporovaná úložiště dat. (Online již není k dispozici.) Archivováno z originálu 7. září 2013 ; Citováno 22. června 2012 .