Quand ne devriez-vous pas utiliser une firebase database relationnelle?

En dehors du scénario google / bigtable, quand ne devriez-vous pas utiliser une firebase database relationnelle? Pourquoi pas, et que devriez-vous utiliser? (avez-vous appris “à la dure”?)

D’après mon expérience, vous ne devriez pas utiliser une firebase database relationnelle lorsque l’un de ces critères est vrai:

  • vos données sont structurées comme une hiérarchie ou un graphique (réseau) de profondeur arbitraire,
  • le modèle d’access typique met l’accent sur la lecture sur l’écriture, ou
  • il n’y a pas besoin de requêtes ad hoc.

Les hiérarchies et les graphes profonds ne se traduisent pas bien dans les tables relationnelles. Même avec l’aide d’extensions propriétaires telles que Oracle CONNECT BY , la recherche d’arbres est une tâche extrêmement pénible avec SQL.

Les bases de données relationnelles ajoutent beaucoup de surcharge pour un access en lecture simple. L’intégrité transactionnelle et référentielle est puissante, mais exagérée pour certaines applications. Donc, pour la plupart des applications en lecture, une métaphore de fichier est suffisante.

Enfin, vous n’avez simplement pas besoin d’une firebase database relationnelle avec son langage de requête complet si aucune requête inattendue n’est attendue. S’il n’y a pas de costume posant des questions comme “combien de widgets bleus à 5% ont été vendus sur la côte Est, regroupés par vendeur?”, Et il n’y en aura jamais, alors vous pouvez vivre sans DB.

Le paradigme de la firebase database relationnelle émet certaines hypothèses sur l’utilisation des données.

  • Une relation consiste en un ensemble non ordonné de lignes.
  • Toutes les lignes d’une relation ont le même ensemble de colonnes.
  • Chaque colonne a un nom fixe, un type de données et une signification sémantique sur toutes les lignes.
  • Les lignes d’une relation sont identifiées par des valeurs uniques dans les colonnes de clé primaire.
  • etc.

Ces hypothèses soutiennent la simplicité et la structure, au prix d’une certaine flexibilité. Toutes les tâches de gestion de données ne correspondent pas à ce type de structure. Les entités avec des atsortingbuts complexes ou des atsortingbuts de variable ne le font pas, par exemple. Si vous avez besoin de flexibilité dans des domaines où une solution de firebase database relationnelle ne le prend pas en charge, vous devez utiliser un type de solution différent.

Il existe d’autres solutions pour gérer les données avec des exigences différentes. La technologie du Web sémantique, par exemple, permet à chaque entité de définir ses propres atsortingbuts et de s’auto-décrire, en traitant les métadonnées comme des atsortingbuts, tout comme les données. Ceci est plus flexible que la structure imposée par une firebase database relationnelle, mais cette flexibilité a un coût qui lui est propre.

Dans l’ensemble, vous devez utiliser le bon outil pour chaque travail.

Voir aussi mon autre réponse à ” Les bases de données Next-gen “.

Je vous suggère de visiter le blog High Scalability , qui traite de ce sujet presque quotidiennement et contient de nombreux articles sur des projets qui ont choisi des hachages dissortingbués, etc. sur RDMBS.

La réponse rapide (mais très incomplète) est que toutes les données ne se traduisent pas bien dans les tableaux de manière efficace. Par exemple, si vos données sont essentiellement un grand dictionnaire, il existe probablement des alternatives beaucoup plus rapides que les anciens SGBDR. Cela étant dit, il s’agit surtout d’une question de performance, et si la performance n’est pas une préoccupation majeure dans un projet, et que la stabilité, la cohérence et la fiabilité, par exemple, le sont, Le SGBDR est un système beaucoup plus mature et bien développé, avec un support dans toutes les langues et sur toutes les plates-formes et un vaste choix de solutions.

Il existe trois principaux modèles de données (CJDate, EFCodd) et j’ajoute un fichier plat à ceci:

  • fichier (s) plat (la structure varie – du texte plat “stupide” aux fichiers conformes aux grammaires qui, associés à des outils astucieux, font des choses très intelligentes, pensent des compilateurs et ce qu’ils peuvent faire, réduisent les applications dans la modélisation de nouvelles choses)
  • hiérarchique (arborescences, ensembles nesteds – exemples: xml et autres langages de balisage, registre, organigrammes, etc.; tout peut être modélisé, mais les règles d’intégrité ne sont pas faciles à exprimer et la récupération est difficile à optimiser automatiquement; très lent )
  • réseau (réseaux, graphes – exemples: bases de données de navigation, hyperliens, web sémantique, encore une fois presque tout peut être modélisé mais l’optimisation automatique de la récupération est un problème)
  • relationnel (logique de prédicat du premier ordre – exemple: bases de données relationnelles, optimisation automatique de la récupération)

