**MongoDB** on useilla eri alustoilla toimiva MongoDB Inc:n kehittämä dokumentti-orientoitunut tietokantaohjelmisto. MongoDB kuuluu ns. NoSQL-tietokantajärjestelmiin perinteisten relaatiomallia käyttävien sijaan. 
MongoDB on saatavilla Server Side Public License (SSPL) lisenssin ehdoilla.
Ohjelmiston käyttämä tiedostomuoto on JSON-muodon kaltainen.

Historia
--------

Ohjelmistoyritys 10gen aloitti MongoDB:n kehittämisen vuonna 2007 osana laajempaa alustaprojektia. Vuonna 2009 yritys vaihtoi toimintamalliksi avoimen lähdekoodin kehittämisen ja tukipalveluiden tarjoamisen. Vuonna 2013 10gen vaihtoi nimensä MongoDB Inc:ksi.
Lokakuussa 2017 MongoDB Inc listautui NASDAQ-pörssiin. 
Lokakuussa 2019 MongoDB liittoutui Alibaba Cloud –pilvipalvelun kanssa. MongoDB:ta tarjotaan palveluna Alibaban datakeskuksissa.

Keskeiset piirteet
------------------

### Kyselyt tilanteen mukaan ja sisällön indeksointi

MongoDB:llä voi tehdä hakuja tietokenttien nimien ja sisällön arvoalueiden perusteella sekä käyttäen säännöllisiä lausekkeita (regular expressions), joilla kuvataan etsityn merkkijonon muoto.
Tietokenttiä voidaan indeksoida sekä yksikäsitteisiin primaari-indekseihin että toissijaisiin indekseihin.

### Replikointi eli tiedon paikalliset kopiot

MongoDB:n tietokannoista on vaivatonta tuottaa paikallisia kopioita eli replikoita.

Kukin replika koostuu yhdestä tai useammasta datan kopiosta. Replikan osana olevat kopiot voivat toimia ensi- tai toissijaisina kopioina. Oletusarvoisesti luetaan ja kirjoitetaan ensisijaista kopiota. Toissijainen kopio toimii varmistuksena. Jos ensisijaisen kopion käyttö tai päivitys epäonnistuu, kukin replika määrittää automaattisesti, mistä toissijaisesta kopiosta tulee uusi ensisijaisesti käytettävä kopio. Toissijaisia kopioita voidaan lukea, mutta niiden sisällön ei katsota välttämättä olevan ensisijaisen kopion kanssa yhteneviä.

### Kuormituksen jakaminen

MongoDB mukautuu suurempaan kuormitukseen sharding-periaatteella.

Käyttäjä määrittää kriteerin (shard key), jonka mukaan tietokannan kuormitus hajautetaan. Hajautus voidaan tehdä myös satunnaisesti, jolloin kuormitus on tasainen, tietokannan sisältöön perustuvasta kriteeristä riippumaton. MongoDB voi käyttää useita palvelimia joko kuormituksen jakamiseen tai varmistamaan toiminnan jatkuminen laitevian tapahtuessa.

### Tiedostojärjestelmä

MongoDB:ta voidaan käyttää myös tiedostojärjestelmänä,josta käytetään nimeä GridFS. Sillä voidaan jakaa kuormitusta ja hallita tiedon paikallisia kopioita. GridFS toteutetaan MongoDB:n ajuriohjelmilla, kuten Nginx-pluginilla ja lighttpd:llä, jotka tarjoavat toimintoja tiedostojen käsittelyyn.

GridFS jakaa tiedostot osiin ja tallentaa kunkin osan erilliseksi dokumentiksi, joka on MongoDB:ssä tallennuksen looginen perusyksikkö.

### Tietojen koostaminen ja ryhmittely

MongoDB:ssä on kolme tapaa koostaa ja ryhmitellä dataa: putki, Map-reduce–funktio ja erikoistuneet koostamismenetelmät. Putki (pipeline) toimii UNIX:in putken tapaan toteuttaen peräkkäin useita toimintoja. Map-reduce-funktio tutkii datan ominaisuuksia ja tiivistää sitä laskennallisesti.

