GNU/Linux >> Znalost Linux >  >> Linux

MongoDB vs. MySQL

Úvod

Široká škála nabízených systémů pro správu databází (DBMS) je nepochybně dobrá věc. Znamená to však také, že výběr správného databázového systému pro vaše potřeby vyžaduje více než pouhou nejoblíbenější možnost.

Od rozdílů v transakčním modelu až po kvalitu podpory, DBMS přicházejí ve všech tvarech a velikostech.

V tomto srovnávacím článku se dočtete o rozdílech mezi dvěma oblíbenými řešeními DBMS:MongoDB a MySQL.

Co je MongoDB?

MongoDB je multiplatformní systém správy databází NoSQL, jako je Cassandra nebo Redis. Na rozdíl od těchto systémů je však MongoDB orientován na dokumenty. Jako umístění pro své úložiště dokumentů využívá dokumenty podobné JSON nazývané soubory BSON. Protože soubor BSON je modifikací formátu JSON, MongoDB je plně kompatibilní s JavaScript Object Notation.

Další důležitou vlastností MongoDB je, že je bez schémat. Nevyžaduje definování pevné struktury během vytváření dokumentu a výrazně usnadňuje pozdější změnu struktury záznamu.

Vývoj MongoDB začal v roce 2007 a v roce 2009 se stal open-source. Společnost MongoDB Inc., která za softwarem stojí, nabízí pro systém komerční podporu.

V době psaní tohoto článku je nejnovější vydání MongoDB 4.4.3 z prosince 2020.

Co je MySQL?

MySQL je systém pro správu relačních databází (RDBMS). Jedná se o open-source implementaci SQL, Structured Query Language. Relační databáze jako MySQL, Oracle nebo PostgreSQL jsou podobné, protože organizují data v tabulkách. Tyto tabulky obsahují související datové typy, které pomáhají strukturovat data.

MySQL ukládá související data v libovolném počtu samostatných tabulek. Dotazování a korelování dat z těchto tabulek usnadňují operace JOIN, které umožňují vytváření dočasných tabulek a sad řádků pomocí dat z více tabulek.

Oracle je společnost, která vlastní a nabízí podporu pro MySQL. V době psaní tohoto článku je nejnovější stabilní verze MySQL 5.7.32 z října 2020.

MongoDB vs. MySQL:Přehled srovnání

MongoDB a MySQL jsou dva zásadně odlišné systémy pro správu databází. Jejich srovnání je užitečné, protože jsou dobrými představiteli svých příslušných manažerských filozofií. Další informace najdete v tématu NoSQL vs. SQL.

Níže uvedená tabulka představuje přímé srovnání základních aspektů obou DBMS.

MongoDB MySQL
Typ databáze Dokumentově orientovaný NoSQL Relační DBMS
Programovací jazyk C++, C, JavaScript C++, C
Schéma Dynamické Statické
Ukládání dat BSON (formát podobný JSON) Tabulky (řádky a sloupce)
Jazyk dotazu MQL (výchozí), ale funguje v mnoha jazycích SQL
MapReduce Ano Ne
Konverze databáze Ano Ne
Analýza výkonu Ano Ne
Model transakce BASE KYSELINA
Izolace Ne Ano
Referenční integrita Ne Ano
Složité transakce Ne Ano
Škálování Horizontální Vertikální
Lokalita dat Ano Ne
Automatické sdílení Ano Ne
Režim replikace Master-Slave Mistr-Slave, Master-Master

Následuje podrobný přehled nejvýznamnějších oblastí srovnání pro MongoDB a MySQL.

Struktura databáze (schéma)

MongoDB :MongoDB ukládá data do dokumentů. Tyto dokumenty mají různé struktury v závislosti na požadavcích databáze. Systém ukládá související data společně pro usnadnění rychlého dotazování.

Flexibilita přístupu orientovaného na dokumenty v MongoDB je jednou z jeho největších výhod ve srovnání s MySQL a dalšími relačními DBMS. MongoDB nepotřebuje, aby bylo před povolením vstupu dat deklarováno schéma tabulky.

Kolekce dokumentů MongoDB může obsahovat dokumenty s různými sadami polí. Typ dat pole se také může v různých dokumentech lišit. Přidání nebo odebrání polí v dokumentu se provádí jednoduchou aktualizací struktury dokumentu. Totéž platí pro změnu typů dat pole.