La hiérarchie et le réseau peuvent être représentés en relationnel et relationnel peut être exprimé dans les deux autres.

La raison pour laquelle le relationnel est considéré comme «meilleur» est la nature déclarative et la normalisation non seulement du langage de récupération des données, mais aussi du langage de définition des données, y compris la forte intégrité déclarative des données, avec un système de gestion multi-utilisateurs stable et évolutif.

Les avantages ont un coût, que la plupart des projets considèrent comme un bon ratio pour les systèmes (multi-applications) qui stockent des données à long terme dans un avenir prévisible.

Si vous ne construisez pas un système, mais une seule application, peut-être pour un seul utilisateur, et que vous êtes certain de ne pas vouloir plusieurs applications utilisant vos données, ni plusieurs utilisateurs, vous trouverez probablement des approches plus rapides. .

De même, si vous ne savez pas quel type de données vous souhaitez stocker et comment le modéliser, les forces du modèle relationnel sont gaspillées.

Ou si vous ne vous souciez tout simplement pas de l’intégrité de vos données (ce qui peut être correct).

Toutes les structures de données sont optimisées pour un certain type d’utilisation, seul le relationnel, s’il est correctement modélisé, tente de représenter la «réalité» de manière sémantique. Les personnes ayant une mauvaise expérience des bases de données relationnelles ne réalisent généralement pas que leur expérience aurait été bien pire avec d’autres types de modèles de données. Des mises en œuvre horribles sont possibles, et en particulier 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 exemple de la qualité du modèle relationnel, à savoir l’OMI, est le rapport entre la complexité et la brièveté des questions qui impliquent le langage SQL.

Il y a quinze ans, je travaillais sur un système de risque de crédit (essentiellement un grand système de marche dans les arbres). Nous utilisions Sybase sur HPUX & solaris et performnce nous tuait. Nous avons embauché des consultants directement auprès de Sybase, qui a déclaré que cela était impossible. Ensuite, nous sums passés à une firebase database OO (Object Store dans ce cas) et avons obtenu environ 100 fois plus de performance (et le code était environ 100 fois plus facile à écrire).

Mais de telles situations sont assez rares – une firebase database relationnelle est un bon premier choix.

Lorsque votre schéma varie beaucoup, vous aurez du mal avec les bases de données relationnelles. C’est là que les bases de données XML ou les bases de données de paires clé-valeur fonctionnent le mieux. Vous pouvez également utiliser IBM DB2 et gérer les données relationnelles et les données XML par un seul moteur de firebase database.

Il y a environ 7-8 ans, j’ai travaillé sur un site Web qui a gagné en popularité au-delà de nos attentes initiales et nous a posé des problèmes de performance. Étant donné que nous étions tous relativement inexpérimentés dans le domaine des projets Web, cela nous a imposé une charge de travail considérable au-delà de la séparation des bases de données sur des serveurs distincts, l’équilibrage de charge, etc.

Un jour, j’ai pensé à quelque chose d’assez simple. Étant donné que le site était basé sur les utilisateurs, leurs profils étaient stockés dans une table de firebase database de la manière habituelle – identifiant utilisateur, beaucoup de variables d’information et autres éléments – qui apparaissaient comme une page de profil. . J’ai vidé toutes ces données dans un simple fichier html, déjà préparé en tant que page de profil des utilisateurs et qui a reçu un coup de pouce significatif – essentiellement un cache. J’ai même créé un système qui, lorsque l’utilisateur modifiait ses informations de profil, analysait le fichier HTML d’origine, le modifiait, puis récupérait le code HTML dans le système de fichiers, ce qui lui donnait encore plus de poids.

J’ai créé quelque chose de similaire avec des messages envoyés aux utilisateurs. Fondamentalement, où que je puisse faire un système contourner une firebase database, en évitant un INSERT ou UPDATE, j’ai eu un coup de pouce significatif. Cela peut sembler un sens commun, mais c’était un moment instructif. Ce n’est pas une éviction de la configuration relationnelle en soi, mais c’est un évitement de la firebase database – KISS.