Programiranje

MongoDB v primerjavi z MySQL: Kako izbrati

Med dot-com mehurčkom v devetdesetih letih je bil en pogost sklop programske opreme za spletne aplikacije LAMP, ki je prvotno stal za Linux (OS), Apache (spletni strežnik), MySQL (relacijska baza podatkov) in PHP (strežniški programski jezik). MySQL je bila najprimernejša baza podatkov predvsem zato, ker je bila brezplačno odprtokodna in je imela dobro bralno zmogljivost, kar se je dobro prilegalo aplikacijam »Web 2.0«, ki so dinamično generirale spletna mesta iz baze podatkov.

Kasneje je v ospredje prišel sklad MEAN, ki je bil kratica za MongoDB (zbirka dokumentov), ​​Express (spletni strežnik), AngularJS (prednji okvir) in Node.js (začasni čas izvajanja JavaScript). Sklad MEAN je bil med drugim privlačen, ker je bil edini jezik, ki ste ga morali poznati, JavaScript. Potreboval je tudi manj RAM-a kot enakovreden sveženj LAMP.

Kaj je MySQL / MariaDB?

Monty Widenius in David Axmark iz MySQL AB sta MySQL prvotno razvila od leta 1994. Oznaka "My" v imenu izdelka se nanaša na Wideniusovo hčerko in ne na angleško besedo "my". MySQL je bil zasnovan tako, da je združljiv z API-ji z ​​mSQL (sicer Mini SQL), z dodatkom sloja poizvedbe SQL in odprtokodne licence (pravzaprav dvojne licence, lastniške in GPL). Javne izdaje MySQL so se začele konec leta 1996 in se nadaljevale vsako leto ali dve. MySQL je trenutno najbolj priljubljena relacijska baza podatkov.

Sun Microsystems je leta 2008 kupil MySQL AB (za milijardo dolarjev), Oracle pa Sun leta 2010. Widenius je MySQL 5,5 v MariaDB razprl tik pred prevzemom Oracle, ob vsesplošni zaskrbljenosti glede Oraclovih namenov za MySQL. MariaDB se je zelo trudil, da bi ohranil združljivost z različicami Oracle MySQL.

MySQL se je začel kot dokaj nizka relacijska baza podatkov v primerjavi z zmogljivejšimi komercialnimi relacijskimi bazami podatkov, kot so Oracle Database, IBM DB / 2 in Microsoft SQL Server, čeprav je bila dovolj dobra, da je bila podpora za dinamična spletna mesta. V preteklih letih je dodal večino funkcij, ki jih pričakujete od relacijske baze podatkov, vključno s transakcijami, referenčnimi omejitvami integritete, shranjenimi postopki, kazalci, indeksiranjem in iskanjem celotnega besedila, geografskim indeksiranjem in iskanjem ter združevanjem v gruče.

MySQL se še vedno običajno uporablja v majhnih do srednje velikih postavitvah, čeprav zdaj podpira funkcije "velike baze podatkov", kot so uvedbe glavne podrejene, uporaba z Memcached in vodoravno ostrenje. Razširitev MySQL na več sužnjev izboljša zmogljivost branja, vendar le glavni sprejemnik sprejme zahteve za pisanje.

AWS ponuja MySQL kot storitev v dveh okusih, Amazon RDS in Amazon Aurora. Slednji ima veliko večjo zmogljivost, obdeluje terabajte podatkov, ima krajši čas zakasnitve za posodabljanje kopij in neposredno konkurira Oracle Database in SQL Server.

Kaj je MongoDB?

MongoDB je zelo razširljiva, operativna zbirka dokumentov, ki je na voljo tako v odprtokodni kot v komercialni različici podjetja, lahko pa se izvaja tudi v prostorih ali kot upravljana storitev v oblaku. Upravljana storitev v oblaku se imenuje MongoDB Atlas.

MongoDB je daleč najbolj priljubljena baza podatkov NoSQL. Njegov model podatkovnih dokumentov daje razvijalcem veliko prilagodljivosti, njegova porazdeljena arhitektura pa omogoča veliko razširljivost. Zaradi tega je MongoDB pogosto izbran za aplikacije, ki morajo upravljati velike količine podatkov, ki jim je všeč horizontalna razširljivost in ki obdelujejo podatkovne strukture, ki ne ustrezajo relacijskemu modelu.

MongoDB je shramba, ki temelji na dokumentih in ima na njej nameščeno tudi shrambo na osnovi grafov. MongoDB dejansko ne shrani JSON: shrani BSON (Binarni JSON), ki razširja predstavitev JSON (nize), tako da vključuje dodatne vrste, kot so int, long, date, floating point, decimal128 in geoprostorne koordinate.

MongoDB lahko na eni kopiji podatkov ustvari večmodalni indeks grafov, geoprostorskih indeksov, B-dreves in celotnega besedila s pomočjo vrste podatkov, da ustvari pravi tip indeksa. MongoDB vam omogoča ustvarjanje indeksov v poljubnem polju dokumenta. MongoDB 4 ima transakcije z več dokumenti, kar pomeni, da lahko še vedno dobite lastnosti ACID, tudi če morate normalizirati zasnovo podatkov.

MongoDB privzeto uporablja dinamične sheme, včasih imenovane tudi brez shem. Dokumenti v eni zbirki nimajo enakega nabora polj, vrsta podatkov za polje pa se lahko razlikuje med dokumenti znotraj zbirke. Strukture dokumentov lahko kadar koli spremenite z dinamičnimi shemami.

