Programavimas

„MongoDB“ ir „MySQL“: kaip pasirinkti

Dešimtojo dešimtmečio „dot-com“ burbulo metu viena įprasta žiniatinklio programų programinė įranga buvo „LAMP“, kuri iš pradžių reiškė „Linux“ (OS), „Apache“ (žiniatinklio serveris), „MySQL“ (reliacinė duomenų bazė) ir PHP (serverio programavimo kalba). „MySQL“ buvo pageidaujama duomenų bazė, daugiausia todėl, kad ji buvo nemokama atvirojo kodo ir turėjo gerą skaitymo našumą, puikiai derančią su „Web 2.0“ programomis, dinamiškai generuojančiomis svetaines iš duomenų bazės.

Vėliau iškilo MEAN kaminas, reiškiantis „MongoDB“ (dokumentų duomenų bazė), „Express“ (žiniatinklio serveris), „AngularJS“ („front-end“ sistema) ir „Node.js“ („back-end JavaScript“ vykdymo laikas). „MEAN“ kaminas, be kitų priežasčių, buvo patrauklus, nes vienintelė kalba, kurią jums reikėjo mokėti, buvo „JavaScript“. Jam taip pat reikėjo mažiau RAM nei lygiaverčio LAMP kamino.

Kas yra MySQL / MariaDB?

Monty Widenius ir Davidas Axmarkas iš „MySQL AB“ iš pradžių sukūrė „MySQL“, pradedant 1994 m. „My“ produkto pavadinime nurodo Widenius dukterį, o ne anglišką žodį „my“. „MySQL“ buvo sukurtas taip, kad būtų suderinamas su mSQL (dar žinomas kaip „Mini SQL“) su API, pridėjus SQL užklausų sluoksnį ir atvirojo kodo licenciją (iš tikrųjų dviguba licencija, tiek nuosavybės, tiek GPL). Vieši „MySQL“ leidimai prasidėjo 1996 m. Pabaigoje ir tęsėsi kas metus ar dvejus. „MySQL“ šiuo metu yra populiariausia reliacinė duomenų bazė.

„Sun Microsystems“ įsigijo „MySQL AB“ 2008 m. (Už 1 milijardą dolerių), o „Oracle“ įsigijo „Sun“ 2010 m. Widenius prieš pat „Oracle“ įsigijimą šakojo „MySQL 5.5“ į „MariaDB“. „MariaDB“ labai stengėsi išlaikyti suderinamumą su „Oracle MySQL“ versijomis.

„MySQL“ prasidėjo kaip gana žemos klasės reliacinė duomenų bazė, palyginti su labiau pajėgiomis komercinėmis reliacinėmis duomenų bazėmis, tokiomis kaip „Oracle Database“, „IBM DB / 2“ ir „Microsoft SQL Server“, nors ji buvo pakankamai gera, kad būtų dinaminių svetainių pagrindinė parduotuvė. Per daugelį metų jis pridėjo daugumą funkcijų, kurių tikitės iš reliacinės duomenų bazės, įskaitant operacijas, referencinio vientisumo apribojimus, saugomas procedūras, žymeklius, viso teksto indeksavimą ir paiešką, geografinį indeksavimą ir paiešką bei grupavimą.

„MySQL“ vis dar paprastai naudojamas mažose ir vidutinėse diegimo vietose, nors dabar jis palaiko „didžiosios duomenų bazės“ funkcijas, tokias kaip pagrindinio vergo diegimas, naudojimas kartu su „Memcached“ ir horizontaliu dalijimu. „MySQL“ mastelio keitimas keliems vergams pagerina skaitymo našumą, tačiau tik pagrindinis priima rašymo užklausas.

AWS siūlo „MySQL“ kaip dviejų skonių paslaugą - „Amazon RDS“ ir „Amazon Aurora“. Pastarasis turi daug didesnį našumą, gali apdoroti terabaitus duomenų, turi mažesnį atsilikimų laiką atnaujinant kopijas ir tiesiogiai konkuruoja su „Oracle Database“ ir „SQL Server“.

