GNU/Linux >> LINUX-Kenntnisse >  >> Linux

MongoDB vs. MySQL

Einführung

Das große Angebot an Datenbankmanagementsystemen (DBMS) ist zweifellos eine gute Sache. Es bedeutet jedoch auch, dass die Auswahl des richtigen Datenbanksystems für Ihre Anforderungen mehr erfordert, als nur die beliebteste Option zu wählen.

Von Unterschieden bei Transaktionsmodellen bis hin zur Qualität des Supports gibt es DBMSs in allen Formen und Größen.

In diesem Vergleichsartikel erfahren Sie mehr über die Unterschiede zwischen den beiden beliebten DBMS-Lösungen:MongoDB und MySQL.

Was ist MongoDB?

MongoDB ist ein plattformübergreifendes NoSQL-Datenbankverwaltungssystem, wie Cassandra oder Redis. Im Gegensatz zu diesen Systemen ist MongoDB jedoch dokumentenorientiert. Es verwendet JSON-ähnliche Dokumente, sogenannte BSON-Dateien, als Speicherorte für seine Dokumentenspeicher. Da die BSON-Datei eine Modifikation des JSON-Formats ist, ist MongoDB vollständig kompatibel mit JavaScript Object Notation.

Ein weiteres wichtiges Merkmal von MongoDB ist, dass es schemafrei ist. Es erfordert keine Festlegung einer festen Struktur während der Dokumentenerstellung und erleichtert die spätere Änderung der Datensatzstruktur erheblich.

Die Entwicklung von MongoDB begann 2007 und wurde 2009 Open Source. MongoDB Inc., das Unternehmen hinter der Software, bietet kommerziellen Support für das System an.

Zum Zeitpunkt der Erstellung dieses Artikels ist die neueste Version von MongoDB 4.4.3 vom Dezember 2020.

Was ist MySQL?

MySQL ist ein relationales Datenbankmanagementsystem (RDBMS). Es ist eine Open-Source-Implementierung von SQL, Structured Query Language. Relationale Datenbanken wie MySQL, Oracle oder PostgreSQL sind ähnlich, da sie Daten in Tabellen organisieren. Diese Tabellen enthalten verwandte Datentypen, die bei der Strukturierung von Daten helfen.

MySQL speichert zusammengehörige Daten in beliebig vielen separaten Tabellen. Das Abfragen und Korrelieren von Daten aus diesen Tabellen wird durch JOIN-Vorgänge erleichtert, die die Erstellung temporärer Tabellen und Zeilengruppen unter Verwendung von Daten aus mehreren Tabellen ermöglichen.

Oracle ist das Unternehmen, das MySQL besitzt und unterstützt. Zum Zeitpunkt der Erstellung dieses Artikels ist die neueste stabile Version von MySQL 5.7.32 vom Oktober 2020.

MongoDB vs. MySQL:Vergleichsübersicht

MongoDB und MySQL sind zwei grundlegend unterschiedliche Datenbankverwaltungssysteme. Ein Vergleich ist sinnvoll, weil sie gute Vertreter ihrer jeweiligen Managementphilosophie sind. Weitere Informationen finden Sie unter NoSQL Vs. SQL.

Die folgende Tabelle ist ein direkter Vergleich der wesentlichen Aspekte beider DBMS.

MongoDB MySQL
Datenbanktyp Dokumentorientiertes NoSQL Relationales DBMS
Programmiersprache C++, C, JavaScript C++, C
Schema Dynamisch Statisch
Datenspeicherung BSON (JSON-ähnliches Format) Tabellen (Zeilen und Spalten)
Abfragesprache MQL (Standard), funktioniert aber mit vielen Sprachen SQL
MapReduce Ja Nein
Datenbankkonvertierung Ja Nein
Leistungsanalyse Ja Nein
Transaktionsmodell BASIS SÄURE
Isolierung Nein Ja
Referentielle Integrität Nein Ja
Komplexe Transaktionen Nein Ja
Skalierung Horizontal Vertikal
Datenstandort Ja Nein
Automatisches Sharding Ja Nein
Replikationsmodus Master-Slave Master-Slave, Master-Master

