Programmēšana

MongoDB pret MySQL: kā izvēlēties

Deviņdesmito gadu dot-com burbuļa laikā viena izplatīta tīmekļa lietojumprogrammu programmatūras kaudze bija LAMP, kas sākotnēji nozīmēja Linux (OS), Apache (tīmekļa serveris), MySQL (relāciju datu bāze) un PHP (servera programmēšanas valoda). MySQL bija vēlamā datu bāze, galvenokārt tāpēc, ka tā bija bezmaksas atvērtā koda un ar labu lasīšanas veiktspēju, kas labi saderēja ar “Web 2.0” lietotnēm, kas dinamiski ģenerēja vietnes no datu bāzes.

Vēlāk MEAN kaudze, kas apzīmēja MongoDB (dokumentu datu bāze), Express (tīmekļa serveris), AngularJS (priekšgala ietvars) un Node.js (aizmugures JavaScript izpildlaiks), ieguva ievērību. MEAN kaudze cita starpā bija pievilcīga, jo vienīgā valoda, kas jums bija jāzina, bija JavaScript. Tam arī vajadzēja mazāk RAM nekā līdzvērtīgai LAMP kaudzei.

Kas ir MySQL / MariaDB?

Monty Widenius un David Axmark no MySQL AB sākotnēji izstrādāja MySQL, sākot ar 1994. gadu. “My” produkta nosaukumā attiecas uz Widenius meitu, nevis angļu vārdu “my”. MySQL tika izstrādāts tā, lai tas būtu saderīgs ar API ar mSQL (arī Mini SQL), pievienojot SQL vaicājumu slāni un atvērtā pirmkoda licenci (faktiski divējāda licence, gan patentēta, gan GPL). Publiski MySQL izlaidumi sākās 1996. gada beigās un turpinājās katru gadu vai divus. MySQL šobrīd ir vispopulārākā relāciju datu bāze.

Sun Microsystems iegādājās MySQL AB 2008. gadā (par 1 miljardu ASV dolāru), bet Oracle - Sun 2010. gadā. Widenius iekļāva MySQL 5.5 MariaDB tieši pirms Oracle iegādes, plaši uztraucoties par Oracle nodomiem MySQL. MariaDB ir ļoti centies saglabāt saderību ar Oracle MySQL versijām.

MySQL sāka darboties kā diezgan zemas klases relāciju datu bāze, salīdzinot ar daudz spējīgākām komerciālām relāciju datu bāzēm, piemēram, Oracle Database, IBM DB / 2 un Microsoft SQL Server, lai gan tā bija pietiekami laba, lai būtu dinamisko vietņu atbalsta veikals. Gadu gaitā tā ir pievienojusi lielāko daļu funkciju, ko sagaidāt no relāciju datu bāzes, tostarp darījumus, atsauces integritātes ierobežojumus, saglabātās procedūras, kursorus, pilna teksta indeksēšanu un meklēšanu, ģeogrāfisko indeksēšanu un meklēšanu, kā arī kopu veidošanu.

MySQL joprojām parasti tiek izmantots mazos un vidējos izvietojumos, lai gan tagad tas atbalsta “lielās datu bāzes” funkcijas, piemēram, galvenā-verga izvietošanu, lietošanu kopā ar Memcached un horizontālu sadalīšanu. MySQL mērogošana vairākiem vergiem uzlabo lasīšanas veiktspēju, bet tikai kapteinis pieņem rakstīšanas pieprasījumus.

AWS piedāvā MySQL kā pakalpojumu divos aromātos: Amazon RDS un Amazon Aurora. Pēdējam ir daudz lielāka veiktspēja, tā var apstrādāt terabaitus datu, ir mazāks kavēšanās laiks kopiju atjaunināšanai un tieši konkurē ar Oracle Database un SQL Server.

Kas ir MongoDB?

