Quelle est la différence entre Cassandra et MongoDB ?

Apache Cassandra et MongoDB sont deux bases de données NoSQL qui stockent les données dans un format non tabulaire. Cassandra est l'une des premières bases de données NoSQL dotée d'une conception hybride entre un magasin tabulaire et un magasin clé-valeur. Elle est conçue pour stocker des données pour des applications nécessitant des performances de lecture et d'écriture rapides. En revanche, MongoDB est une base de données document conçue pour un usage général. Elle dispose d'un modèle de données flexible qui vous permet de stocker des données non structurées dans un format JSON optimisé appelé Binary JSON ou BSON. La base de données MongoDB fournit une prise en charge complète de l'indexation et de la réplication grâce à des API riches et intuitives.

En savoir plus sur Apache Cassandra »

En savoir plus sur MongoDB »

Quelles sont les similitudes entre Cassandra et MongoDB ?

Apache Cassandra et MongoDB appartiennent tous deux au groupe des bases de données NoSQL. Les bases de données NoSQL peuvent stocker des données structurées, non structurées et semi-structurées sans schéma de base de données.

Le stockage des données dans les bases de données NoSQL n'est pas limité par le format tabulaire et les relations entre les tables, contrairement à ce qui se passe dans un système de gestion de base de données relationnelle traditionnel. Vous pouvez librement partitionner et répliquer les données sur plusieurs nœuds pour une mise à l'échelle efficace. 

De plus, Cassandra et les premières versions de MongoDB sont open source. Cela signifie que vous pouvez télécharger le code source de ces bases de données NoSQL et les configurer comme vous le souhaitez.

Facebook a développé Cassandra et l'a ensuite publié en tant que projet open source avec Apache. MongoDB a été développé par un petit groupe de développeurs sous la direction de MongoDB, Inc. Toutes les versions de MongoDB publiées avant le 16 octobre 2018 sont disponibles sous la licence publique générale GNU Affero.

En savoir plus sur NoSQL »

En savoir plus sur l'open source »

Différences de modèles de données : Cassandra comparé à MongoDB

Bien que MongoDB et Apache Cassandra soient toutes deux des bases de données NoSQL, elles stockent et gèrent les données différemment.

Cassandra

Cassandra stocke les données sous forme de magasins clé-valeur. Cette base de données vous permet de définir des tables avec des lignes et des colonnes, mais la structure tabulaire n'est pas utilisée dans le stockage proprement dit. Elle utilise plutôt le modèle de base de données orienté colonnes étendues, de sorte que chaque ligne de la table peut comporter un ensemble de colonnes différent.

Vous pouvez regrouper les colonnes en familles de colonnes en fonction de leur type de données ou de leur utilisation. Chaque ligne possède une clé primaire que vous pouvez utiliser pour lire rapidement les données de Cassandra.

La structure des tables d'Apache Cassandra peut être visualisée dans l'exemple suivant.

ID client 1

Colonne – nom

Colonne – pays

 
 

Valeur – John Doe

Valeur – États-Unis

 
ID client 2

Colonne – nom 

Colonne – âge

Colonne – e-mail

 

Valeur – Jane Doe

Valeur – 35

Valeur – jane_doe@example.com

MongoDB

En revanche, MongoDB stocke les données sans schéma, en utilisant un format binaire JSON (BSON) optimisé. Cette base de données peut stocker plusieurs types de données dans un seul document, comme les objets JSON, puis le sérialiser avec BSON.

MongoDB organise les documents en collections qui peuvent contenir des données de différentes structures. Son modèle de données est flexible et peut gérer de gros volumes de données non structurées.

Voici un exemple de données clients dans MongoDB.

clients :[

{

  customer_id: "1",

  nom : “John Doe”,

  pays : "États-Unis"

},

{

  customer_id: "2",

  âge : “35”

  e-mail : "jane_doe@example.com"

}]

Différences architecturales : Cassandra comparé à MongoDB

En raison des différences entre leurs modèles de données, Cassandra et MongoDB implémentent différemment plusieurs fonctionnalités de base de données.

Unité de stockage de base

Dans Cassandra, les tables de chaînes triées (SSTables) constituent l'unité de stockage de base utilisée pour conserver les données sur le disque. Un SSTable est un fichier qui contient un ensemble trié de paires clé-valeur pour une famille de colonnes (table) et une partition particulières. Les SSTables sont immuables, ce qui signifie qu'une fois écrites, elles ne peuvent plus être modifiées. 

Dans MongoDB, l'unité de stockage de base est un document. Un document est un ensemble de paires clé-valeur où les clés sont des chaînes et les valeurs peuvent être de différents types. Par exemple, les valeurs peuvent être d'autres documents, des tableaux, des chaînes, des nombres, des dates et des valeurs booléennes. Les documents sont stockés dans des collections.

Langage de requête

Un langage de requête est constitué des instructions que vous utilisez pour insérer et récupérer des données dans la base de données.

