GNU/Linux >> Tutoriels Linux >  >> Linux

MongoDB contre MySQL

Présentation

La grande variété de systèmes de gestion de bases de données (SGBD) proposés est sans aucun doute une bonne chose. Cependant, cela signifie également que choisir le bon système de base de données pour vos besoins ne se limite pas à choisir l'option la plus populaire.

Des différences de modèle de transaction à la qualité du support, les SGBD sont de toutes formes et tailles.

Dans cet article de comparaison, vous découvrirez les différences entre les deux solutions de SGBD populaires :MongoDB et MySQL.

Qu'est-ce que MongoDB ?

MongoDB est un système de gestion de base de données NoSQL multiplateforme, comme Cassandra ou Redis. Cependant, contrairement à ces systèmes, MongoDB est orienté document. Il utilise des documents de type JSON appelés fichiers BSON comme emplacements pour ses magasins de documents. Étant donné que le fichier BSON est une modification du format JSON, MongoDB est entièrement compatible avec JavaScript Object Notation.

Une autre caractéristique importante de MongoDB est qu'il est sans schéma. Il ne nécessite pas de définir une structure fixe lors de la création du document et facilite considérablement la modification ultérieure de la structure de l'enregistrement.

Le développement de MongoDB a commencé en 2007 et en 2009, il est devenu open-source. MongoDB Inc., la société derrière le logiciel, offre un support commercial pour le système.

Au moment de la rédaction de cet article, la dernière version de MongoDB est la 4.4.3 de décembre 2020.

Qu'est-ce que MySQL ?

MySQL est un système de gestion de bases de données relationnelles (RDBMS). Il s'agit d'une implémentation open source de SQL, Structured Query Language. Les bases de données relationnelles telles que MySQL, Oracle ou PostgreSQL sont similaires car elles organisent les données dans des tables. Ces tableaux contiennent des types de données connexes qui aident à structurer les données.

MySQL stocke les données associées dans un nombre illimité de tables distinctes. L'interrogation et la corrélation des données de ces tables sont facilitées par les opérations JOIN, qui permettent la création de tables temporaires et d'ensembles de lignes à l'aide de données provenant de plusieurs tables.

Oracle est la société qui possède et offre un support pour MySQL. Au moment de la rédaction de cet article, la dernière version stable de MySQL est la 5.7.32 d'octobre 2020.

MongoDB contre. MySQL :Présentation de la comparaison

MongoDB et MySQL sont deux systèmes de gestion de base de données fondamentalement différents. Les comparer est utile car ils sont de bons représentants de leurs philosophies de gestion respectives. Pour plus d'informations, consultez NoSQL vs. SQL.

Le tableau ci-dessous est une comparaison directe des aspects essentiels des deux SGBD.

MongoDB MySQL
Type de base de données NoSQL orienté document SGBD relationnel
Langage de programmation C++, C, JavaScript C++, C
Schéma Dynamique Statique
Stockage des données BSON (format de type JSON) Tableaux (lignes et colonnes)
Langage de requête MQL (par défaut), mais fonctionne avec de nombreuses langues SQL
MapReduce Oui Non
Conversion de base de données Oui Non
Analyse des performances Oui Non
Modèle de transaction BASE ACIDE
Isolement Non Oui
Intégrité référentielle Non Oui
Transactions complexes Non Oui
Mise à l'échelle Horizontal Vertical
Localité des données Oui Non
Partage automatique Oui Non
Mode de réplication Maître-Esclave Maître-Esclave, Maître-Maître

Vous trouverez ci-dessous un aperçu détaillé des domaines de comparaison les plus importants pour MongoDB et MySQL.

Structure de la base de données (schéma)

MongoDB :MongoDB stocke les données dans des documents. Ces documents ont différentes structures, selon les exigences de la base de données. Le système stocke ensemble les données associées pour faciliter les requêtes rapides.

La flexibilité de l'approche orientée document dans MongoDB est l'un de ses plus grands avantages par rapport à MySQL et à d'autres SGBD relationnels. MongoDB n'a pas besoin qu'un schéma de table soit déclaré avant d'autoriser la saisie de données.

