Programovanie

MongoDB vs. MySQL: Ako si vybrať

Počas bubliny dot-com v 90. rokoch bol jedným spoločným softvérovým balíkom pre webové aplikácie LAMP, ktorý pôvodne znamenal Linux (OS), Apache (webový server), MySQL (relačná databáza) a PHP (programovací jazyk servera). MySQL bola preferovanou databázou hlavne preto, že bola zadarmo otvoreným zdrojom a mala dobrý výkon pri čítaní, čo sa dobre hodilo k aplikáciám „Web 2.0“, ktoré dynamicky generovali stránky z databázy.

Neskôr sa dostal do popredia zásobník MEAN, ktorý označoval MongoDB (databáza dokumentov), ​​Express (webový server), AngularJS (front-end framework) a Node.js (back-endový runtime JavaScript). Zásobník MEAN bol atraktívny okrem iného aj preto, že jediný jazyk, ktorý ste potrebovali vedieť, bol JavaScript. Potreboval tiež menej RAM ako ekvivalentný zásobník LAMP.

Čo je MySQL / MariaDB?

Monty Widenius a David Axmark z MySQL AB pôvodne vyvinuli MySQL od roku 1994. „My“ v názve produktu odkazuje na Wideniusovu dcéru, nie na anglické slovo „my“. MySQL bol navrhnutý tak, aby bol kompatibilný s API s mSQL (aka Mini SQL), s pridaním vrstvy dotazu SQL a licencie open source (vlastne dvojitá licencia, vlastná aj GPL). Verejné vydania MySQL začali na konci roka 1996 a pokračovali každý rok alebo dva. MySQL je v súčasnosti najpopulárnejšia relačná databáza.

Spoločnosť Sun Microsystems získala MySQL AB v roku 2008 (za 1 miliardu dolárov) a spoločnosť Oracle získala spoločnosť Sun v roku 2010. Widenius rozdvojil MySQL 5.5 do MariaDB tesne pred akvizíciou spoločnosti Oracle, a to kvôli rozšíreným obavám o zámery spoločnosti Oracle pre MySQL. MariaDB sa veľmi snažila udržiavať kompatibilitu s verziami Oracle MySQL.

MySQL začínala ako pomerne low-endová relačná databáza v porovnaní s výkonnejšími komerčnými relačnými databázami, ako sú Oracle Database, IBM DB / 2 a Microsoft SQL Server, aj keď to bolo dosť dobré na to, aby slúžilo ako podpora pre dynamické webové stránky. V priebehu rokov pridala väčšinu funkcií, ktoré od relačnej databázy očakávate, vrátane transakcií, obmedzení referenčnej integrity, uložených procedúr, kurzorov, fulltextového indexovania a vyhľadávania, geografického indexovania a vyhľadávania a klastrovania.

MySQL sa stále zvyčajne používa v malých a stredných nasadeniach, aj keď teraz podporuje funkcie „veľkej databázy“, ako sú nasadenia typu master-slave, použitie s Memcached a horizontálne rozdelenie. Škálovanie MySQL na viacerých otrokov zlepšuje výkon čítania, ale iba hlavný prijíma požiadavky na zápis.

AWS ponúka MySQL ako službu v dvoch príchutiach, Amazon RDS a Amazon Aurora. Druhá z nich má oveľa vyšší výkon, dokáže spracovať terabajty dát, má kratšiu dobu oneskorenia pri aktualizácii replík a priamo konkuruje databázam Oracle Database a SQL Server.

Čo je MongoDB?

MongoDB je vysoko škálovateľná, operatívna databáza dokumentov, ktorá je k dispozícii v otvorenej aj komerčnej podnikovej verzii a môže byť spustená lokálne alebo ako spravovaná cloudová služba. Spravovaná cloudová služba sa volá MongoDB Atlas.

MongoDB je zďaleka najobľúbenejší z NoSQL databáz. Jeho dátový model dokumentov poskytuje vývojárom veľkú flexibilitu, zatiaľ čo jeho distribuovaná architektúra umožňuje veľkú škálovateľnosť. Výsledkom je, že MongoDB sa často vyberá pre aplikácie, ktoré musia spravovať veľké objemy dát, ktoré využívajú výhody horizontálnej škálovateľnosti a ktoré spracúvajú dátové štruktúry, ktoré sa nehodia k relačnému modelu.

MongoDB je obchod založený na dokumentoch, ktorý má navyše implementovaný aj obchod založený na grafoch. MongoDB v skutočnosti neukladá JSON: ukladá BSON (binárne JSON), ktoré rozširujú reprezentáciu JSON (reťazce) o ďalšie typy, ako sú int, long, date, floating point, decimal128 a geopriestorové súradnice.

MongoDB môže generovať multimodálne grafy, geopriestorové indexy, B-stromy a fulltextové indexy na jednej kópii údajov, pričom pomocou typu údajov vygeneruje správny typ indexu. MongoDB vám umožňuje vytvárať indexy v ľubovoľnom poli dokumentu. MongoDB 4 má transakcie s viacerými dokumentmi, čo znamená, že stále môžete získať vlastnosti KYSELINY, aj keď musíte normalizovať návrh svojich údajov.

MongoDB štandardne používa dynamické schémy, ktoré sa niekedy nazývajú aj bez schémy. Dokumenty v jednej kolekcii nemusia mať rovnakú sadu polí a dátový typ pre pole sa môže v rámci dokumentov v kolekcii líšiť. Štruktúry dokumentov môžete dynamickými schémami kedykoľvek zmeniť.

