En dehors de l'/google bigtable scénario, lorsque ne devriez-vous pas utiliser une base de données relationnelle? Pourquoi pas, et que devriez-vous utiliser? (avez-vous appris 'à la dure'?)
Réponses
Trop de publicités?Dans mon expérience, vous ne devriez pas utiliser une base de données relationnelle lorsque l'un quelconque de ces critères sont remplies:
- vos données sont structurées sous forme d'une hiérarchie ou d'un graphique (réseau) de profondeur arbitraire,
- l'accès type modèle met l'accent sur la lecture par rapport à l'écriture, ou
- il n'y a aucune exigence pour les requêtes ad-hoc.
Les grandes hiérarchies et les graphiques ne sont pas traduire bien à des tables relationnelles. Même avec l'aide d'extensions propriétaires comme Oracle CONNECT BY
, à la poursuite de la chute d'arbres est une puissante douleur à l'aide de SQL.
Les bases de données relationnelles ajouter beaucoup de frais généraux pour les simples accès en lecture. De transaction et de l'intégrité référentielle sont puissants, mais exagéré pour certaines applications. Donc, pour lire-pour la plupart des applications, un fichier métaphore est assez bon.
Enfin, tout simplement, vous n'avez pas besoin d'une base de données relationnelle avec ses part entière langage de requête si il n'y a pas inattendu requêtes prévu. Si il n'y a aucun convient de poser des questions comme "combien de 5% de remise widgets bleus ne nous vendre sur la côte est, groupées par vendeur?", et il n'y aura jamais, vous, monsieur, pouvez-vivre à l'abri de la DB.
La base de données relationnelle paradigme fait quelques hypothèses à propos de l'utilisation des données.
- Une relation se compose d'un non-ordonnée ensemble de lignes.
- Toutes les lignes dans une relation ont le même ensemble de colonnes.
- Chaque colonne a un nom fixe et le type de données et la sémantique du sens sur toutes les lignes.
- Lignes dans une relation sont identifiés par des valeurs uniques d'une colonne de clé primaire(s).
- etc.
Ces hypothèses à l'appui de la simplicité et de la structure, au prix d'un peu de flexibilité. Pas toutes les données de gestion des tâches s'inscrivent dans ce type de structure. Les entités ayant des attributs complexes ou variable, les attributs ne sont pas, par exemple. Si vous avez besoin de flexibilité dans les zones où une base de données relationnelle solution ne prend pas en charge, vous devez utiliser un autre type de solution.
Il y a d'autres solutions pour la gestion de données avec des exigences différentes. Des technologies de Web sémantique, par exemple, permet à chaque entité de définir ses propres attributs et à l'auto-description, par le traitement des métadonnées comme des attributs comme pour les données. C'est plus souple que la structure imposée par une base de données relationnelle, mais que la flexibilité est livré avec un coût de son propre.
Dans l'ensemble, vous devez utiliser le bon outil pour chaque tâche.
Voir aussi mon autre réponse à "La Prochaine génération de bases de données."
Il existe trois principaux modèles de données (C. J. Date, E. F. Codd) et je suis l'ajout d'un fichier plat à ceci:
- fichier plat(s) (structure varie - de "stupide" plat de texte pour les fichiers conformes à des grammaires qui, couplée avec des outils très intelligent choses, pense que les compilateurs et ce qu'ils peuvent faire, à l'étroit dans la modélisation de nouvelles choses)
- hiérarchique (arbres, imbriqués jeux - exemples: xml et d'autres langages de balisage, registre, organigrammes, etc; tout peut être modélisés, mais les règles d'intégrité ne sont pas faciles à exprimer et la récupération est difficile d'optimiser automatiquement, certains récupération est rapide et certains est très lent )
- réseau (réseaux, graphes - exemples: navigation bases de données, hyperliens, web sémantique, encore presque tout peut être modélisé mais d'optimisation automatiques de récupération est un problème)
- relationnel (de premier ordre logique des prédicats - exemple: bases de données relationnelles, l'optimisation automatique de la récupération des données)
À la fois hiérarchique et réseau peut être représenté dans relationnelles et relationnelle peut être exprimé dans les deux autres.
La raison que le relationnel est considéré comme "mieux" est la nature déclarative et de la normalisation, non seulement la langue d'extraction de données, mais aussi sur le langage de définition de données, y compris la forte déclarative de l'intégrité des données sauvegardées avec stable, évolutive, multi-système de gestion des utilisateurs.
Avantages ont un coût, que la plupart des projets de trouver un bon ratio pour les systèmes multi (application) qui stockent des données à long terme sous une forme qui sera utilisable dans un avenir prévisible.
Si vous n'êtes pas la construction d'un système, mais une seule application, peut-être pour un seul utilisateur, et que vous êtes certain que vous ne voulez pas de multiples applications à l'aide de vos données, ni de plusieurs utilisateurs, à tout moment, dès que vous aurez probablement trouver plus rapidement des approches.
Aussi, si vous ne savez pas quel type de données que vous souhaitez stocker et comment le modèle, puis le modèle relationnel sont les points forts de perdu sur elle.
Ou tout simplement si vous n'avez pas de soins au sujet de l'intégrité de vos données que beaucoup (ce qui peut être très bien).
Toutes les structures de données sont optimisées pour un certain type d'utilisation, seulement relationnel, si elle est correctement modélisé essaye de représenter la "réalité" dans la sémantique de manière impartiale. Les gens qui ont eu de mauvaises expérience avec les bases de données relationnelles, généralement, ne se rendent pas compte que leur expérience aurait été bien pire avec d'autres types de modèles de données. Horrible implémentations sont possibles, et notamment avec les bases de données relationnelles, où il est relativement facile de construire des modèles complexes, vous pourriez vous retrouver avec un monstre sur vos mains. Pourtant je me sens toujours mieux quand j'essaie d'imaginer le même monstre en xml.
Un bon exemple de modèle relationnel est, OMI, est le ratio de la complexité vs brièveté des questions que vous trouverez qui impliquent SQL.
Je vous suggère de visiter la Haute Évolutivité blog, qui traite de ce sujet sur une base quasi quotidienne et a de nombreux articles sur les projets qui ont choisi distribué hache, etc. plus de RDMBS.
Le rapide (mais très incomplète), c'est que pas toutes les données se traduit bien dans les tables de moyens efficaces. Par exemple, si vos données est essentiellement un gros dictionnaire, il y a probablement beaucoup plus rapidement des solutions de rechange que le bon vieux SGBDR. Cela dit, il est principalement une question de performance, et si la performance n'est pas une préoccupation majeure dans un projet, et de la stabilité, de cohérence et de fiabilité, par exemple, sont, alors je ne vois pas beaucoup de point de plonger au cœur de ces technologies lors de SGBDR est beaucoup plus mature et bien développé régime, avec le soutien dans toutes les langues et les plates-formes et d'un vaste ensemble de solutions à choisir.