Operace zápisu v MongoDB je atomická na úrovni dokumentu. To platí i v případech, kdy operace ovlivňuje více vložených dokumentů. Operace zápisu s více dokumenty udržují atomičnost na úrovni dokumentu, ale samy o sobě atomické nejsou.

MongoDB podporuje transakce s více dokumenty na sadách replik a sdílených clusterech.

MySQL :Data v MySQL jsou uložena v tabulkách, které se vytvářejí před přidáním jakýchkoli dat. Každá databázová tabulka se skládá z řádků a sloupců. Řádky představují databázové entity a sloupce poskytují informace o entitách.

Statická schémata definují strukturu databáze a vyžadují, aby všechny řádky měly stejnou strukturu. MySQL má pevný limit 4096 sloupců na tabulku a maximální velikost řádku 65 535 bajtů.

Systémové schéma se skládá z tabulek obsahujících informace nezbytné pro nepřetržitou funkci serveru MySQL. Tyto informace zahrnují tabulky datového slovníku s metadaty databázových objektů a další tabulky operačního systému.

Vzhledem k rigiditě architektury MySQL vyžaduje vytváření a správa databáze mnoho plánování dopředu, aby byl zachován vysoký výkon, když databáze začne růst.

Optimalizace indexu

MongoDB :MongoDB používá k optimalizaci indexy. Bez indexů MongoDB prochází každý dokument v kolekci, aby našel shodu pro dotaz.

MySQL :Stejně jako MongoDB využívá MySQL indexy k optimalizaci dotazování. Pokud pro konkrétní dotaz neexistují žádné relevantní indexy, MySQL prohledá celou tabulku.

Nasazení databáze

MongoDB :Uživatelé mohou nativně nasadit MySQL na Microsoft Windows, OS X, Linux a Solaris. MongoDB se také dobře hodí pro distribuovaná prostředí, jako jsou kontejnery Docker.

MySQL :MySQL má binární soubory pro různé operační systémy, jako je Microsoft Windows, OS X, Linux, FreeBSD, NetBSD, Solaris atd. Oficiálně udržované obrazy MySQL Docker jsou vytvořeny pouze pro platformy Linux.

Dotazovací jazyk

MongoDB :Motor MongoDB může komunikovat s mnoha různými programovacími jazyky v závislosti na preferencích programátora. Po vybalení však MongoDB používá MQL (MongoDB Query Language).

MQL je jazyk podobný SQL navržený pro dotazování nestrukturovaných dat. Dotazy v MongoDB jsou založeny na JavaScriptu.

Takto se například vytváří kolekce v MongoDB:

db.fruit.insertMany([
   { item: "apple", qty: 2, color: “red”, status: "A" },
   { item: "pear", qty: 5, color: “yellow”, status: "A" },
   { item: "cherry", qty: 4, color: “red”, status: "A" }
]);

Dotazování na kolekci se provádí pomocí find příkaz:

db.fruit.find( { color: "red" } )

MySQL :Stejně jako mnoho RDBMS používá MySQL SQL. Příklad syntaxe používá data z příkladu MQL výše.

Nejprve musí uživatelé MySQL vytvořit tabulku:

CREATE TABLE IF NOT EXISTS `fruit` (
  `item` varchar(200) NOT NULL,
  `qty` int(3) unsigned NOT NULL,
  `color` varchar(200) NOT NULL,
  `status` varchar(200) NOT NULL,
  PRIMARY KEY (`qty`)
) DEFAULT CHARSET=utf8;

Dále je tabulka naplněna daty:

INSERT INTO `fruit` (`item`, `qty`, `color`, `status`) VALUES
  ('apple', '2', 'red', 'A'),
  ('pear', '5', 'yellow', 'A'),
  ('cherry', '4', 'red', 'A');

Vytvoření zobrazení pro filtrování dat:

CREATE VIEW red_fruit AS SELECT item FROM fruit WHERE color = 'red';

Jakmile schéma existuje, dotazování tabulky se provede pomocí SELECT prohlášení:

SELECT * FROM red_fruit;

Replikace a shlukování dat