Vendar je na voljo upravljanje sheme. Od MongoDB 3.6 dalje MongoDB podpira preverjanje veljavnosti sheme JSON, ki ga lahko vklopite v izrazu za preverjanje.

Skladi LAMP in MEAN

Obstaja veliko različic nizov LAMP in MEAN. Namesto OS Linux lahko na primer zaženete v sistemu Windows (WAMP) ali MacOS (MAMP). Namesto spletnega strežnika Apache v sistemu Windows lahko zaženete IIS (WIMP).

Namesto relacijske baze podatkov MySQL v kupu LAMP lahko zaženete PostgreSQL ali SQL Server. Če potrebujete globalno distribucijo, lahko zaženete CockroachDB ali Google Cloud Spanner. Namesto jezika PHP lahko kodirate v Perl ali Python. Če želite kodirati v Javi ali C #, morate upoštevati ločene družine skladov.

Namesto zbirke podatkov MongoDB dokumentov v skladu MEAN lahko za boljšo globalno distribucijo zaženete Couchbase ali Azure Cosmos DB. Namesto Expressa lahko uporabite katerega koli od ducat ogrodja spletnega strežnika Node.js. Namesto vmesnega ogrodja AngularJS lahko zaženete Angular 2 ali React.

Kako izbrati bazo podatkov za svojo aplikacijo

Najpomembnejša vprašanja, ki jih morate zastaviti, ko izbirate bazo podatkov, so:

  • Koliko podatkov nameravate shraniti, ko bo aplikacija zrela?
  • Koliko uporabnikov pričakujete, da bodo istočasno obravnavali pri največji obremenitvi?
  • Kakšno razpoložljivost, razširljivost, zakasnitev, prepustnost in doslednost podatkov potrebuje vaša aplikacija?
  • Kako pogosto se bodo spreminjale vaše sheme baz podatkov?
  • Kakšna je geografska porazdelitev vaše uporabniške populacije?
  • Kakšna je naravna »oblika« vaših podatkov?
  • Ali vaša aplikacija potrebuje spletno obdelavo transakcij (OLTP), analitične poizvedbe (OLAP) ali oboje?
  • Kakšno razmerje med branjem in zapisom pričakujete v produkciji?
  • Ali potrebujete geografske poizvedbe in / ali poizvedbe po celotnem besedilu?
  • Kateri so vaši najljubši programski jeziki?
  • Imate proračun? Če je odgovor pritrdilen, bo zajemal licence in podporne pogodbe?

Nekatera od teh vprašanj bodo ponavadi omejila izbiro zbirke podatkov, vendar imamo na voljo veliko več možnosti kot takrat, ko je bil oblikovan sklad LAMP. Če gradite aplikacijo, ki mora biti v 99,999 odstotkih časa na voljo uporabnikom po vsem svetu z močno doslednostjo, bo le nekaj zbirk podatkov ustrezalo računu. Če bo vaša prijava uporabljena v eni državi od 9. do 18. ure. ob delavnikih in tolerira morebitno doslednost, skoraj vsaka baza podatkov bo delovala, čeprav bodo nekatere lažje za razvijalce in operaterje, druge pa bodo omogočile boljšo učinkovitost vaših primarnih scenarijev uporabe.

Čeprav sta bila sklada LAMP in MEAN hkrati dobra rešitev za spletne aplikacije, zdaj nobena ni optimalna. Namesto da bi slepo sprejemali eno ali drugo, raje premislite o primerih uporabe in poiščite arhitekturo, ki bo v bližnji prihodnosti služila vaši prijavi.

SQL ali NoSQL?

Kdaj bi želeli relacijsko bazo podatkov, kot je MySQL, za novo aplikacijo? Poleg očitne podpore za standardni SQL, relacijske baze podatkov same po sebi silijo podatke v tabelarno shemo z doslednim močnim tipkanjem polj in vam pomagajo, da se izognete podvajanju podatkov, dokler izkoristite normalizacijo.

Če se želite izogniti manjkajočim podatkom, lahko prijavite polja NI NULL ko ustvarjate ali spreminjate tabele. Če potrebujete geografske poizvedbe, kot jih je določil Odprti geoprostorski konzorcij, večina relacijskih baz podatkov ponuja zanesljivo izvedbo. In če potrebujete iskanje po celotnem besedilu, vam večina relacijskih baz podatkov omogoča določanje obrnjenih indeksov seznamov v besedilnih poljih, imenovanih FULLTEXT indeksi v MySQL.

Če potrebujete občasno tudi dokument v prosti obliki, MySQL in številne druge relacijske zbirke podatkov podpirajo tudi podatke JSON, kot jih opredeljuje RFC 7159. In če želite uporabljati tudi dokumente XML in XPath ali XSLT, večina relacijskih baz podatkov ponuja to sposobnost.

Kdaj želite zbirko dokumentov, kot je MongoDB? Če mora vaš primarni primer uporabe omogočiti podatke v prosti obliki, polja, ki spreminjajo vrste od dokumenta do dokumenta, shemo, ki se sčasoma spreminja, ali ugnezdene dokumente, potem bo baza podatkov NoSQL izpolnila zahteve. Poleg tega, če je vaša aplikacija napisana v JavaScript, bo oblika podatkovnih baz dokumentov JSON povsem primerna.

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