Cassandra Query Language (CQL) est le langage de requête que vous utilisez sur Cassandra. Bien que sa syntaxe et sa structure soient similaires à celles de SQL, Apache a développé CQL pour fonctionner avec le modèle de données par famille de colonnes.

D'autre part, MongoDB utilise le langage de requête MongoDB (MQL), qui possède des commandes similaires à celles de Node.js. MQL prend en charge les opérations de création, de lecture, de mise à jour et de suppression (CRUD). Vous pouvez écrire des commandes MQL sur le shell MongoDB.

Indexation

L'indexation est une technique utilisée dans les bases de données pour améliorer la rapidité et l'efficacité des opérations de récupération de données. Il s'agit de créer une structure de données qui associe les valeurs d'une ou plusieurs colonnes d'une table de base de données à l'emplacement physique des données correspondantes sur le disque.

Cassandra prend en charge deux types d'index :

  • Index secondaires sur des colonnes individuelles
  • Indexes secondaires attachés à une SSTable (SASI) sur plusieurs colonnes

Les index SASI stockent les données d'index directement dans les SSTables. Ils prennent en charge les requêtes complexes telles que l'intervalle, le préfixe et la recherche en texte intégral sur des colonnes comportant un grand nombre de valeurs uniques.

En revanche, MongoDB prend en charge l'indexation au niveau des collections et des champs. Il fournit plusieurs types d'index tels que le champ unique, le composé et le multiclé. Il propose également les index suivants :

  • index géospatial spécialisé pour les données distribuées géographiquement
  • un index de recherche de texte pour de grands volumes de données textuelles
  • index hachés et en cluster pour les données numériques

Simultanéité

Dans les bases de données, on parle de simultanéité lorsque plusieurs utilisateurs ou processus peuvent accéder à la base de données et y effectuer des transactions simultanément sans interférer les uns avec les autres. 

Cassandra assure la simultanéité grâce à la cohérence de la table tournante et à l'atomicité au niveau des lignes. Un seul utilisateur peut intervenir sur une seule ligne à la fois.

Dans un souci de cohérence entre les tables tournantes, chaque nœud de réplica gère une horloge vectorielle, qui est une structure de données qui suit l'historique des versions des données associées. Lorsqu'une opération d'écriture est effectuée, l'horloge vectorielle est mise à jour pour refléter la nouvelle version. Lorsqu'une opération de lecture est effectuée, Cassandra renvoie la version dont l'horodatage est le plus élevé dans tous les réplicas, ce qui garantit que la version la plus récente des données est toujours renvoyée.

En revanche, MongoDB prend en charge les mécanismes de contrôle de simultanéité multiversion (MVCC). MVCC permet l'existence simultanée de plusieurs versions d'un même document de données. Chaque document possède un ID de révision unique qui est incrémentée à chaque mise à jour. Le verrouillage au niveau du document et MVCC fournissent une stratégie de simultanéité plus robuste.

Disponibilité

La disponibilité signifie que vous vous assurez qu'il n'y a pas d'interruption des données, même en cas de panne du serveur. Cassandra et MongoDB garantissent la disponibilité en répliquant les données sur plusieurs nœuds de serveur.

Dans Apache Cassandra, chaque nœud du cluster contient des réplicas de données pour d'autres nœuds. Chaque nœud coordonne les lectures vers le nœud approprié pour écrire ou extraire des données. Simultanément, il répare les données qui ne sont plus cohérentes entre les nœuds. Cela peut avoir un impact sur les performances à grande échelle.

En revanche, MongoDB utilise la réplication d'un seul nœud primaire pour offrir une grande disponibilité des données. MongoDB réplique les données dans des ensembles de réplicas. Un seul nœud primaire reçoit les écritures et les autres nœuds se contentent de répliquer les données du nœud primaire. Toutefois, le nœud primaire crée un point unique de défaillance.

Capacité de mise à l’échelle

Cassandra et MongoDB autorisent le partitionnement, une technique permettant de répartir horizontalement les données sur plusieurs nœuds d'un cluster. Par exemple, si vous avez des milliers de clients, vous partitionnez les données de manière à ce que chaque nœud ne contienne que les informations relatives à quelques centaines de clients. Vous pouvez ainsi mettre à l'échelle votre base de données sans créer de goulots d'étranglement.

Cassandra utilise un algorithme de hachage distribué appelé hachage cohérent pour déterminer quel nœud est responsable d'une valeur de données particulière. Cassandra prend également en charge les nœuds virtuels (vnodes), qui permettent à un seul nœud physique de disposer de plusieurs plages de données.

En revanche, MongoDB utilise des clés de partitionnement pour identifier où la valeur des données peut aller. Les administrateurs de base de données peuvent définir des clés de partitionnement pour partitionner les données. Vous pouvez diviser les données en fonction de facteurs tels que la localisation géographique, l'ordre alphabétique ou tout autre système plus efficace pour votre jeu de données.