MongoDB:n tarjoamat datan koostamistoiminnot näkyvät käyttäjälle samaan tapaan kuin SQL:n `GROUP BY` –lauseen tulokset. $lookup-operaattorilla voi yhdistää dokumentteja eri kokoelmista ja suorittaa niille tilastolaskentaa, kuten laskea normaalijakauman.

### JavaScriptin käyttö palvelinpäässä

JavaScriptiä voidaan käyttää kyselyihin ja datan koostamiseen. Sillä voidaan myös kirjoittaa koodia tietokannassa suoritettavaksi.

### Kooltaan rajatut kokoelmat ja rengaspuskuri

MongoDB tukee kooltaan rajattuja kokoelmia (capped collections). Kun kokoraja saavutetaan, MongoDB käsittelee kokoelmia rengaspuskurin periaatteella: tieto tallennetaan kiinteässä järjestyksessä ja tilan täyttyessä tiedon tallennuspaikka siirtyy takaisin rakenteen alkuun.

Väitteet ACID-transaktioihin kykenemisestä
------------------------------------------

MongoDB:n on väitetty tukevan usean dokumentin keskeisiä ACID-transaktioita kesäkuussa 2018 julkaistusta versio 4.0:sta lähtien.
Väite ei pidä paikkaansa, koska MongoDB ei toteuta snapshot isolation –ominaisuutta.

Versiot
-------

* *MongoDB Community Server*, ilmainen, saatavissa Windows, Linux, OS X.
* *MongoDB Enterprise Server*, kaupallinen versio, sisältyy osana MongoDB Enterprise Advanced –pakettiin.
* *MongoDB Atlas*, MongoDB on-demand –palveluna, toimii AWS-, Microsoft Azure -, Google Cloud Platform –alustoilla.

Arkkitehtuuri
-------------

Eri ohjelmointikielten käyttömahdollisuudet: MongoDB:lle on saatavilla viralliset ajurit tärkeimpiin ohjelmointikieliin ja kehitysympäristöihin. On myös epävirallisia, yhteisöllisesti ylläpidettyjä muiden ohjelmointikielten ja kehysten ajureita.

Asiakasohjelmien toteutuskirjastoja on saatavilla JavaScriptille, iOS:lle  ja Androidille.

Lisensointi
-----------

### MongoDB Community Server

MongoDB lisensoitiin lokakuussa 2018 Server Side Public License –lisenssillä (SSPL), joka on projektin itsensä kehittämä. SSPL korvaa GNU Affero General Public License –lisenssin (AGPL) ja on lähes identtinen GNU General Public License version 3 –lisenssin kanssa, mutta edellyttää, että niiden, jotka tarjoavat ohjelmaa palvelun osana, täytyy julkaista palvelun lähdekoodi tällä lisenssillä.

SSPL lähetettiin Open Source Initiativen sertifioitavaksi, mutta vedettiin pois tästä prosessista. Kieliajurit ovat saatavilla Apachen lisenssillä. Lisäksi MongoDB Inc. tarjoaa ohjelmistoa erityisehtojen mukaisilla lisensseillä (proprietary licenses). Viimeisimmät AGPL version 3 –lisenssin mukaiset versiot ovat 4.0.3. (vakaa versio) ja 4.1.4. 

Lisensoinnin muututtua MongoDB ei ole enää mukana Debian-, Fedora- ja Red Hat Enterprise Linux -jakeluissa. Fedora on päättänyt, että SSPL version 1 ei ole vapaa ohjelmisto, koska se on "tietoisesti suunniteltu aggressiivisesti diskriminoivaksi" kaupallisia käyttäjiä kohtaan.

Ongelmahavaintoja ja kritiikkiä
-------------------------------

### Turvallisuus

MongoDB:n turvallisuusasetusten oletusarvot sallivat kenelle tahansa täydet oikeudet tietokantaan. Tämä on saanut aikaan, että kymmeniä tuhansia MongoDB-asennuksia on kaapattu. Moniin MongoDB-palvelimiin on hyökätty kiristyshaittaohjelmilla.