Nachfolgend finden Sie eine detaillierte Übersicht über die wichtigsten Vergleichsbereiche für MongoDB und MySQL.

Datenbankstruktur (Schema)

MongoDB :MongoDB speichert Daten in Dokumenten. Je nach Anforderungen an die Datenbank haben diese Dokumente unterschiedliche Strukturen. Das System speichert zusammengehörige Daten, um eine schnelle Abfrage zu erleichtern.

Die Flexibilität des dokumentenorientierten Ansatzes in MongoDB ist einer der größten Vorteile im Vergleich zu MySQL und anderen relationalen DBMS. MongoDB muss kein Tabellenschema deklariert werden, bevor die Dateneingabe zugelassen wird.

Eine MongoDB-Dokumentensammlung kann Dokumente mit unterschiedlichen Sätzen von Feldern enthalten. Der Felddatentyp kann auch zwischen Dokumenten variieren. Das Hinzufügen oder Entfernen von Feldern innerhalb eines Dokuments erfolgt durch einfaches Aktualisieren der Dokumentstruktur. Dasselbe gilt für das Ändern von Felddatentypen.

Ein Schreibvorgang in MongoDB ist auf Dokumentebene atomar. Dies gilt auch in Fällen, in denen eine Operation mehrere eingebettete Dokumente betrifft. Schreibvorgänge für mehrere Dokumente behalten die Atomarität auf Dokumentebene bei, sind aber selbst nicht atomar.

MongoDB unterstützt Transaktionen mit mehreren Dokumenten auf Replikatsätzen und fragmentierten Clustern.

MySQL :Daten in MySQL werden in Tabellen gespeichert, die erstellt werden, bevor Daten hinzugefügt werden. Jede Datenbanktabelle besteht aus Zeilen und Spalten. Zeilen stellen Datenbankentitäten dar und Spalten liefern Informationen über die Entitäten.

Statische Schemas definieren die Datenbankstruktur und erfordern, dass alle Zeilen dieselbe Struktur haben. MySQL hat eine feste Grenze von 4096 Spalten pro Tabelle und eine maximale Zeilengröße von 65.535 Bytes.

Das Systemschema besteht aus Tabellen, die die Informationen enthalten, die für die unterbrechungsfreie Funktion des MySQL-Servers erforderlich sind. Zu diesen Informationen gehören Data-Dictionary-Tabellen mit Datenbankobjekt-Metadaten und andere Betriebssystemtabellen.

Aufgrund der Starrheit der MySQL-Architektur erfordert die Datenbankerstellung und -verwaltung viel Planung im Voraus, um eine hohe Leistung aufrechtzuerhalten, wenn die Datenbank zu wachsen beginnt.

Indexoptimierung

MongoDB :MongoDB verwendet Indizes zur Optimierung. Ohne Indizes durchsucht MongoDB jedes Dokument in einer Sammlung, um eine Übereinstimmung für eine Abfrage zu finden.

MySQL :Genau wie MongoDB verwendet MySQL Indizes, um Abfragen zu optimieren. Wenn es für eine bestimmte Abfrage keine relevanten Indizes gibt, durchsucht MySQL die gesamte Tabelle.

Datenbankbereitstellung

MongoDB :Benutzer können MySQL nativ auf Microsoft Windows, OS X, Linux und Solaris bereitstellen. MongoDB eignet sich auch gut für verteilte Umgebungen wie Docker-Container.

MySQL :MySQL hat Binärdateien für verschiedene Betriebssysteme wie Microsoft Windows, OS X, Linux, FreeBSD, NetBSD, Solaris usw. Die offiziell gewarteten MySQL-Docker-Images werden nur für Linux-Plattformen erstellt.

Abfragesprache