Quand utiliser Cassandra par rapport à MongoDB

La haute disponibilité et l'architecture distribuée de Cassandra en font le choix idéal pour répondre aux exigences de haute disponibilité. La capacité de MongoDB à gérer des données non structurées avec une approche orientée documents la rend utile pour les systèmes où les données sont en constante évolution. 

Voici quelques facteurs à prendre en compte pour choisir entre les deux.

Format des données

Apache Cassandra possède un système de stockage de données plus structuré que MongoDB. Si les données avec lesquelles vous travaillez sont dans un format fixe, Cassandra est plus adaptée.

Si les données sont plus dynamiques et n'ont pas une structure cohérente, MongoDB fonctionne mieux.

Disponibilité

MongoDB possède un nœud primaire, puis une série de réplicas. Si le nœud primaire est hors service, MongoDB passe quelques minutes à choisir un nœud de réplica pour le remplacer. Cela peut entraîner un léger temps d'arrêt.

Cassandra utilise un système de nœuds distribués avec de nombreux nœuds principaux, ce qui permet une disponibilité de 100 %. 

Capacité de mise à l’échelle

MongoDB vous donne plus de contrôle à mesure que vous vous mettez à l'échelle. Vous pouvez décider comment partitionner les données entre les nœuds en fonction de vos besoins et gérer des bases de données massivement distribuées à grande échelle.

Les performances de Cassandra peuvent diminuer légèrement à l'échelle, en fonction de la valeur des données.

Langage de requête

Cassandra Query Language (CQL) et MongoDB Query Language (MQL) sont tous deux des langages de requête très efficaces. Cependant, CQL est bien plus similaire à SQL, ce qui vous permet d'utiliser facilement CQL si vous maîtrisez déjà SQL.

MQL a des implémentations et une syntaxe différentes, et la courbe d'apprentissage peut être plus raide.

Prise en charge des langages de programmation

MongoDB prend en charge douze langages de programmation : C, C++, C#, Go, Java, Node.js, PHP, Python, Ruby, Rust, Scala, et Swift.

Cassandra prend en charge moins de langages, tels que Java, JavaScript, Perl, Ruby, Scala, C#, Erlang, PHP, Python, etc.

Résumé des différences : Cassandra comparé à MongoDB

 

Apache Cassandra

MongoDB

Modèle de données

Cassandra utilise un modèle de données à colonnes larges, plus proche des bases de données relationnelles. 

MongoDB s'éloigne complètement du modèle relationnel en stockant les données sous forme de documents.

Unité de rangement de base

Tables de chaînes triées.

Documents JSON sérialisés.

Indexation

Cassandra prend en charge les index secondaires et SASI pour indexer par colonne ou par colonnes.

MongoDB indexe au niveau des collections et des champs et propose plusieurs options d'indexation.

Langage de requête

Cassandra utilise CQL.

MongoDB utilise MQL.

Simultanéité

Cassandra assure la simultanéité grâce à l'atomicité au niveau des lignes et à la cohérence de la table tournante. 

MongoDB utilise le MVCC et le verrouillage au niveau du document pour garantir la simultanéité. 

Disponibilité

Cassandra dispose de plusieurs nœuds principaux, d'un partitionnement des nœuds et d'une réplication des clés pour garantir une haute disponibilité.

MongoDB utilise un seul nœud primaire et plusieurs nœuds de réplicas. Combiné au partitionnement, MongoDB offre une disponibilité et une capacité de mise à l'échelle élevées. 

Partitioning

Algorithme de hachage cohérent, moins de contrôle pour les utilisateurs.

Les utilisateurs définissent les clés de partitionnement et ont davantage de contrôle sur le partitionnement.

Comment AWS peut-il répondre à vos besoins en matière de Cassandra et de MongoDB ?

Amazon Web Services (AWS) propose deux services qui répondent aux exigences communes d'Apache Cassandra et de MongoDB.

Amazon Keyspaces (pour Apache Cassandra) est une base de données gérée et hautement disponible qui vous permet de déplacer vos charges de travail Cassandra vers le cloud. Amazon Keyspaces est sans serveur. Vous payez donc uniquement les ressources que vous utilisez, et le service se met automatiquement à l'échelle en augmentant ou en diminuant en fonction du trafic des applications. Vous pouvez créer des applications qui traitent des milliers de demandes par seconde avec un débit et un stockage pratiquement illimités.

Amazon DocumentDB (compatible avec MongoDB) est un service de base de données document JSON natif entièrement géré. Il facilite et rentabilise l'exploitation de charges de travail de documents critiques à pratiquement n'importe quelle échelle, sans gérer l'infrastructure. Amazon DocumentDB simplifie votre architecture en fournissant de bonnes pratiques de sécurité intégrées, des sauvegardes continues et des intégrations natives avec d'autres services AWS.

Commencez à utiliser les services de base de données gérés Apache Cassandra et MongoDB sur AWS en créant un compte AWS dès aujourd'hui.