Ohjelmointi

MongoDB vs. MySQL: Kuinka valita

1990-luvun dot-com-kuplan aikana yksi yleinen verkkosovellusten ohjelmistopino oli LAMP, joka alun perin tarkoitti Linuxia (OS), Apache (verkkopalvelin), MySQL (relaatiotietokanta) ja PHP (palvelimen ohjelmointikieli). MySQL oli ensisijainen tietokanta lähinnä siksi, että se oli ilmainen avoimen lähdekoodin ja hyvän lukutehon, joka sopi hyvin "Web 2.0" -sovelluksiin, jotka dynaamisesti luovat sivustoja tietokannasta.

Myöhemmin MEAN-pino, joka tarkoitti MongoDB: tä (asiakirjatietokanta), Express (verkkopalvelin), AngularJS (käyttöliittymän kehys) ja Node.js (Java-käyttöjärjestelmän Java-käyttöaika), tuli esiin. MEAN-pino oli houkutteleva muun muassa siksi, että ainoa tarvitsemasi kieli oli JavaScript. Se tarvitsi myös vähemmän RAM-muistia kuin vastaava LAMP-pino.

Mikä on MySQL / MariaDB?

Monty Widenius ja David Axmark MySQL AB: stä kehittivät alun perin MySQL: n vuodesta 1994 lähtien. Tuotenimessä oleva "My" viittaa Wideniuksen tyttäreen, ei englanninkieliseen sanaan "my". MySQL on suunniteltu API-yhteensopivaksi mSQL: n (alias Mini SQL) kanssa, lisäämällä SQL-kyselykerros ja avoimen lähdekoodin lisenssi (itse asiassa kaksoislisenssi, sekä oma että GPL). Julkiset MySQL-julkaisut alkoivat vuoden 1996 lopussa ja jatkuivat joka vuosi tai kaksi. MySQL on tällä hetkellä suosituin relaatiotietokanta.

Sun Microsystems osti MySQL AB: n vuonna 2008 (1 miljardilla dollarilla) ja Oracle osti Sunin vuonna 2010. Widenius haarautti MySQL 5.5: n MariaDB: hen juuri ennen Oracle-hankintaa keskellä laajaa huolta Oraclen aikomuksista MySQL: ään. MariaDB on yrittänyt kovasti ylläpitää yhteensopivuutta Oracle MySQL -versioiden kanssa.

MySQL aloitti melko matalan tason relaatiotietokantana verrattuna tehokkaampiin kaupallisiin relaatiotietokantoihin, kuten Oracle Database, IBM DB / 2 ja Microsoft SQL Server, vaikka se oli riittävän hyvä olemaan dynaamisten verkkosivustojen tukikauppa. Vuosien mittaan se on lisännyt suurimman osan relaatiotietokannasta odotettavista ominaisuuksista, mukaan lukien tapahtumat, viite-eheysrajoitukset, tallennetut menettelyt, kohdistimet, kokotekstihakemisto ja -haku, maantieteellinen indeksointi ja haku ja klusterointi.

MySQL: ää käytetään edelleen yleensä pienissä ja keskisuurissa käyttöönotoissa, vaikka se tukee nyt "suuren tietokannan" ominaisuuksia, kuten isäntä-orja-käyttöönottoja, käyttöä Memcachedin kanssa ja vaakasuoraa sirottelua. MySQL: n skaalaus useille orjille parantaa lukutehoa, mutta vain päällikkö hyväksyy kirjoituspyynnöt.

AWS tarjoaa MySQL: n palveluna kahdessa eri muodossa: Amazon RDS ja Amazon Aurora. Jälkimmäisellä on paljon korkeampi suorituskyky, se pystyy käsittelemään teratavuja dataa, sillä on pienempi viiveaika kopioiden päivittämiseen ja kilpailee suoraan Oracle Database ja SQL Serverin kanssa.

Mikä on MongoDB?

