web-dev-qa-db-fra.com

Différence entre les bases de données basées sur des documents et celles basées sur des valeurs / clés?

Je sais qu'il existe trois types différents et populaires de bases de données non SQL.

  • Clé/Valeur: Redis, Tokyo Cabinet, Memcached
  • ColumnFamily: Cassandra, HBase
  • Document: MongoDB, CouchDB

J'ai lu de longs blogs à ce sujet sans trop comprendre.

Je connais les bases de données relationnelles et je maîtrise les bases de données basées sur des documents comme MongoDB/CouchDB.

Est-ce que quelqu'un pourrait me dire quelles sont les différences majeures entre ceux-ci et les premiers sur la liste?

94
never_had_a_name

Les principales différences sont le modèle de données et les capacités d'interrogation.

Magasins de valeurs-clés

Le premier type est très simple et n'a probablement pas besoin d'explications supplémentaires.

Modèle de données: plus que des magasins de valeurs-clés

Bien qu'il y ait n certain débat sur le nom correct des bases de données telles que Cassandra, je voudrais les appeler magasins de familles de colonnes . Bien que les paires clé-valeur soient une partie essentielle de Cassandra, cela ne se limite pas à cela. Il vous permet d'imbriquer des paires clé-valeur, de sorte qu'une clé peut faire référence à plusieurs paires sous-clé-valeur.

Cependant, vous ne pouvez pas imbriquer des paires clé-valeur indéfiniment. Vous êtes limité à trois niveaux (familles de colonnes) ou à quatre niveaux d'imbrication (familles de super-colonnes). Si le terme famille de colonnes ne vous dit rien, consultez l'article WTF est une SuperColonne , c'est une bonne explication du modèle de données de Cassandra.

Les bases de données de documents , telles que CouchDB et MongoDB stockent des documents entiers sous la forme objets JSON . Vous pouvez considérer ces objets comme des paires clé-valeur imbriquées. Contrairement à Cassandra, vous pouvez imbriquer des paires clé-valeur autant que vous le souhaitez. JSON prend également en charge les tableaux et comprend différents types de données, tels que les chaînes, les nombres et les valeurs booléennes.

Requête

Je pense que les magasins de familles de colonnes ne peuvent être interrogés que par clé ou en écrivant des fonctions de réduction de carte. Vous ne pouvez pas interroger les valeurs comme vous le feriez dans une base de données SQL. Si votre application a besoin de requêtes plus complexes, votre application devra créer et maintenir des index afin d'accéder aux données souhaitées.

Les bases de données de documents prennent également en charge les requêtes par clé et les fonctions de réduction de carte, mais vous permettent également d'effectuer des requêtes de base par valeur, telles que "Donnez-moi tous les utilisateurs avec plus de 10 publications". Les bases de données de documents sont ainsi plus flexibles.

70
Niels van der Rest

Ayende a donné une belle explication concernant la différence entre la base de valeurs-clés et la base de données de documents:

Une base de données de documents est, à la base, un magasin de clés/valeurs à une exception près. Au lieu de simplement y stocker n'importe quel blob, une base de données de document nécessite que les données soient stockées dans un format que la base de données peut comprendre (c'est-à-dire JSON, XML etc). Dans la plupart des doc dbs, cela signifie que nous pouvons maintenant autoriser les requêtes sur les données du document.

14
Ashraf Alam