Une collection de documents MongoDB peut contenir des documents avec différents ensembles de champs. Le type de données de champ peut également varier d'un document à l'autre. L'ajout ou la suppression de champs à l'intérieur d'un document s'effectue simplement en mettant à jour la structure du document. Il en va de même pour la modification des types de données de champ.

Une opération d'écriture dans MongoDB est atomique au niveau du document. Cela est vrai même dans les cas où une opération affecte plusieurs documents incorporés. Les opérations d'écriture multi-documents maintiennent l'atomicité au niveau du document mais ne sont pas elles-mêmes atomiques.

MongoDB prend en charge les transactions multi-documents sur les jeux de répliques et les clusters fragmentés.

MySQL :Les données dans MySQL sont stockées dans des tables, qui sont créées avant l'ajout de toute donnée. Chaque table de base de données se compose de lignes et de colonnes. Les lignes représentent les entités de la base de données et les colonnes fournissent des informations sur les entités.

Les schémas statiques définissent la structure de la base de données et exigent que toutes les lignes aient la même structure. MySQL a une limite stricte de 4 096 colonnes par table et une taille de ligne maximale de 65 535 octets.

Le schéma du système se compose de tables contenant les informations nécessaires au fonctionnement ininterrompu du serveur MySQL. Ces informations incluent des tables de dictionnaire de données avec des métadonnées d'objet de base de données et d'autres tables système opérationnelles.

En raison de la rigidité de l'architecture de MySQL, la création et la gestion de bases de données nécessitent beaucoup de planification à l'avance pour maintenir des performances élevées lorsque la base de données commence à croître.

Optimisation de l'index

MongoDB :MongoDB utilise des index pour l'optimisation. Sans index, MongoDB parcourt chaque document d'une collection pour trouver une correspondance pour une requête.

MySQL :Tout comme MongoDB, MySQL utilise des index pour optimiser les requêtes. S'il n'y a pas d'index pertinents pour une requête particulière, MySQL recherche dans toute la table.

Déploiement de la base de données

MongoDB :Les utilisateurs peuvent déployer MySQL en mode natif sur Microsoft Windows, OS X, Linux et Solaris. MongoDB est également bien adapté aux environnements distribués tels que les conteneurs Docker.

MySQL  :MySQL possède des binaires pour divers systèmes d'exploitation, tels que Microsoft Windows, OS X, Linux, FreeBSD, NetBSD, Solaris, etc. Les images MySQL Docker officiellement gérées sont conçues uniquement pour les plates-formes Linux.

Langage de requête

MongoDB :Le moteur de MongoDB peut interagir avec de nombreux langages de programmation différents, selon les préférences du programmeur. Par défaut, cependant, MongoDB utilise MQL (MongoDB Query Language).

MQL est un langage de type SQL conçu pour interroger des données non structurées. Les requêtes dans MongoDB sont basées sur JavaScript.

Par exemple, voici comment une collection est créée dans 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" }
]);

L'interrogation d'une collection est effectuée à l'aide de la commande find commande :

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

MySQL :Comme beaucoup de SGBDR, MySQL utilise SQL. L'exemple de syntaxe utilise les données de l'exemple MQL ci-dessus.

Tout d'abord, les utilisateurs de MySQL doivent créer une table :

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;

Ensuite, le tableau est rempli de données :

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

Création de la vue pour filtrer les données :

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

Une fois que le schéma existe, l'interrogation de la table est effectuée à l'aide du SELECT déclaration :

SELECT * FROM red_fruit;

Réplication et clustering des données

MongoDB :Le but de la réplication des données est d'offrir la continuité des activités et la disponibilité des données. MongoDB conserve plusieurs répliques de données sur des serveurs isolés. Cette réplication permet d'éviter la perte de données due à des circonstances imprévues telles que des pannes de serveur, des pannes de courant, etc.

Un jeu de répliques est un ensemble d'instances mongod gérant le même jeu de données. Étant le principal processus démon MongoDB, mongod gère les demandes de données, contrôle l'accès aux données et effectue des opérations en arrière-plan. Un jeu de répliques se compose d'un certain nombre de nœuds de données, l'un étant le nœud principal qui gère toutes les opérations d'écriture, tandis que les autres sont secondaires.