Kas yra „MongoDB“?

„MongoDB“ yra labai keičiamo dydžio operatyvinių dokumentų duomenų bazė, prieinama tiek atvirojo kodo, tiek komercinės įmonės versijomis. Ją galima paleisti patalpose arba kaip valdomą debesų paslaugą. Valdoma debesų paslauga vadinama „MongoDB Atlas“.

„MongoDB“ yra pati populiariausia iš „NoSQL“ duomenų bazių. Jo dokumentų duomenų modelis suteikia kūrėjams didelį lankstumą, o jo paskirstyta architektūra leidžia labai keisti. Todėl „MongoDB“ dažnai pasirenkamas programoms, kurios turi valdyti didelius duomenų kiekius, kurios naudojasi horizontaliu masteliu ir tvarko duomenų struktūras, kurios neatitinka reliacinio modelio.

„MongoDB“ yra dokumentais pagrįsta parduotuvė, kurioje taip pat įdiegta grafikais pagrįsta parduotuvė. „MongoDB“ iš tikrųjų nesaugo JSON: jis saugo BSON (dvejetainis JSON), kuris išplečia JSON atvaizdavimą (eilutes), įtraukdamas papildomus tipus, tokius kaip int, long, date, slankiojo kablelio, dešimtainio skaičiaus128 ir geoerdvinės koordinatės.

„MongoDB“ gali generuoti daugiamodalius grafinius, geoerdvinius, B medžių ir viso teksto indeksus vienoje duomenų kopijoje, naudodamas duomenų tipą, kad sugeneruotų teisingą indekso tipą. „MongoDB“ leidžia kurti indeksus bet kuriame dokumento lauke. „MongoDB 4“ turi daugelio dokumentų operacijas, o tai reiškia, kad vis tiek galite gauti ACID savybes, net jei turite normalizuoti savo duomenų dizainą.

Pagal numatytuosius nustatymus „MongoDB“ naudoja dinamines schemas, kartais vadinamas schemomis. Vienos kolekcijos dokumentuose nebūtinai turi būti tas pats laukų rinkinys, o lauko duomenų tipas gali skirtis įvairiuose kolekcijos dokumentuose. Bet kada galite pakeisti dokumentų struktūrą naudodami dinamines schemas.

Tačiau yra schemos valdymas. Pradedant nuo „MongoDB 3.6“, „MongoDB“ palaiko JSON schemos patvirtinimą, kurį galite įjungti patvirtinimo išraiškoje.

„LAMP“ ir „PRASMĖ“ kaminai

Yra daugybė LAMP ir MEAN paketų variantų. Pavyzdžiui, vietoj „Linux“ OS galite paleisti „Windows“ (WAMP) arba „MacOS“ (MAMP). Vietoj „Apache“ žiniatinklio serverio sistemoje „Windows“ galite paleisti IIS (WIMP).

Vietoj „MySQL“ reliacinės duomenų bazės LAMP šūsnyje galite paleisti „PostgreSQL“ arba „SQL Server“. Jei jums reikia platinimo visame pasaulyje, galite paleisti „CockroachDB“ arba „Google Cloud Spanner“. Vietoj PHP kalbos galite koduoti „Perl“ arba „Python“. Jei norite koduoti „Java“ arba „C #“, reikia atsižvelgti į atskiras grupes.

Vietoj „MongoDB“ dokumentų duomenų bazės, esančios „MEAN“ šūsnyje, galite paleisti „Couchbase“ arba „Azure Cosmos DB“, kad galėtumėte geriau paskirstyti. Vietoj „Express“ galite naudoti bet kurią iš keliolikos „Node.js“ tinklo serverio struktūrų. Vietoj „AngularJS“ front-end sistemos galite paleisti „Angular 2“ arba „React“.

Kaip pasirinkti savo programos duomenų bazę

