MongoDB

Wikipediasta
Siirry navigaatioon Siirry hakuun
Kää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

MongoDB on useilla eri alustoilla toimiva, MongoDB Inc:n kehittämä ja SSPL-lisenssin ehdoin jaettava dokumenttitietokantaohjelmisto. MongoDB kuuluu perinteisestä relaatiomallista poikkeaviin ns. NoSQL-tietokantoihin. Ohjelmiston käyttämä tiedostomuoto on JSON-muodon kaltainen.

Historia[muokkaa | muokkaa wikitekstiä]

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.[1] Lokakuussa 2017 MongoDB Inc listautui NASDAQ-pörssiin. [2] Lokakuussa 2019 MongoDB liittoutui Alibaba Cloudpilvipalvelun kanssa. MongoDB:ta tarjotaan palveluna Alibaban datakeskuksissa. [3]

Keskeiset piirteet[muokkaa | muokkaa wikitekstiä]

Kyselyt tilanteen mukaan ja sisällön indeksointi[muokkaa | muokkaa wikitekstiä]

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.[4] Tietokenttiä voidaan indeksoida sekä yksikäsitteisiin primaari-indekseihin että toissijaisiin indekseihin.

Replikointi eli tiedon paikalliset kopiot[muokkaa | muokkaa wikitekstiä]

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

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[muokkaa | muokkaa wikitekstiä]

MongoDB mukautuu suurempaan kuormitukseen sharding-periaatteella.[6]

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. MangoDB voi käyttää useita palvelimia joko kuormituksen jakamiseen tai varmistamaan toiminnan jatkuminen laitevian tapahtuessa.

Tiedostojärjestelmä[muokkaa | muokkaa wikitekstiä]

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.[7]

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

Tietojen koostaminen ja ryhmittely[muokkaa | muokkaa wikitekstiä]

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

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ä[muokkaa | muokkaa wikitekstiä]

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

Kooltaan rajatut kokoelmat ja rengaspuskuri[muokkaa | muokkaa wikitekstiä]

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ä[muokkaa | muokkaa wikitekstiä]

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

Versiot[muokkaa | muokkaa wikitekstiä]

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

Arkkitehtuuri[muokkaa | muokkaa wikitekstiä]

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

Asiakasohjelmien toteutuskirjastoja on saatavilla JavaScriptille[18], iOS:lle [19] ja Androidille.[20]

Lisensointi[muokkaa | muokkaa wikitekstiä]

MongoDB Community Server[muokkaa | muokkaa wikitekstiä]

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ä.[21][22]

SSPL lähetettiin Open Source Initiativen sertifioitavaksi, mutta vedettiin pois tästä prosessista.[23] 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.[24][25]

Ongelmahavaintoja ja kritiikkiä[muokkaa | muokkaa wikitekstiä]

Turvallisuus[muokkaa | muokkaa wikitekstiä]

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.[26][27]

Tekniikan kritiikkiä[muokkaa | muokkaa wikitekstiä]

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).[28]

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

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

Ennen versiota 3.0 yksi tapa käsitellä yhtäaikaisuutta on sharding eli tietokannan hajauttaminen tietyn avaimen arvojen mukaan.[35] 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.[31]

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.[31] 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.[36] Snapshot read –piirre versiossa 4.0 poisti tämän ongelman.[37]

Tunnettuja käyttäjiä[muokkaa | muokkaa wikitekstiä]

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.[38]

MongoDB World -konferenssi[muokkaa | muokkaa wikitekstiä]

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

Lähteet[muokkaa | muokkaa wikitekstiä]

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