### Tekniikan kritiikkiä

Eräissä virhetilanteissa, joissa sovellus käyttää kahta erillistä MongoDB-prosessia, mutta näillä prosesseilla ei ole pääsyä toistensa tietoihin, on mahdollista, että MongoDB tuo vanhentunutta tietokantasisältöä (engl. stale reads). Näissä tilanteissa on myös mahdollista, että MongoDB palauttaa tietokannan aiempaan tilaan (engl. roll back).

Tämä ongelma havaittiin marraskuussa 2016 julkaistussa versiossa 3.4.0. Ongelma korjattiin takautuvasti versioon 3.2.12 asti.

Ennen versiota 2.2 lukitus toteutettiin serveriprosessikohtaisesti. Version 2.2 myötä lukitus alettiin toteuttaa tietokantatasolla. Versiosta 3.0 lähtien otettiin käyttöön uudenlaiset tallentimet (pluggable storage engines). Kukin tallennin toteuttaa lukitukset erikseen. MongoDB 3.0:ssa lukitus toteutetaan kokoelmien tasolla MMAPv1-tallentimella. WiredTiger-tallennin käyttää optimistista yhtäaikaisuudenhallintaa, joka tuottaa dokumenttitason lukitukset.

Ennen versiota 3.0 yksi tapa käsitellä yhtäaikaisuutta on *sharding* eli tietokannan hajauttaminen tietyn avaimen arvojen mukaan.
Joissakin tilanteissa luku- ja kirjoitusoperaatiot avaavat lukituksen. Mikäli MongoDB ennustaa, ettei sivu todennäköisesti ole muistissa, lukitus aukeaa kun sivuja ladataan. Lukituksen avaamista käytetään laajemmin versiossa 2.2.

Joissakin tilanteissa luku- ja kirjoitusoperaatiot avaavat lukituksen. Mikäli MongoDB ennustaa, ettei sivu todennäköisesti ole muistissa, lukitus aukeaa kun sivuja ladataan. Lukituksen avaamista käytetään laajemmin versiossa 2.2.
Versioon 3.3.11 asti MongoDB ei kyennyt lajittelemaan Unicodea käyttäviä ei-englanninkielisiä aineistoja oikein käytössä olleella tavuttain vertailulla (memcmp). Ongelma korjattiin 23.8.2016. *lähde?*

Ennen versiota 4.0 indeksihaut eivät olleet atomisia. Tästä aiheutui, että hausta saattoi jäädä pois dokumentteja, joita päivitettiin haun ollessa meneillään. Snapshot read –piirre versiossa 4.0 poisti tämän ongelman.

Tunnettuja käyttäjiä
--------------------

MongoDB:n tunnettuja käyttäjiä ovat Barclays, Bosch, Cisco, Chicagon kaupunki, Codeacademy, Coinbase, eBay, Foursquare, HSBC, IBM, Orange S.A. Sega, The Gap Inc. ja Uber.

MongoDB World -konferenssi
--------------------------

Vuodesta 2014 lähtien on järjestetty vuotuisia MongoDB World –kehittäjäkonferensseja.

Lähteet
-------