MongoDB :Účelem replikace dat je nabídnout kontinuitu podnikání a dostupnost dat. MongoDB uchovává několik replik dat na izolovaných serverech. Tato replikace pomáhá předcházet ztrátě dat kvůli nepředvídaným okolnostem, jako jsou pády serveru, výpadky napájení atd.

Sada replik je sada instancí mongodů spravujících stejnou sadu dat. Jedná se o primární proces démona MongoDB, mongod spravuje požadavky na data, řídí přístup k datům a provádí operace na pozadí. Sada replik se skládá z několika datových uzlů, kde jeden je primární uzel, který zpracovává všechny operace zápisu, zatímco ostatní jsou sekundární.

Kdykoli je iniciována sada replik nebo dojde ke změně v sadě související s počtem uzlů, jako je přidání nového uzlu nebo ztráta spojení s primárním uzlem na delší dobu, než je povoleno, systém spustí automatické volby . Účelem voleb je určit, zda má aktuální primární datový uzel zůstat primární.

MongoDB také podporuje sharding , který umožňuje horizontální škálování prostřednictvím shlukování střepů. Sharding je metoda distribuce dat mezi více počítačů, která umožňuje čtení a zápis dat podél řady uzlů. Žádný uzel nespravuje celá data, takže jsou data distribuována napříč všemi uzly ve fragmentu.

Při práci s velkými datovými sadami a vysokou propustností pomáhá sharding snížit zatížení jednoho serveru a umožňuje škálování přidáním nebo odebráním serverů v závislosti na potřebě.

MySQL :MySQL podporuje následující typy replikace:

  • Asynchronní replikace master-slave, kde proces přechází z jednoho masteru na libovolný počet slave zařízení a naopak. Master nečeká, až podřízené jednotky potvrdí příjem události. Změny v databázi jsou zařazeny do fronty a zapsány později.
  • Semisynchronní replikace master-slave, přičemž master čeká na replikaci pouze na jednu slave, aby potvrdil příjem události.
  • Synchronní multi-master replikace, která umožňuje ukládat data na více počítačích a aktualizovat je kterýmkoli členem skupiny. Všichni otroci musí potvrdit příjem událostí.

I když MySQL samo o sobě nepodporuje automatické sharding a clustering, uživatelé mohou získat některé funkce prostřednictvím technologie MySQL Cluster.

Zabezpečení

MongoDB :MongoDB používá ověřování založené na rolích. Mezi další funkce zabezpečení patří auditování a autorizace a podpora TLS a SSL pro účely šifrování.

Hlavní výhodou MongoDB oproti MySQL je odolnost vůči útokům SQL injection. SQL injection je chyba zabezpečení umožňující útočníkovi získat přístup k databázovým dotazům vytvořeným aplikací. Útočník může tuto chybu zabezpečení využít k získání přístupu k datům aplikace, k jejich úpravě nebo odstranění. Injekce SQL může dokonce ohrozit samotný server.

Vzhledem k tomu, že architektura MongoDB používá k vysvětlení dotazu dokumenty podobné JSON a že dotazy jsou reprezentovány jako zabezpečené objekty Binary JSON (BSON), přímé vkládání řetězců je nemožné.

MySQL :MySQL používá model zabezpečení založený na oprávněních. Každý uživatel je ověřen a má specifická oprávnění k vytváření, dotazování nebo úpravě tabulek. SSL poskytuje šifrování připojení.

Útoky SQL injection jsou největší zranitelností MySQL. Existují však určitá opatření, která lze přijmout za účelem snížení rizika útoku, jako je použití parametrizovaných dotazů namísto zřetězeného uživatelského vstupu. To je zvláště důležité v WHERE klauzule a INSERT nebo UPDATE prohlášení.

Škálovatelnost

MongoDB :Horizontální škálování je jednou z hlavních výhod MongoDB ve srovnání s MySQL. Pomocí klastrování fragmentů MongoDB distribuuje data mezi počítače, což pomáhá případům použití, které zahrnují práci s velkými soubory dat.

MySQL :Jak je uvedeno výše, MySQL nepodporuje sharding ihned po vybalení. Škálování databáze v MySQL (a mnoha dalších populárních řešeních RDBMS) vyžaduje buď změnu aplikace využívající databázi, nebo umožnění výpadku, dokud nebude migrace na větší server dokončena.

Rychlost a výkon