MongoDB Hinweis:Die Engine von MongoDB kann je nach Vorliebe des Programmierers mit vielen verschiedenen Programmiersprachen interagieren. Standardmäßig verwendet MongoDB jedoch MQL (MongoDB Query Language).

MQL ist eine SQL-ähnliche Sprache, die für die Abfrage unstrukturierter Daten entwickelt wurde. Abfragen in MongoDB basieren auf JavaScript.

So wird beispielsweise eine Sammlung in MongoDB erstellt:

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" }
]);

Das Abfragen einer Sammlung erfolgt mit find Befehl:

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

MySQL :Wie viele RDBMS verwendet MySQL SQL. Das Beispiel der Syntax verwendet die Daten aus dem obigen MQL-Beispiel.

Zunächst müssen MySQL-Benutzer eine Tabelle erstellen:

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;

Als nächstes wird die Tabelle mit Daten gefüllt:

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

Erstellen der Ansicht zum Filtern von Daten:

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

Sobald das Schema existiert, wird die Tabelle mit SELECT abgefragt Aussage:

SELECT * FROM red_fruit;

Datenreplikation und Clustering

MongoDB :Der Zweck der Datenreplikation besteht darin, Geschäftskontinuität und Datenverfügbarkeit zu bieten. MongoDB bewahrt mehrere Replikate von Daten auf isolierten Servern auf. Diese Replikation trägt dazu bei, Datenverluste aufgrund unvorhergesehener Umstände wie Serverabstürze, Stromausfälle usw. zu verhindern.

Ein Replikatsatz ist ein Satz von Mongod-Instanzen, die denselben Datensatz verwalten. mongod ist der primäre MongoDB-Daemon-Prozess verwaltet Datenanfragen, steuert den Datenzugriff und führt Hintergrundoperationen durch. Ein Replikatsatz besteht aus einer Reihe von Datenknoten, von denen einer der primäre Knoten ist, der alle Schreibvorgänge verarbeitet, während die anderen sekundär sind.

Immer wenn ein Replikatsatz initiiert wird oder sich der Satz in Bezug auf die Anzahl der Knoten ändert, z. B. das Hinzufügen eines neuen Knotens oder der Verbindungsverlust mit dem primären Knoten für mehr Zeit als zulässig, löst das System aus automatische Wahlen . Der Zweck von Wahlen besteht darin, zu bestimmen, ob der aktuelle primäre Datenknoten primär bleiben soll.

MongoDB unterstützt auch Sharding , die eine horizontale Skalierung durch Shard-Clustering ermöglicht. Sharding ist eine Methode zur Datenverteilung auf mehrere Computer, die das Lesen und Schreiben von Daten entlang einer Reihe von Knoten ermöglicht. Kein einzelner Knoten verwaltet die gesamten Daten, daher werden die Daten auf alle Knoten in einem Shard verteilt.

Beim Arbeiten mit großen Datensätzen und hohem Durchsatz hilft Sharding, die Last auf einem einzelnen Server zu verringern, und ermöglicht die Skalierung durch Hinzufügen oder Entfernen von Servern, je nach Bedarf.

MySQL :MySQL unterstützt standardmäßig die folgenden Replikationstypen:

  • Asynchrone Master-Slave-Replikation, bei der der Prozess von einem Master zu einer beliebigen Anzahl von Slaves und umgekehrt geht. Der Master wartet nicht darauf, dass die Slaves den Empfang des Ereignisses bestätigen. Die Änderungen an der Datenbank werden in die Warteschlange gestellt und zu einem späteren Zeitpunkt geschrieben.
  • Semisynchrone Master-Slave-Replikation, wobei der Master bei der Replikation darauf wartet, dass nur ein Slave den Empfang des Ereignisses bestätigt.
  • Synchrone Multi-Master-Replikation, wodurch Daten auf mehreren Computern gespeichert und von jedem Gruppenmitglied aktualisiert werden können. Alle Slaves müssen den Empfang von Ereignissen bestätigen.