1. ↑  System Properties Comparison Couchbase vs. MongoDB *DB-Engines*.  Arkistoitu 18.9.2017. Viitattu 7.10.2022. (englanniksi)
2. ↑  Release Notes for MongoDB 6.0. Tieto on haettu Wikidatasta.
3. ↑  Harris, Derrick: 10gen embraces what it created, becomes MongoDB Inc.  27.8.2013. Gigaom.  Arkistoitu 16.11.2018. Viitattu 25.8.2020.
4. ↑  Witkowski, Wallace: MongoDB shares rally 34% in first day of trading above elevated IPO price *marketwatch.com*.  21.10.2017. Viitattu 25.8.2020.
5. ↑  Betz, Brandy: MongoDB teams with Alibaba Cloud  30.10.2019. SeekingAlpha.com. Viitattu 25.8.2020.
6. ↑  Kerby, Davis: Why MongoDB is the Way to Go *DZone*.  14.10.2015. Viitattu 25.8.2020.
7. ↑  Nguyen, Stephen: Ridiculously fast MongoDB replica recovery Part 1 of 2 *ClusterHQ [Internet Archive]*.  30.10.2017. Viitattu 25.8.2020.
8. ↑  van Scheppingen, Art: Turning a MongoDB Replica Set into a Sharded Cluster *severalnines.com*.  11.5.2013. Viitattu 25.8.2020.
9. ↑  Walker-Morgan, Dj: GridFS & MongoDB: Pros & Cons *Compose*.  5.6.2014. compose.com.  Arkistoitu 10.9.2017. Viitattu 25.8.2020.
10. ↑  Malick Md: MongoDB overview *ExpertsTown [Internet Archive 5.3.2014]*.  s.a.. Viitattu 25.8.2020.
11. ↑  Aggegation *docs.mongodb.com*. MongoDB, Inc. Viitattu 25.8.2020.
12. ↑  Map-Reduce *docs.mongodb.com*. MongoDB, Inc. Viitattu 25.8.2020.
13. ↑  Kobielus, James: MongoDB Drives NoSQL More Deeply into Enterprise Opportunities  27.6.2018. Wikibon Research. Viitattu 26.8.2020.
14. ↑  Kingsbury, Kyle: MongoDB 4.2.6 *jepsen.io*.  15.5.2020. Viitattu 25.8.2020.
15. ↑  MongoDB Atlas *mongodb.com*. Viitattu 26.8.2020.
16. ↑  MongoDB Atlas *mongodb.com*. Viitattu 26.8.2020.
17. ↑  Miller, Ron: MongoDB launches Global Clusters to put geographic data control within reach of anyone *techcrunch.com*.  27.6.2018. Viitattu 26.8.2020.
18. ↑  mongodb/mongo *github.com*. Viitattu 26.8.2020.
19. ↑  Rodrigues, Matheus: Getting Started With MongoDB Using ASP.NET Core Web API  5.3.2018. M. Rodrigues. Viitattu 26.8.2020.
20. ↑  mongodb/stitch-js-sdk *GitHub*. Viitattu 26.8.2020.
21. ↑  mongodb / stitch-ios-sdk *GitHub*. Viitattu 26.8.2020.
22. ↑  mongodb / stitch-android-sdk *GitHub*. Viitattu 26.8.2020.
23. ↑  Baer, Tony: It's MongoDB's turn to change its open source license *zdnet.com*.  16.10.2018. Viitattu 26.8.2020.
24. ↑  Lardinois, Frederic: MongoDB switches up its open-source license *techcrunch.com*.  16.10.2018. Viitattu 26.8.2020.
25. ↑  Staff, Ars: In 2019, multiple open source companies changed course—is it the right move? *Ars Technica*.  16.10.2019. Viitattu 26.8.2020.
26. ↑  Vaughan-Nichols, Steven J.: MongoDB "open-source" Server Side Public License rejected *zdnet.com*.  16.1.2019. Viitattu 26.8.2020.
27. ↑  Krazit, Tom: MongoDB’s licensing changes led Red Hat to drop the database from the latest version of its server OS *GeekWire*.  16.1.2019. Viitattu 26.8.2020.
28. ↑   Krebs, Brian: Extortionists Wipe Thousands of Databases, Victims Who Pay Up Get Stiffed *krebsonsecurity.com*.  17.1.2017. Viitattu 26.8.2020.
29. ↑   Constantin, Lucian: Ransomware groups have deleted over 10,000 MongoDB databases *Computerworld*.  6.1.2017. Viitattu 26.8.2020.
30. ↑   Kingsbury, Kyle: Call me maybe: MongoDB stale reads *aphyr.com*.  20.4.2015. Viitattu 26.8.2020.
31. ↑  Release Notes for MongoDB 3.4 *docs.mongodb.com*.  14.8.2018. Viitattu 26.8.2020.
32. ↑  Kingsbury, Kyle: MongoDB 3.4.0-rc3 *jepsen.io*.  7.2.2017. Viitattu 26.8.2020.
33. 1 2 3  Atomicity, isolation & concurrency in MongoDB *scalegrid.io*.  12.9.2013. Viitattu 26.8.2020.
34. ↑  Woodle, Alex: MongoDB Goes Pluggable with Storage Engines *datanami.com*.  3.2.2015. Viitattu 26.8.2020.
35. ↑  MongoDB, MMAPv1, WiredTiger, Locking, and Queues *[Internet Archive] Arborian.com*.  19.6.2017. Arborian Consulting.  Arkistoitu 19.6.2017. Viitattu 26.8.2020.
36. ↑  Gorman, Kenny: MongoDB with WiredTiger  1.10.2015. ObjectRocket.com. Viitattu 26.8.2020.
37. ↑  Manko, Mikita: MongoDB performance bottlenecks, optimization Strategies for MongoDB *www.mikitamanko.com*.  6.12.2013. Viitattu 26.8.2020.
38. ↑  Glasser, David: MongoDB queries don't always return all matching documents! *Meteor Blog*.  7.7.2016. Viitattu 14:25 26.8.2020.
39. ↑  Read Concern "snapshot" *docs.mongodb.com*. Viitattu 26.8.2020.
40. ↑  Aloto, Esayas: Who's Using MongoDB and Why? *datavail.com*.  4.11.2015. Datavail. Viitattu 26.8.2020.
41. ↑   Chang, Chris: Reporting Back from MongoDB World 2014, NYC, Planet JSON *DZone*.  2.7.2014. Viitattu 26.8.2020.