MongoDB :Jako NoSQL databáze je MongoDB rychlejší než MySQL díky svému dotazovacímu modelu, který umožňuje variace v závislosti na typu a velikosti práce. Rychlost MongoDB je zvláště zřejmá ve scénářích, které zahrnují velké databáze.

MySQL :Zatímco MySQL je pomalejší z těchto dvou, jeho výkon lze výrazně zlepšit vyladěním.

Podpora a dokumentace

MongoDB :MongoDB Inc. nabízí 24/7 Enterprise-Grade podporu a doplněk pro prodlouženou podporu životního cyklu. Podpora zahrnuje bohatou znalostní základnu, verze údržby, aktualizace, záplaty a opravy chyb. MongoDB je novějším hráčem na trhu a má menší online komunitu než MySQL.

MySQL :Jako produkt Oracle nabízí MySQL nepřetržitou doživotní podporu Oracle ve třech úrovních:Premier podpora zahrnuje verze staré až 5 let, rozšířená úroveň je pro verze mezi 6 a 8 lety, zatímco Sustain podporuje všechny verze starší než osm let. . Velmi aktivní online komunita pomáhá uživatelům rychle najít řešení mnoha problémů.

Případy použití

MongoDB :MongoDB, stejně jako ostatní řešení NoSQL, funguje nejlépe v případech použití, které vyžadují flexibilní a plynulý způsob manipulace s daty, jako jsou:

  • Analytika v reálném čase
  • Datové sklady
  • Mobilní aplikace
  • Systémy správy obsahu

Seznam společností, které používají MongoDB ve svých technologických sadách, zahrnuje Lyft, Adobe, Codecademy atd.

MySQL :Instituce, které se zabývají finančními transakcemi a dalšími vyžadujícími soulad s ACID, volí MySQL před MongoDB. Seznam společností používajících MySQL je delší a zahrnuje Airbnb, Netflix, Amazon, Shopify atd.

Je důležité poznamenat, že některé společnosti, jako je Uber, používají MongoDB i MySQL pro různé scénáře použití v rámci společnosti.

Jak si vybrat?

Ve srovnání mezi MongoDB a MySQL neexistuje jasný vítěz, protože tyto dva systémy pro správu databází se zabývají dvěma výrazně odlišnými oblastmi. Výběr správného řešení vyžaduje pečlivou analýzu konkrétních potřeb.

Vyberte MongoDB pokud potřebujete:

  • Zvýšení dostupnosti – Technologie replikace dat MongoDB a použití více uzlů pro ukládání dat zajišťuje vyšší dostupnost. MySQL dokáže replikovat data i mezi uzly, ale tento proces je složitý a časově náročný.
  • Urychlení vývoje – flexibilita formátu JSON je výhodná zejména pro vývojáře aplikací, kteří preferují reprezentaci dat v polích a vnořených dokumentech spíše než v pevných řádcích a sloupcích.
  • Vodorovné měřítko – MongoDB umožňuje horizontální škálování bez provádění změn v aplikaci nebo prostojů.

Vyberte MySQL pokud:

  • Řeďte se bezpečnými peněžními transakcemi – S transakcemi MySQL se zachází jako s jednotlivými jednotkami a nevyčistí se, dokud není úspěšně dokončena každá jednotlivá provozní fáze. Pokud některá z fází selže, selže celá operace. Tato funkce MySQL zajišťuje integritu dat nezbytnou pro finanční transakce.
  • Potřebujete komplexní transakční podporu – Transakce MySQL se řídí standardem ACID, což znamená, že jsou atomické, konzistentní, izolované a odolné.
  • Potřebujete lepší podporu – MySQL existuje mnohem déle než MongoDB, takže hledání řešení běžných problémů na internetu je mnohem snazší, pokud používáte MySQL. Na vyšší úrovni vyžaduje správa databáze NoSQL, jako je MongoDB, více technických znalostí než v případě MySQL.

Linux
  1. Nainstalujte MariaDB nebo MySQL na Linux

  2. Záloha MySQL 1.2 (MySQL 5.5+)

  3. Zálohování MySQL 1.1

  1. Optimalizujte databázi MySQL

  2. Oprava databází MySQL InnoDB

  3. O MySQL

  1. Nakonfigurujte replikaci zdroje MySQL

  2. Zrušte tabulky v MySQL

  3. Importujte databázi MySQL