Chaque fois qu'un jeu de répliques est initié, ou qu'il y a un changement dans le jeu relatif au nombre de nœuds, comme l'ajout d'un nouveau nœud ou la perte d'une connexion avec le nœud principal pendant plus de temps que prévu, le système se déclenche auto-élections . Le but des élections est de déterminer si le nœud de données principal actuel doit rester principal.

MongoDB prend également en charge le sharding , qui permet une mise à l'échelle horizontale via le clustering de partitions. Le sharding est une méthode de distribution de données sur plusieurs ordinateurs, qui permet de lire et d'écrire des données sur un certain nombre de nœuds. Aucun nœud ne gère l'ensemble des données, de sorte que les données sont réparties sur tous les nœuds d'une partition.

Lorsque vous travaillez avec de grands ensembles de données et un débit élevé, le partitionnement aide à réduire la charge sur un seul serveur et permet une mise à l'échelle par l'ajout ou la suppression de serveurs, selon les besoins.

MySQL  :MySQL prend en charge les types de réplication suivants :

  • Réplication maître-esclave asynchrone, où le processus passe d'un maître à un nombre quelconque d'esclaves, et vice versa. Le maître n'attend pas que les esclaves confirment la réception de l'événement. Les modifications apportées à la base de données sont mises en file d'attente et écrites ultérieurement.
  • Réplication maître-esclave semi-synchrone, le maître attendant la réplication d'un seul esclave pour confirmer la réception de l'événement.
  • Réplication multimaître synchrone, permettant de stocker les données sur plusieurs ordinateurs et de les mettre à jour par n'importe quel membre du groupe. Tous les esclaves sont tenus de confirmer la réception des événements.

Bien que MySQL ne prenne pas en charge le partitionnement automatique et le clustering, les utilisateurs peuvent accéder à certaines fonctionnalités via la technologie MySQL Cluster.

Sécurité

MongoDB :MongoDB utilise une authentification basée sur les rôles. Les autres fonctionnalités de sécurité incluent l'audit et l'autorisation, ainsi que la prise en charge de TLS et SSL à des fins de chiffrement.

Le principal avantage de MongoDB en matière de sécurité par rapport à MySQL est sa résistance aux attaques par injection SQL. L'injection SQL est une vulnérabilité permettant à un attaquant d'accéder aux requêtes de base de données effectuées par une application. L'attaquant peut utiliser cette vulnérabilité pour accéder aux données de l'application, les modifier ou les supprimer. Une injection SQL peut même compromettre le serveur lui-même.

Étant donné que l'architecture de MongoDB utilise des documents de type JSON pour expliquer la requête et que les requêtes sont représentées comme des objets JSON binaires sécurisés (BSON), l'injection directe de chaîne est impossible.

MySQL :MySQL utilise un modèle de sécurité basé sur les privilèges. Chaque utilisateur est authentifié et dispose de privilèges spécifiques pour créer, interroger ou modifier des tables. SSL fournit le cryptage de connexion.

Les attaques par injection SQL sont la plus grande vulnérabilité de MySQL. Cependant, certaines mesures peuvent être prises afin de réduire le risque d'attaque, comme l'utilisation de requêtes paramétrées au lieu d'une entrée utilisateur concaténée. Ceci est particulièrement important dans WHERE clauses et INSERT ou UPDATE déclarations.

Évolutivité

MongoDB :La mise à l'échelle horizontale est l'un des principaux avantages de MongoDB par rapport à MySQL. À l'aide du clustering de partitions, MongoDB distribue les données sur les machines, ce qui facilite les cas d'utilisation qui incluent l'utilisation de grands ensembles de données.

MySQL :Comme mentionné ci-dessus, MySQL ne prend pas en charge le partitionnement prêt à l'emploi. La mise à l'échelle d'une base de données dans MySQL (et de nombreuses autres solutions RDBMS populaires) nécessite soit de modifier l'application à l'aide de la base de données, soit d'autoriser des temps d'arrêt jusqu'à ce que la migration vers un serveur plus grand soit terminée.

Vitesse et performances

MongoDB :En tant que base de données NoSQL, MongoDB est plus rapide que MySQL en raison de son modèle d'interrogation, qui permet des variations en fonction du type et de la taille du travail. La vitesse de MongoDB est particulièrement évidente dans les scénarios qui incluent de grandes bases de données.

MySQL  :Bien que MySQL soit le plus lent des deux, ses performances peuvent être considérablement améliorées grâce à des réglages.