Obwohl MySQL selbst kein automatisches Sharding und Clustering unterstützt, können Benutzer einige der Funktionalitäten über die MySQL-Cluster-Technologie erreichen.

Sicherheit

MongoDB :MongoDB verwendet eine rollenbasierte Authentifizierung. Zu den weiteren Sicherheitsfunktionen gehören Prüfung und Autorisierung sowie TLS- und SSL-Unterstützung für Verschlüsselungszwecke.

Der wichtigste sicherheitsbezogene Vorteil von MongoDB gegenüber MySQL ist seine Widerstandsfähigkeit gegen SQL-Injection-Angriffe. SQL-Injection ist eine Schwachstelle, die es einem Angreifer ermöglicht, Zugriff auf die Datenbankabfragen einer App zu erhalten. Der Angreifer kann diese Schwachstelle nutzen, um Zugriff auf App-Daten zu erhalten, diese zu ändern oder zu löschen. Eine SQL-Injection kann sogar den Server selbst kompromittieren.

Da die Architektur von MongoDB JSON-ähnliche Dokumente verwendet, um die Abfrage zu erklären, und dass Abfragen als sichere binäre JSON-Objekte (BSON) dargestellt werden, ist eine direkte Zeichenfolgeninjektion nicht möglich.

MySQL :MySQL verwendet ein privilegiertes Sicherheitsmodell. Jeder Benutzer wird authentifiziert und erhält bestimmte Berechtigungen zum Erstellen, Abfragen oder Bearbeiten von Tabellen. SSL bietet Verbindungsverschlüsselung.

SQL-Injection-Angriffe sind die größte Schwachstelle von MySQL. Es gibt jedoch bestimmte Maßnahmen, die ergriffen werden können, um das Risiko eines Angriffs zu verringern, z. B. die Verwendung parametrisierter Abfragen anstelle einer verketteten Benutzereingabe. Dies ist besonders wichtig in WHERE Klauseln und INSERT oder UPDATE Aussagen.

Skalierbarkeit

MongoDB :Die horizontale Skalierung ist einer der Hauptvorteile von MongoDB im Vergleich zu MySQL. Mithilfe von Shard-Clustering verteilt MongoDB Daten über Computer, was Anwendungsfälle unterstützt, die die Arbeit mit großen Datensätzen beinhalten.

MySQL :Wie oben erwähnt, unterstützt MySQL standardmäßig kein Sharding. Das Skalieren einer Datenbank in MySQL (und vielen anderen beliebten RDBMS-Lösungen) erfordert entweder eine Änderung der Anwendung, die die Datenbank verwendet, oder eine Ausfallzeit, bis die Migration auf einen größeren Server abgeschlossen ist.

Geschwindigkeit und Leistung

MongoDB Hinweis:Als NoSQL-Datenbank ist MongoDB aufgrund seines Abfragemodells schneller als MySQL, das Variationen je nach Art und Umfang der Arbeit zulässt. Die Geschwindigkeit von MongoDB wird besonders deutlich in Szenarien mit großen Datenbanken.

MySQL :Obwohl MySQL langsamer ist, kann seine Leistung durch Tuning deutlich verbessert werden.

Support und Dokumentation

MongoDB :MongoDB Inc. bietet 24/7 Enterprise-Grade-Support und ein Add-on für erweiterten Lifecycle-Support. Der Support umfasst eine umfangreiche Wissensdatenbank, Wartungsversionen, Updates, Patches und Fehlerbehebungen. Als neuer Player auf dem Markt hat MongoDB eine kleinere Online-Community als MySQL.

MySQL :Als Oracle-Produkt bietet MySQL 24/7 Oracle Lifetime Support in drei Stufen:Premier-Support umfasst Versionen bis zu 5 Jahren, Extended-Stufe gilt für Versionen zwischen 6 und 8 Jahren, während Sustain alle Versionen unterstützt, die älter als acht Jahre sind . Eine sehr aktive Online-Community hilft Benutzern, schnell Lösungen für viele Probleme zu finden.

