Programování

MongoDB vs. MySQL: Jak si vybrat

Během bubliny dot-com v 90. letech byl jedním běžným softwarovým zásobníkem pro webové aplikace LAMP, který původně znamenal Linux (OS), Apache (webový server), MySQL (relační databáze) a PHP (programovací jazyk serveru). MySQL byla upřednostňovanou databází hlavně proto, že byla bezplatným otevřeným zdrojovým kódem a měla dobrý čtecí výkon, což dobře vyhovovalo aplikacím „Web 2.0“, které dynamicky generovaly weby z databáze.

Později se dostalo do popředí zásobník MEAN, který zastupoval MongoDB (databáze dokumentů), Express (webový server), AngularJS (front-end framework) a Node.js (back-end runtime JavaScriptu). Zásobník MEAN byl atraktivní mimo jiné i proto, že jediným jazykem, který jste potřebovali znát, byl JavaScript. Také potřeboval méně RAM než ekvivalentní LAMP stack.

Co je MySQL / MariaDB?

Monty Widenius a David Axmark z MySQL AB původně vyvinuli MySQL od roku 1994. „My“ v názvu produktu odkazuje na Wideniusovu dceru, nikoli na anglické slovo „my“. MySQL byl navržen tak, aby byl kompatibilní s API s mSQL (aka Mini SQL), s přidáním vrstvy dotazu SQL a licence open source (vlastně duální licence, jak proprietární, tak GPL). Veřejná vydání MySQL byla zahájena na konci roku 1996 a pokračovala každý rok nebo dva. MySQL je v současnosti nejoblíbenější relační databáze.

Sun Microsystems koupil MySQL AB v roce 2008 (za 1 miliardu USD) a Oracle koupil Sun v roce 2010. Widenius rozdvojil MySQL 5.5 do MariaDB těsně před akvizicí Oracle, a to kvůli rozšířenému znepokojení nad záměry Oracle pro MySQL. MariaDB se velmi snažila udržovat kompatibilitu s verzemi Oracle MySQL.

MySQL začínal jako poměrně nízká relační databáze ve srovnání s výkonnějšími komerčními relačními databázemi, jako jsou Oracle Database, IBM DB / 2 a Microsoft SQL Server, ačkoli to bylo dost dobré na to, aby bylo záložním úložištěm pro dynamické webové stránky. V průběhu let přidal většinu funkcí, které očekáváte od relační databáze, včetně transakcí, omezení referenční integrity, uložené procedury, kurzory, fulltextové indexování a vyhledávání, geografické indexování a vyhledávání a shlukování.

MySQL se stále obvykle používá v malých a středních implementacích, i když nyní podporuje funkce „velké databáze“, jako jsou implementace typu master-slave, použití s ​​Memcached a horizontální dělení. Škálování MySQL na více podřízených zvyšuje výkon čtení, ale pouze hlavní přijímá požadavky na zápis.

AWS nabízí MySQL jako službu ve dvou variantách, Amazon RDS a Amazon Aurora. Ten má mnohem vyšší výkon, dokáže zpracovat terabajty dat, má nižší zpoždění pro aktualizaci replik a přímo soutěží s Oracle Database a SQL Server.

Co je MongoDB?

MongoDB je vysoce škálovatelná operační databáze dokumentů dostupná ve verzích open source i komerčních podniků a lze ji provozovat v prostorách nebo jako spravovaná cloudová služba. Spravovaná cloudová služba se nazývá MongoDB Atlas.

MongoDB je zdaleka nejoblíbenější databází NoSQL. Jeho datový model dokumentů poskytuje vývojářům velkou flexibilitu, zatímco jeho distribuovaná architektura umožňuje velkou škálovatelnost. Výsledkem je, že MongoDB se často volí pro aplikace, které musí spravovat velké objemy dat, které těží z horizontální škálovatelnosti a které zpracovávají datové struktury, které se nehodí k relačnímu modelu.

MongoDB je obchod založený na dokumentech, který má také implementovaný obchod založený na grafech. MongoDB ve skutečnosti neukládá JSON: ukládá BSON (binární JSON), který rozšiřuje reprezentaci JSON (řetězce) o další typy, jako jsou int, long, date, floating point, decimal128 a geospatial Coordinates.

MongoDB může generovat multimodální grafy, geoprostorové indexy, B-stromy a fulltextové indexy na jedné kopii dat, přičemž pomocí typu dat vygeneruje správný typ indexu. MongoDB umožňuje vytvářet indexy v libovolném poli dokumentu. MongoDB 4 má transakce s více dokumenty, což znamená, že stále můžete získat vlastnosti KYSELINY, i když musíte normalizovat návrh dat.

Ve výchozím nastavení používá MongoDB dynamická schémata, někdy nazývaná bez schémat. Dokumenty v jedné kolekci nemusí mít stejnou sadu polí a datový typ pro pole se může u různých dokumentů v kolekci lišit. Struktury dokumentu můžete kdykoli změnit pomocí dynamických schémat.