|  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- |
| 

| * n
* k
* m
Yhdysvallat NASDAQ-100-indeksin yritykset |
| --- |
|  |
| 
* Adobe
* Advanced Micro Devices
* Airbnb
* Alphabet
* American Electric Power
* Amazon
* Amgen
* Analog Devices
* Ansys
* Apple
* Applied Materials
* ASML Holding
* Astra Zeneca
* Atlassian
* Autodesk
* Automatic Data Processing
* Baker Hughes Company
* Biogen
* Booking Holdings
* Broadcom
* Cadence Design Systems
* CDW
* Cintas
* Cisco Systems
* Charter Communications
* Coca-Cola Europacific Partners
* Cognizant
* Comcast
* Constellation Energy
* Copart
* CoStar Group
* Costco
* CrowdStrike
* CSX
* Datadog
* Dexcom
* Diamondback Energy
* DoorDash
* Dollar Tree
* Electronic Arts
* Exelon
* Fastenal
* Fortinet
* GE HealthCare
* Gilead Sciences
* Globalfoundries
* Honeywell
* Idexx Laboratories
* Illumina
* Intel
* Intuit
* Intuitive Surgical
* Keurig Dr Pepper
* KLA Corporation
* Kraft Heinz
* Lam Research
* Lululemon Athletica
* Marriott International
* Marvell Technology Group
* MercadoLibre
* Meta
* Microchip Technology
* Micron Technology
* Microsoft
* Mondelez International
* MongoDB
* Monster Beverage
* Moderna
* Netflix
* Nvidia
* NXP Semiconductors
* Old Dominion Freight Line
* ON Semiconductor
* O'Reilly Auto Parts
* Paccar
* Palo Alto Networks
* Paychex
* PayPal
* PDD Holdings
* PepsiCo
* Qualcomm
* Regeneron Pharmaceuticals
* Roper Technologies
* Ross Stores
* Sirius XM
* Splunk
* Starbucks
* Synopsys
* T-Mobile US
* Take-Two Interactive
* Tesla, Inc.
* Texas Instruments
* Trade Desk
* Verisk Analytics
* Vertex Pharmaceuticals
* Walgreens Boots Alliance
* Warner Bros. Discovery
* Workday
* Xcel Energy
* Zscaler

 |
|  |
| Päivitetty: 4. tammikuuta 2024 |

 |

Käännös suomeksiKäännös suomeksi Tämä artikkeli tai sen osa on käännetty tai siihen on haettu tietoja muunkielisen Wikipedian artikkelista.   
Alkuperäinen artikkeli: en: MongoDB