MongoDB on erittäin skaalautuva operatiivinen asiakirjatietokanta, joka on saatavana sekä avoimen lähdekoodin että kaupallisten yritysversioiden muodossa, ja sitä voidaan käyttää toimitiloissa tai hallittuna pilvipalveluna. Hallinnoitua pilvipalvelua kutsutaan MongoDB Atlasiksi.

MongoDB on kaukana suosituin NoSQL-tietokannoista. Sen asiakirjatietomalli antaa kehittäjille suuren joustavuuden, kun taas hajautettu arkkitehtuuri mahdollistaa suuren skaalautuvuuden. Tämän seurauksena MongoDB valitaan usein sovelluksille, joiden on hallittava suuria tietomääriä, hyötyvät horisontaalisesta skaalautuvuudesta ja jotka käsittelevät tietorakenteita, jotka eivät sovi relaatiomalliin.

MongoDB on asiakirjapohjainen myymälä, jonka päällä on myös graafipohjainen myymälä. MongoDB ei todellakaan tallenna JSONia: se tallentaa BSON: n (Binary JSON), joka laajentaa JSON-esitystä (merkkijonoja) sisällyttämään muita tyyppejä, kuten int, long, date, floating point, decimal128 ja geospatiaaliset koordinaatit.

MongoDB voi luoda multimodaalisen kuvaajan, paikkatieto-, B-puu- ja kokotekstihakemistot yhdestä kopiosta tiedoista käyttämällä oikeanlaisen hakemistotyypin tietojen tyyppiä. MongoDB: n avulla voit luoda hakemistoja mille tahansa asiakirjakentälle. MongoDB 4: llä on monidokumenttitapahtumia, mikä tarkoittaa, että voit silti saada ACID-ominaisuuksia, vaikka sinun pitäisi normalisoida tietosuunnittelu.

Oletuksena MongoDB käyttää dynaamisia skeemejä, joita joskus kutsutaan skeemattomiksi. Yhden kokoelman asiakirjoilla ei tarvitse olla samoja kenttijoukkoja, ja kentän tietotyyppi voi olla erilainen kokoelman sisällä. Voit muuttaa dokumenttirakenteita dynaamisilla skeemeillä milloin tahansa.

Järjestelmän hallinta on kuitenkin käytettävissä. Alkaen MongoDB 3.6: sta, MongoDB tukee JSON-mallin tarkistusta, jonka voit ottaa käyttöön validointilausekkeessasi.

LAMP ja MEAN-pinot

LAMP- ja MEAN-pinoissa on paljon muunnelmia. Esimerkiksi Linux-käyttöjärjestelmän sijasta voit käyttää Windowsia (WAMP) tai MacOS (MAMP). Apache-verkkopalvelimen sijaan Windowsissa voit käyttää IIS: ää (WIMP).

LAMP-pinossa olevan MySQL-relaatiotietokannan sijaan voit suorittaa PostgreSQL: n tai SQL Serverin. Jos tarvitset maailmanlaajuista jakelua, voit suorittaa CockroachDB: n tai Google Cloud Spannerin. PHP-kielen sijaan voit koodata Perlissä tai Pythonissa. Jos haluat koodata Java- tai C # -koodina, on harkittava erillisiä pinoryhmiä.

MEAN-pinossa olevan MongoDB-asiakirjatietokannan sijaan voit suorittaa Couchbase- tai Azure Cosmos DB -palvelun paremman globaalin jakelun saavuttamiseksi. Expressin sijaan voit käyttää mitä tahansa tusinaa Node.js-verkkopalvelinkehystä. AngularJS-käyttöliittymän kehyksen sijasta voit suorittaa Angular 2- tai React-toiminnon.

Kuinka valita tietokanta sovelluksellesi