Assistance et documentation

MongoDB :MongoDB Inc. offre un support de niveau entreprise 24h/24 et 7j/7 et un module complémentaire pour un support de cycle de vie étendu. Le support comprend une riche base de connaissances, des versions de maintenance, des mises à jour, des correctifs et des corrections de bogues. Étant un acteur plus récent sur le marché, MongoDB a une communauté en ligne plus petite que MySQL.

MySQL :En tant que produit Oracle, MySQL offre un support à vie Oracle 24h/24 et 7j/7 sur trois niveaux :le support Premier inclut les versions jusqu'à 5 ans, le niveau étendu concerne les versions entre 6 et 8 ans, tandis que Sustain prend en charge toutes les versions de plus de huit ans. . Une communauté en ligne très active aide les utilisateurs à trouver rapidement des solutions à de nombreux problèmes.

Cas d'utilisation

MongoDB  :MongoDB, comme les autres solutions NoSQL, fonctionne mieux dans les cas d'utilisation qui nécessitent une manière flexible et fluide de manipuler les données, comme :

  • Analyse en temps réel
  • Entrepôts de données
  • Applications mobiles
  • Systèmes de gestion de contenu

La liste des entreprises utilisant MongoDB dans leurs piles technologiques comprend Lyft, Adobe, Codecademy, etc.

MySQL :Les institutions qui traitent des transactions financières et d'autres nécessitant la conformité ACID choisissent MySQL plutôt que MongoDB. La liste des entreprises utilisant MySQL est plus longue et comprend Airbnb, Netflix, Amazon, Shopify, etc.

Il est important de noter que certaines entreprises, comme Uber, utilisent à la fois MongoDB et MySQL pour différents scénarios d'utilisation au sein de l'entreprise.

Comment choisir ?

Il n'y a pas de gagnant clair dans la comparaison entre MongoDB et MySQL car ces deux systèmes de gestion de base de données répondent à deux domaines très différents. Choisir la bonne solution nécessite une analyse minutieuse de ses besoins particuliers.

Choisissez MongoDB si vous avez besoin :

  • Accroître la disponibilité - La technologie de réplication des données de MongoDB et l'utilisation de plusieurs nœuds pour le stockage des données garantissent une plus grande disponibilité. MySQL peut également répliquer des données sur plusieurs nœuds, mais le processus est complexe et prend du temps.
  • Accélérer le développement – la flexibilité du format JSON est particulièrement bénéfique pour les développeurs d'applications, qui préfèrent représenter les données dans des tableaux et des sous-documents plutôt que dans des lignes et des colonnes rigides.
  • Mettre à l'échelle horizontalement – MongoDB permet une mise à l'échelle horizontale sans apporter de modifications à l'application ni subir de temps d'arrêt.

Choisissez MySQL si vous :

  • Traiter des transactions monétaires sécurisées – Les transactions MySQL sont traitées comme des unités uniques et ne sont pas effacées tant que chaque étape opérationnelle individuelle n'est pas terminée avec succès. Si l'une des étapes échoue, l'opération entière échoue. Cette fonctionnalité de MySQL garantit l'intégrité des données nécessaires aux transactions financières.
  • Besoin d'une assistance transactionnelle complète – Les transactions MySQL suivent la norme ACID, ce qui signifie qu'elles sont atomiques, cohérentes, isolées et durables.
  • Besoin d'une meilleure assistance – MySQL existe depuis bien plus longtemps que MongoDB, il est donc beaucoup plus facile de trouver des solutions aux problèmes courants sur Internet si vous utilisez MySQL. À un niveau supérieur, la gestion d'une base de données NoSQL telle que MongoDB nécessite plus d'expertise technique que dans le cas de MySQL.

Linux
  1. Optimiser la base de données MySQL

  2. Supprimer des tables dans MySQL

  3. Méthodes de connexion MySQL

  4. Planificateur d'événements MySQL

  5. Sauvegarde MySQL 1.2 (MySQL 5.5+)

Installer MongoDB sur Ubuntu 20.04

Serveur de base de données MySQL

Présentation de MySQL

Installer MongoDB sur Ubuntu 18.04

Qu'est-ce que MySQL vs MariaDB vs Percona

Comment installer Mongodb dans CentOS ?