Schéma řízení je však k dispozici. Počínaje MongoDB 3.6 podporuje MongoDB ověření schématu JSON, které můžete zapnout ve svém výrazu validátoru.

LAMPA a ZNAMENÁ hromádky

Spousta variací na LAMP a MEAN stacky existuje. Místo OS Linux můžete například běžet na Windows (WAMP) nebo MacOS (MAMP). Místo webového serveru Apache ve Windows můžete spustit IIS (WIMP).

Místo relační databáze MySQL v zásobníku LAMP můžete spustit PostgreSQL nebo SQL Server. Pokud potřebujete globální distribuci, můžete spustit CockroachDB nebo Google Cloud Spanner. Místo jazyka PHP můžete kódovat v Perlu nebo Pythonu. Pokud chcete kódovat v Javě nebo C #, je třeba vzít v úvahu samostatné rodiny zásobníků.

Místo databáze dokumentů MongoDB v zásobníku MEAN můžete spustit Couchbase nebo Azure Cosmos DB pro lepší globální distribuci. Místo Express můžete použít kterýkoli z tuctu rámců webového serveru Node.js. Místo rozhraní AngularJS front-end můžete spustit Angular 2 nebo React.

Jak vybrat databázi pro vaši aplikaci

Nejdůležitější otázky, které si musíte položit při výběru databáze, jsou:

  • Kolik dat očekáváte, že uložíte, až bude aplikace zralá?
  • Kolik uživatelů očekáváte, že zvládnete současně při špičkovém zatížení?
  • Jakou dostupnost, škálovatelnost, latenci, propustnost a konzistenci dat vaše aplikace potřebuje?
  • Jak často se vaše databázová schémata změní?
  • Jaké je geografické rozložení populace uživatelů?
  • Jaký je přirozený „tvar“ vašich dat?
  • Vyžaduje vaše aplikace online zpracování transakcí (OLTP), analytické dotazy (OLAP) nebo obojí?
  • Jaký poměr čtení a zápisu očekáváte ve výrobě?
  • Potřebujete geografické dotazy nebo fulltextové dotazy?
  • Jaké jsou vaše preferované programovací jazyky?
  • Máte rozpočet? Pokud ano, pokryje to licence a smlouvy o podpoře?

Několik z těchto otázek bude mít tendenci zúžit výběr databáze, ale máme k dispozici mnohem více možností, než když byl formulován zásobník LAMP. Pokud vytváříte aplikaci, která musí být 99,999 procenta času k dispozici uživatelům po celém světě, se silnou konzistencí, na účet se vejde jen několik databází. Pokud bude vaše aplikace použita v jedné zemi od 9:00 do 18:00 ve všední dny a může tolerovat případnou konzistenci, bude fungovat téměř každá databáze, i když některé budou pro vývojáře a operátory jednodušší a některé vám poskytnou lepší výkon pro vaše primární scénáře použití.

Zatímco hromádky LAMP a MEAN byly dobrým řešením pro webové aplikace najednou, ani jeden z nich není nyní optimální. Spíše než slepě přijímat jeden nebo druhý, měli byste si promyslet své případy použití a najít architekturu, která bude sloužit vaší aplikaci v dohledné budoucnosti.

SQL nebo NoSQL?

Kdy chcete pro novou aplikaci relační databázi, jako je MySQL? Kromě zřejmé podpory pro standardní SQL, relační databáze samy o sobě nutí data do tabulkového schématu s konzistentním silným typováním polí a pomáhají vám vyhnout se duplikaci dat, pokud využijete výhody normalizace.

Pokud se potřebujete vyhnout chybějícím údajům, můžete deklarovat pole NENULOVÝ při vytváření nebo úpravách tabulek. Pokud potřebujete geografické dotazy definované v Open Geospatial Consortium, většina relačních databází poskytuje robustní implementaci. A pokud potřebujete fulltextové vyhledávání, většina relačních databází vám umožňuje definovat indexy obráceného seznamu v textových polích, tzv CELÝ TEXT indexy v MySQL.

Na druhou stranu, pokud potřebujete také příležitostný dokument ve volném formátu, MySQL a mnoho dalších relačních databází také podporuje data JSON, jak jsou definována v RFC 7159. A pokud také chcete použít dokumenty XML a XPath nebo XSLT, většina relačních databází poskytuje tu schopnost.

Kdy byste chtěli databázi dokumentů, jako je MongoDB? Pokud váš primární případ použití potřebuje povolit volná data, pole, která mění typy z dokumentu na dokument, schéma, které se mění v průběhu času, nebo vnořené dokumenty, pak databáze NoSQL splní požadavky. Kromě toho, pokud je vaše aplikace napsána v JavaScriptu, bude formát JSON databází dokumentů přirozeným způsobem.