MongoDB ir ļoti pielāgojama, operatīvu dokumentu datu bāze, kas pieejama gan atvērtā koda, gan komercuzņēmumu versijās, un to var palaist telpās vai kā pārvaldītu mākoņpakalpojumu. Pārvaldīto mākoņpakalpojumu sauc par MongoDB Atlas.

MongoDB ir vispopulārākais no NoSQL datu bāzēm. Tās dokumentu datu modelis nodrošina izstrādātājiem lielu elastību, savukārt tā izplatītā arhitektūra ļauj nodrošināt lielu mērogojamību. Tā rezultātā MongoDB bieži izvēlas lietojumprogrammām, kurām jāpārvalda liels datu apjoms, kuras gūst labumu no horizontālās mērogojamības un kuras apstrādā datu struktūras, kas neatbilst relāciju modelim.

MongoDB ir uz dokumentiem balstīts veikals, kuram virs tā ir ieviests arī uz diagrammām balstīts veikals. MongoDB faktiski neglabā JSON: tas glabā BSON (bināro JSON), kas paplašina JSON attēlojumu (virknes), iekļaujot tādus papildu veidus kā int, long, date, floating point, decimal128 un ģeotelpiskās koordinātas.

MongoDB uz vienas datu kopijas var ģenerēt multimodālus grafiskos, ģeotelpiskos, B-koka un pilna teksta rādītājus, izmantojot datu tipu, lai ģenerētu pareizu indeksa tipu. MongoDB ļauj jums izveidot indeksus jebkurā dokumenta laukā. MongoDB 4 ir vairāku dokumentu transakcijas, kas nozīmē, ka jūs joprojām varat iegūt ACID īpašības pat tad, ja jums ir jā normalizē datu dizains.

Pēc noklusējuma MongoDB izmanto dinamiskas shēmas, kuras dažreiz sauc arī par shēmām mazāk. Vienā kolekcijā esošajiem dokumentiem nav jābūt vienādam lauku kopumam, un lauka datu tips var atšķirties dažādos kolekcijas dokumentos. Dokumentu struktūras ar dinamiskām shēmām var mainīt jebkurā laikā.

Shēmas pārvaldība tomēr ir pieejama. Sākot ar MongoDB 3.6, MongoDB atbalsta JSON shēmas validāciju, kuru varat ieslēgt savā validatora izteiksmē.

LAMPAS un JĒGAS kaudzes

Pastāv daudz variāciju LAMP un MEAN kaudzēs. Piemēram, Linux OS vietā jūs varat palaist uz Windows (WAMP) vai MacOS (MAMP). Apache tīmekļa servera vietā sistēmā Windows varat palaist IIS (WIMP).

LAMP kaudzē esošās MySQL relāciju datu bāzes vietā jūs varētu palaist PostgreSQL vai SQL Server. Ja jums nepieciešama globāla izplatīšana, varat palaist CockroachDB vai Google Cloud Spanner. PHP valodas vietā jūs varētu kodēt Perl vai Python. Ja vēlaties kodēt Java vai C #, ir jāapsver atsevišķas skursteņu grupas.

MEAN kaudzē esošās MongoDB dokumentu datu bāzes vietā labākai globālai izplatīšanai varētu palaist Couchbase vai Azure Cosmos DB. Express vietā jūs varētu izmantot jebkuru no desmit Node.js tīmekļa servera ietvariem. AngularJS front-end ietvara vietā varat palaist Angular 2 vai React.

Kā izvēlēties datu bāzi savai lietojumprogrammai