K dispozícii je však správa schém. Počnúc MongoDB 3.6 podporuje MongoDB overenie schémy JSON, ktoré môžete zapnúť vo svojom výraze validátora.

LAMPA a ZNAMENA stohy

V zásobníkoch LAMP a MEAN existuje veľa variácií. Namiesto OS Linux môžete napríklad bežať na Windows (WAMP) alebo MacOS (MAMP). Namiesto webového servera Apache v systéme Windows môžete spustiť IIS (WIMP).

Namiesto relačnej databázy MySQL v zásobníku LAMP môžete spustiť PostgreSQL alebo SQL Server. Ak potrebujete globálnu distribúciu, môžete spustiť CockroachDB alebo Google Cloud Spanner. Namiesto jazyka PHP môžete programovať v Perle alebo Pythone. Ak chcete kódovať v prostredí Java alebo C #, musíte vziať do úvahy samostatné rodiny zásobníkov.

Namiesto databázy dokumentov MongoDB v zásobníku MEAN môžete pre lepšiu globálnu distribúciu spustiť Couchbase alebo Azure Cosmos DB. Namiesto Expressu môžete použiť ktorýkoľvek z tuctu rámcov webového servera Node.js. Namiesto front-endového rozhrania AngularJS môžete spustiť Angular 2 alebo React.

Ako si vybrať databázu pre svoju aplikáciu

Najdôležitejšie otázky, ktoré si musíte položiť pri výbere databázy, sú:

  • Koľko dát sa podľa očakávania uložíte, keď bude aplikácia vyspelá?
  • Koľko používateľov očakávaš, že zvládnu súčasne pri špičkovej záťaži?
  • Akú dostupnosť, škálovateľnosť, latenciu, priepustnosť a konzistenciu údajov potrebuje vaša aplikácia?
  • Ako často sa budú meniť vaše databázové schémy?
  • Aké je geografické rozdelenie vašej populácie používateľov?
  • Aký je prirodzený „tvar“ vašich údajov?
  • Potrebuje vaša aplikácia online spracovanie transakcií (OLTP), analytické dotazy (OLAP) alebo oboje?
  • Aký pomer čítaní k zápisom očakávate vo výrobe?
  • Potrebujete geografické alebo fulltextové dotazy?
  • Aké sú vaše preferované programovacie jazyky?
  • Máte rozpočet? Ak áno, bude sa to týkať licencií a zmlúv o podpore?

Niekoľko z týchto otázok bude mať tendenciu zužovať výber databázy, ale máme k dispozícii oveľa viac možností, ako keď bol formulovaný zásobník LAMP. Ak vytvárate aplikáciu, ktorá musí byť 99,999 percenta času dostupná používateľom na celom svete, so silnou konzistenciou, na účet sa zmestí iba niekoľko databáz. Ak bude vaša žiadosť použitá v jednej krajine od 9:00 do 18:00 v pracovných dňoch a dokáže tolerovať prípadnú konzistenciu, bude fungovať takmer každá databáza, aj keď niektoré budú jednoduchšie pre vývojárov a operátorov a niektoré vám poskytnú lepší výkon pre vaše primárne scenáre použitia.

Aj keď boli balíčky LAMP a MEAN dobrým riešením pre webové aplikácie naraz, ani jeden z nich nie je teraz optimálny. Namiesto slepého prijatia jedného alebo druhého by ste sa mali zamyslieť nad prípadmi použitia a nájsť architektúru, ktorá bude v blízkej budúcnosti slúžiť vašej aplikácii.

SQL alebo NoSQL?

Kedy chcete pre novú aplikáciu relačnú databázu, ako je MySQL? Okrem zrejmej podpory pre štandardné SQL, relačné databázy samy o sebe nútia dáta do tabuľkovej schémy s konzistentným silným typizovaním polí a pomáhajú vám vyhnúť sa duplikácii údajov, pokiaľ využijete výhody normalizácie.

Ak sa chcete vyhnúť chýbajúcim údajom, môžete vyhlásiť polia NIE NULL pri vytváraní alebo úprave tabuliek. Ak potrebujete geografické dotazy definované v Open Geospatial Consortium, väčšina relačných databáz poskytuje robustnú implementáciu. A ak potrebujete fulltextové vyhľadávanie, väčšina relačných databáz vám umožňuje definovať indexy obráteného zoznamu v textových poliach, tzv FULLTEXT indexy v MySQL.

Na druhej strane, ak potrebujete aj príležitostný dokument vo voľnom formáte, MySQL a mnoho ďalších relačných databáz podporuje aj údaje JSON definované v RFC 7159. A ak tiež chcete používať dokumenty XML a XPath alebo XSLT, väčšina relačných databáz poskytuje túto schopnosť.

Kedy by ste chceli databázu dokumentov, ako je MongoDB? Ak váš primárny prípad použitia musí umožňovať údaje vo voľnom formáte, polia, ktoré menia typy z dokumentu na dokument, schému, ktorá sa časom mení, alebo vnorené dokumenty, potom bude databáza NoSQL spĺňať požiadavky. Ak je navyše vaša aplikácia napísaná v JavaScripte, formát JSON databáz dokumentov bude prirodzene vyhovovať.