Svarbiausi klausimai, kuriuos reikia užduoti renkantis duomenų bazę, yra šie:

  • Kiek duomenų tikitės išsaugoti, kai programa bus subrendusi?
  • Kiek vartotojų tikitės vienu metu dirbti didžiausią apkrovą?
  • Kokio prieinamumo, mastelio, vėlavimo, pralaidumo ir duomenų nuoseklumo reikia jūsų programai?
  • Kaip dažnai pasikeis jūsų duomenų bazės schemos?
  • Koks yra jūsų naudotojų geografinis pasiskirstymas?
  • Kokia yra natūrali jūsų duomenų „forma“?
  • Ar jūsų programai reikalingas internetinis operacijų apdorojimas (OLTP), analitinės užklausos (OLAP), ar abu?
  • Kokio skaitymo ir rašymo santykio tikitės gamyboje?
  • Ar jums reikia geografinių ir (arba) viso teksto užklausų?
  • Kokios yra jūsų pageidaujamos programavimo kalbos?
  • Ar turite biudžetą? Jei taip, ar tai apims licencijas ir paramos sutartis?

Keletas šių klausimų bus linkę susiaurinti duomenų bazės pasirinkimą, tačiau mes turime daug daugiau galimybių nei tada, kai buvo suformuluotas LAMP kaminas. Jei kuriate programą, kuri turi būti prieinama 99,999 proc. Laiko vartotojams visame pasaulyje, nuosekliai, sąskaitoje bus tik kelios duomenų bazės. Jei jūsų programa bus naudojama vienoje šalyje nuo 9 iki 18 val. darbo dienomis ir gali toleruoti galimą nuoseklumą, beveik bet kokia duomenų bazė veiks, nors kai kurioms kūrėjams ir operatoriams bus lengviau, o kai kurios suteiks jums geresnių rezultatų pagal pagrindinius naudojimo scenarijus.

Nors „LAMP“ ir „MEAN“ kaminai vienu metu buvo geri sprendimai žiniatinklio programoms, dabar nė vienas iš jų nėra optimalus. Užuot aklai priėmę vienus ar kitus, turėtumėte apgalvoti savo naudojimo atvejus ir rasti architektūrą, kuri artimiausiu metu pasitarnaus jūsų programai.

SQL ar NoSQL?

Kada norėtumėte naujos programos duomenų bazės, tokios kaip „MySQL“, duomenų bazės? Be akivaizdaus standartinio SQL palaikymo, reliacinės duomenų bazės per se verčia duomenis į lentelių schemą su nuosekliu stipriu laukų tipavimu ir padeda išvengti duomenų dubliavimo tol, kol pasinaudojate normalizavimo pranašumais.

Jei jums reikia vengti trūkstamų duomenų, galite deklaruoti laukus NE NULL kai kuriate ar modifikuojate lenteles. Jei jums reikia geografinių užklausų, kaip apibrėžta „Open Geospatial Consortium“, dauguma reliacinių duomenų bazių teikia patikimą įgyvendinimą. Ir jei jums reikia viso teksto paieškos, dauguma reliacinių duomenų bazių leidžia apibrėžti apverstus sąrašo indeksus teksto laukuose, vadinamuose PILNAS TEKSTAS indeksai „MySQL“.

Kita vertus, jei jums taip pat reikia kartais laisvos formos dokumento, „MySQL“ ir daugelis kitų reliacinių duomenų bazių taip pat palaiko „JSON“ duomenis, kaip apibrėžta RFC 7159. Ir jei taip pat norite naudoti XML dokumentus ir „XPath“ arba „XSLT“, dauguma reliacinių duomenų bazių teikia tas sugebėjimas.

Kada norėtumėte dokumentų, tokių kaip „MongoDB“, duomenų bazės? Jei jūsų pagrindinio naudojimo atvejui reikia leisti laisvos formos duomenis, laukus, kurie keičia dokumento tipą, dokumentą, laikui bėgant besikeičiančią schemą arba įdėtus dokumentus, tada NoSQL duomenų bazė atitiks reikalavimus. Be to, jei jūsų programa yra parašyta „JavaScript“, tai dokumentų duomenų bazių JSON formatas bus natūralus.

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