Quand utiliser un magasin de données clé-valeur par rapport à une base de données relationnelle plus traditionnelle?

StackOverflow https://stackoverflow.com/questions/1500611

Question

Quand peut-on choisir un magasin de données clé-valeur sur une base de données relationnelle? Quelles considérations vont en décider l'un ou l'autre? Quand mélange des deux la meilleure route? S'il vous plaît fournir des exemples si vous le pouvez.

Était-ce utile?

La solution

Dans mon expérience, si vous même se poser la question de savoir si d'utiliser des pratiques ésotériques traditionnelles vs, puis aller traditionnelle. Bien que les pratiques ésotériques sont sexy, stimulant et amusant, 99,999% des demandes appellent à une approche traditionnelle.

En ce qui concerne Relational vs KV, la question que vous devrait poser est:

  

Pourquoi devrais-je pas veulent utiliser un modèle relationnel pour ce scénario: ...

Puisque vous ne l'avez pas décrit le scénario, il est impossible pour quiconque de vous dire pourquoi vous ne devriez pas l'utiliser. La raison « fourre-tout » pour KV est l'évolutivité, ce qui est un problème maintenant. Connaissez-vous les règles d'optimisation?

  1. Ne pas le faire.
  2. (pour les utilisateurs) Ne pas le faire maintenant.

KV est très solution optimisée pour une évolutivité qui sera très probablement complètement unecessary pour votre application.

Autres conseils

valeur clé, heirarchical, carte-réduire, ou les systèmes de base de données graphique sont beaucoup plus proches des stratégies de mise en œuvre, ils sont fortement liés à la représentation physique. La principale raison de choisir l'un d'entre eux est s'il y a un argument convaincant de performance et il correspond à votre stratégie de traitement de données de très près. Prenez garde, les requêtes ad hoc ne sont généralement pas pratique pour ces systèmes, et vous êtes mieux décider de vos questions à l'avance.

systèmes de bases de données relationnelles tentent de séparer le logique, le modèle axé sur les affaires des stratégies de représentation et de traitement physiques sous-jacents. Cette séparation est imparfaite, mais encore assez bon. Les systèmes relationnels sont parfaits pour la manipulation des faits et d'extraire des informations fiables à partir des collections de faits. Les systèmes relationnels sont également intéressants à des requêtes ad hoc, que les autres systèmes notoirement mauvais à. C'est un grand ajustement dans le monde des affaires et beaucoup d'autres endroits. Voilà pourquoi les systèmes relationnels sont si répandus.

Si c'est une application métier, un système relationnel est presque toujours la réponse. Pour les autres systèmes, il est probablement la réponse. Si vous avez plus d'un problème de traitement de données, comme un pipeline de choses qui doivent se produire et vous avez des quantités massives de données, et vous savez toutes vos questions avant, un autre système peut être bon pour vous.

Si vos données est simplement une liste des choses et vous pouvez obtenir un identifiant unique pour chaque élément, puis un KVS est un bon match. Ils sont mises en œuvre à proximité des simples structures de données que nous avons apprises dans la science informatique de première année et ne permettent pas de relations complexes.

Un simple test: pouvez vous représenter vos données et l'ensemble de ses relations comme une liste chaînée ou d'une table de hachage? Si oui, un KVS peut fonctionner. Si non, vous avez besoin d'un RDB.

Vous avez encore besoin de trouver un KVS qui fonctionnera dans votre environnement. Soutien à KVSes, même les plus grands, est loin d'être ce qu'il est, disons, PostgreSQL et MySQL / MariaDB.

Une base de données relationnelle traditionnelle a des problèmes d'échelle au-delà d'un point. Où ce point est un peu dépend de ce que vous essayez de faire.

Tous (la plupart?) Des fournisseurs de cloud computing fournissent des banques de données clé-valeur.

Cependant, si vous avez une application de taille raisonnable avec une structure de données complexe, puis le support que vous obtenez d'utiliser une base de données relationnelle peut réduire vos coûts de développement.

OMI, paire de valeurs-clés (par exemple des bases de données NoSQL) fonctionne mieux lorsque les données sous-jacente est non structurée, imprévisible, ou de changer souvent. Si vous ne disposez pas des données structurées, une base de données relationnelle va être plus de mal que sa valeur parce que vous aurez besoin de faire beaucoup de changements de schéma et / ou sauter à travers des cerceaux pour se conformer à vos données à la structure.

KVP / JSON / NoSQL est grande parce que les changements à la structure de données ne nécessitent pas refactorisation complètement le modèle de données. Ajout d'un champ à votre objet de données est simplement une question d'ajouter aux données. De l'autre côté de la médaille est qu'il ya moins de contraintes et contrôles de validation dans une base de données KVP / NoSQL qu'une base de données relationnelle afin que vos données pourraient obtenir en désordre.

Il y a des avantages et économies performances de l'espace pour les modèles de données relationnelles. données relationnelles peuvent comprendre Normalisé et de valider les données plus facile car il y a des relations clés et la table des contraintes pour vous aider.

L'un des pires modèles que j'ai vu essaie de faire les deux. Essayer de mettre une paire clé-valeur dans une base de données relationnelle est souvent une recette pour un désastre. Je recommande d'utiliser la technologie qui convient à vos données avant tout.

Si vous voulez O (1) des valeurs basées sur les recherches sur les touches, alors vous voulez un magasin KV. Ce qui signifie, si vous avez des données de la forme k1={foo}, k2={bar}, etc, même si les valeurs sont plus grandes structures / imbriquées, et que vous voulez rapidement des recherches, vous voulez un magasin KV. Même avec une bonne indexation, vous ne pouvez pas atteindre O (1) dans une base de données lookups relationnelle pour les clés arbitraires. Parfois, cela est appelé « au hasard » lookups.

Alliteratively dit, si vous ne jamais question posée par une colonne, une « clé primaire » si vous voulez, de récupérer le reste des données, puis en utilisant cette colonne comme keyspace et le reste des données en tant que valeur dans un magasin de KV est la façon la plus efficace de faire des recherches.

En revanche, si vous interrogez souvent les données par une de plusieurs colonnes, alias vous soutenez une API de requête plus riche pour les données, vous pouvez une base de données relationnelle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top