Anwendungsfälle

MongoDB :MongoDB, wie andere NoSQL-Lösungen, schneidet am besten in den Anwendungsfällen ab, die eine flexible und flüssige Art der Datenbearbeitung erfordern, wie z. B.:

  • Echtzeitanalysen
  • Data Warehouses
  • Mobile Apps
  • Content-Management-Systeme

Die Liste der Unternehmen, die MongoDB in ihren Tech-Stacks verwenden, umfasst Lyft, Adobe, Codecademy usw.

MySQL :Institutionen, die sich mit Finanztransaktionen befassen, und andere, die ACID-Konformität erfordern, wählen MySQL gegenüber MongoDB. Die Liste der Unternehmen, die MySQL verwenden, ist länger und umfasst Airbnb, Netflix, Amazon, Shopify usw.

Es ist wichtig zu beachten, dass einige Unternehmen wie Uber sowohl MongoDB als auch MySQL für unterschiedliche Anwendungsszenarien innerhalb des Unternehmens verwenden.

Wie wählen?

Im Vergleich zwischen MongoDB und MySQL gibt es keinen klaren Sieger, da diese beiden Datenbankmanagementsysteme zwei deutlich unterschiedliche Bereiche abdecken. Die Wahl der richtigen Lösung erfordert eine sorgfältige Analyse der individuellen Bedürfnisse.

Wählen Sie MongoDB bei Bedarf:

  • Verfügbarkeit erhöhen – Die Datenreplikationstechnologie von MongoDB und die Verwendung mehrerer Knoten zur Datenspeicherung sorgen für eine höhere Verfügbarkeit. MySQL kann Daten auch über Knoten hinweg replizieren, aber der Prozess ist komplex und zeitaufwändig.
  • Entwicklung beschleunigen – Die Flexibilität des JSON-Formats ist besonders vorteilhaft für App-Entwickler, die Daten lieber in Arrays und Unterdokumenten als in starren Zeilen und Spalten darstellen.
  • Horizontal skalieren – MongoDB ermöglicht eine horizontale Skalierung, ohne Änderungen an der Anwendung vorzunehmen oder eine Ausfallzeit zu durchlaufen.

Wählen Sie MySQL wenn Sie:

  • Mit sicheren Geldtransaktionen umgehen – MySQL-Transaktionen werden als einzelne Einheiten behandelt und nicht gelöscht, bis jede einzelne Betriebsphase erfolgreich abgeschlossen ist. Wenn eine der Phasen fehlschlägt, schlägt die gesamte Operation fehl. Diese Funktion von MySQL gewährleistet die für Finanztransaktionen erforderliche Datenintegrität.
  • Umfassende Transaktionsunterstützung benötigen – MySQL-Transaktionen folgen dem ACID-Standard, was bedeutet, dass sie atomar, konsistent, isoliert und dauerhaft sind.
  • Benötigen Sie besseren Support – MySQL gibt es schon viel länger als MongoDB, daher ist es viel einfacher, Lösungen für häufige Probleme im Internet zu finden, wenn Sie MySQL verwenden. Auf einer höheren Ebene erfordert die Verwaltung einer NoSQL-Datenbank wie MongoDB mehr technisches Fachwissen als dies bei MySQL der Fall ist.

Linux
  1. MySQL-Datenbank optimieren

  2. Reparieren von MySQL InnoDB-Datenbanken

  3. Über MySQL

  4. Konfigurieren Sie die MySQL-Quell-Quell-Replikation

  5. MySQL-Sicherung 1.2 (MySQL 5.5+)

Installieren Sie MongoDB auf Ubuntu 20.04

MySQL-Datenbankserver

MySQL-Übersicht

Installieren Sie MongoDB auf Ubuntu 18.04

Was ist MySQL vs. MariaDB vs. Percona?

Wie installiere ich Mongodb in CentOS?