Svarīgākie jautājumi, kas jāuzdod, izvēloties datu bāzi, ir:

  • Cik daudz datu jūs plānojat uzglabāt, kad lietojumprogramma ir nobriedusi?
  • Paredzat, cik lietotāju vienlaikus strādās ar maksimālo slodzi?
  • Kāda pieejamība, mērogojamība, latentums, caurlaidspēja un datu konsekvence ir nepieciešama jūsu lietojumprogrammai?
  • Cik bieži mainīsies jūsu datu bāzes shēmas?
  • Kāds ir jūsu lietotāju populācijas ģeogrāfiskais sadalījums?
  • Kāda ir jūsu datu dabiskā “forma”?
  • Vai jūsu lietojumprogrammai ir nepieciešama tiešsaistes darījumu apstrāde (OLTP), analītiskie vaicājumi (OLAP) vai abi?
  • Kādu lasījumu un rakstu attiecību jūs sagaidāt ražošanā?
  • Vai jums ir nepieciešami ģeogrāfiski vaicājumi un / vai pilna teksta vaicājumi?
  • Kādas ir jūsu vēlamās programmēšanas valodas?
  • Vai jums ir budžets? Ja jā, vai tā attieksies uz licencēm un atbalsta līgumiem?

Vairāki no šiem jautājumiem mēdz sašaurināt datu bāzes izvēli, taču mums ir pieejams daudz vairāk izvēles iespēju nekā tad, kad tika formulēts LAMP kaudze. Ja veidojat lietojumprogrammu, kuras lietotājiem visā pasaulē ir jābūt pieejamai 99,999 procentiem laika un ar stingru konsekvenci, rēķinam būs piemērotas tikai dažas datu bāzes. Ja jūsu lietojumprogramma tiks izmantota vienā valstī no pulksten 9:00 līdz 18:00. darba dienās un var pieļaut konsekvenci, gandrīz jebkura datu bāze darbosies, lai gan daži būs vieglāk izstrādātājiem un operatoriem, un daži sniegs jums labākus rezultātus jūsu primārajiem lietošanas scenārijiem.

Lai gan LAMP un MEAN skursteņi vienlaikus bija labi risinājumi tīmekļa lietojumprogrammām, neviens no tiem nav optimāls tagad. Tā vietā, lai akli pieņemtu vienu vai otru, jums vajadzētu pārdomāt lietošanas gadījumus un atrast arhitektūru, kas tuvākajā nākotnē kalpos jūsu lietojumprogrammai.

SQL vai NoSQL?

Kad jaunai lietojumprogrammai vēlaties izveidot tādu relāciju datu bāzi kā MySQL? Līdztekus acīmredzamajam standarta SQL atbalstam, relāciju datu bāzes pašas par sevi liek datus tabulu shēmā ar konsekventu spēcīgu lauku tipēšanu un palīdz izvairīties no datu dublēšanās, kamēr izmantojat normalizācijas priekšrocības.

Ja jums ir jāizvairās no datu trūkuma, varat deklarēt laukus NAV NULL kad veidojat vai modificējat tabulas. Ja jums ir nepieciešami ģeogrāfiski vaicājumi, kā definējis Open Geospatial Consortium, lielākā daļa relāciju datu bāzu nodrošina stabilu ieviešanu. Un, ja jums nepieciešama pilna teksta meklēšana, lielākā daļa relāciju datu bāzu ļauj teksta laukos definēt apgrieztus sarakstu rādītājus, ko sauc PILNĀ TEKSTS indeksus MySQL.

No otras puses, ja reizēm nepieciešams arī brīvas formas dokuments, MySQL un daudzas citas relāciju datu bāzes atbalsta arī JSON datus, kā noteikts RFC 7159. Un, ja vēlaties izmantot arī XML dokumentus un XPath vai XSLT, lielākā daļa relāciju datu bāzu nodrošina šo spēju.

Kad jūs vēlaties tādu dokumentu datu bāzi kā MongoDB? Ja jūsu primārā lietojuma gadījumam ir jāatļauj brīvas formas dati, lauki, kas maina tipus no dokumenta uz dokumentu, shēma, kas mainās laika gaitā, vai ligzdoti dokumenti, tad NoSQL datu bāze izpildīs prasības. Turklāt, ja jūsu lietojumprogramma ir rakstīta JavaScript valodā, tad dokumentu datubāzu JSON formāts būs dabisks veids.