Tärkeimmät tietokannan valitsemiseen liittyvät kysymykset ovat:

  • Kuinka paljon tietoja aiot tallentaa, kun sovellus on kypsä?
  • Kuinka monen käyttäjän odotat käsittelevän samanaikaisesti huippukuormituksella?
  • Mitä saatavuutta, skaalautuvuutta, viivettä, läpäisykykyä ja tietojen yhdenmukaisuutta sovelluksesi tarvitsee?
  • Kuinka usein tietokantamallisi muuttuvat?
  • Mikä on käyttäjäryhmäsi maantieteellinen jakauma?
  • Mikä on tietojesi luonnollinen muoto?
  • Tarvitseeko sovelluksesi verkkotapahtumien käsittelyä (OLTP), analyyttisiä kyselyjä (OLAP) vai molempia?
  • Minkä luku- ja kirjoitussuhteen odotat tuotannossa?
  • Tarvitsetko maantieteellisiä kyselyjä ja / tai kokotekstikyselyjä?
  • Mitkä ovat haluamasi ohjelmointikielet?
  • Onko sinulla budjettia? Jos on, kattako se lisenssit ja tukisopimukset?

Useat näistä kysymyksistä kaventavat tietokannan valintaa, mutta meillä on paljon enemmän vaihtoehtoja kuin silloin, kun LAMP-pino muotoiltiin. Jos rakennat sovellusta, jonka on oltava käytettävissä 99,999 prosenttia ajasta kaikkialla maailmassa ja jolla on vahva johdonmukaisuus, vain muutama tietokanta sopii laskuun. Jos hakemustasi käytetään yhdessä maassa klo 9–18 arkipäivisin ja sietää mahdollisen johdonmukaisuuden, melkein mikä tahansa tietokanta toimii, vaikka jotkut ovat helpompia kehittäjille ja operaattoreille ja toiset antavat sinulle paremman suorituskyvyn ensisijaisissa käyttötilanteissa.

Vaikka LAMP- ja MEAN-pinot olivat hyviä ratkaisuja verkkosovelluksiin kerralla, kumpikaan ei ole optimaalinen nyt. Sen sijaan, että ottaisit sokeasti käyttöön yhden tai toisen, sinun pitäisi miettiä käyttötapauksesi ja löytää arkkitehtuuri, joka palvelee sovellustasi lähitulevaisuudessa.

SQL vai NoSQL?

Milloin haluat relaatiotietokannan, kuten MySQL, uudelle sovellukselle? Normaalin SQL: n ilmeisen tuen lisäksi relaatiotietokannat sinänsä pakottavat tiedot taulukkomuotoon, jossa kentät tyypitetään jatkuvasti voimakkaasti, ja auttavat välttämään tietojen päällekkäisyyttä niin kauan kuin hyödynnät normalisointia.

Jos sinun on vältettävä tietojen puuttumista, voit ilmoittaa kentät EI TYHJÄ kun luot tai muokkaat taulukoita. Jos tarvitset Open Geospatial Consortiumin määrittelemiä maantieteellisiä kyselyjä, useimmat relaatiotietokannat tarjoavat vankan toteutuksen. Ja jos tarvitset kokotekstihakua, useimmat relaatiotietokannat antavat sinun määrittää käänteiset luetteloindeksit tekstikenttiin, nimeltään KOKO TEKSTI hakemistot MySQL: ssä.

Toisaalta, jos tarvitset myös satunnaista vapaamuotoista asiakirjaa, MySQL ja monet muut relaatiotietokannat tukevat myös JSON-tietoja RFC 7159: n määrittelemällä tavalla. Ja jos haluat käyttää myös XML-asiakirjoja ja XPath- tai XSLT-tiedostoja, useimmat relaatiotietokannat tarjoavat että kyky.

Milloin haluat asiakirjatietokannan, kuten MongoDB? Jos ensisijaisessa käyttötapauksessa on sallittava vapaamuotoiset tiedot, kentät, jotka vaihtavat tyyppiä asiakirjasta asiakirjaan, ajan myötä muuttuva malli tai sisäkkäiset asiakirjat, NoSQL-tietokanta täyttää vaatimukset. Lisäksi, jos sovelluksesi on kirjoitettu JavaScriptiä, asiakirjatietokantojen JSON-muoto on luonnollinen sovitus.

$config[zx-auto] not found$config[zx-overlay] not found