Séparation lecture-écriture
Lorsque l’activité d’une entreprise continue de croître et que le nombre d’utilisateurs augmente de manière significative, la base de données d’origine risque de ne plus pouvoir se maintenir. Alors oui
- Le scale-in, qui augmente les performances du matériel, mais il est probable que le nombre d’utilisateurs continue d’augmenter, et que les performances accrues seront bientôt dépassées.
- Séparation lecture-écriture : La base de données ne peut pas tenir, ce n’est rien d’autre qu’un excès de lecture et d’écriture, surtout s’il y a des requêtes complexes comme les produits les plus populaires des dernières 24 heures. Il nécessite des instructions SQL très complexes, et bien sûr, il est lent à exécuter.
Cependant, pour séparer les lectures et les écritures, la base de données doit être divisée en bibliothèques maîtresses et esclaves.
Les principales bases de données relationnelles sur le marché supportent la réplication des données, ce qui permet de diviser une base de données en deux rôles : maître et esclave, écrire des opérations sur le maître, et synchroniser le serveur maître avec d’autres serveurs esclaves.
Les opérations hors ligne telles que les opérations de lecture et l’analyse des données sont effectuées sur le serveur Slave.
Nous savons que de nombreuses applications sur Internet sont lues, afin que plusieurs esclaves puissent partager la charge et garantir la disponibilité et la correction des données.
Cependant, le code d’application original correspondant doit également être modifié, et il doit être modifié pour utiliser la bibliothèque maîtresse afin d’écrire les données, et utiliser la bibliothèque esclave lors de la lecture des données, ce qui équivaut à la réécriture.
Requêtes complexes
Cependant, même après avoir réécrit le code, j’ai constaté que les performances n’étaient toujours pas significativement améliorées car trop de requêtes complexes étaient utilisées, et nous avons dit dans le composant de base de données que les jointures sont très gourmandes en performance.
Peut-on donc utiliser une table séparée pour stocker les produits populaires des dernières 24 heures, afin que nous n’ayons besoin que de SQL simple pour le faire ?
En d’autres termes, un ensemble unique de tables de base de données est inapproprié pour différents comportements tels que les rapports, les recherches, les transactions, etc.
Le tableau actuel est conçu pour ajouter et modifier des données, et n’est pas adapté aux requêtes complexes.
Mais nous devons aussi considérer comment cette base de requêtes est mise à jour, ou si nous pouvons tolérer ce délai, ou si elle ne peut pas être mise à jour en temps réel.
CQRS
La tolérance du retard doit être vue d’un point de vue commercial, comme les meilleurs produits populaires des dernières 24 heures, un peu d’information obsolète n’a pas beaucoup d’impact, seule la cohérence finale est requise.
Nous pouvons utiliser CQRS (Command Query Responsibility Segregation), c’est-à-dire la séparation des commandes pour ajouter ou modifier des commandes des responsabilités de requête.
Dans CQRS, l’accent est mis sur la séparation entre lecture (requête) et écriture (commande), car les données lues par les utilisateurs sont généralement obsolètes, donc pourquoi avoir besoin de lire depuis la base de données ? On peut établir directement une source de données de lecture. Cela peut être du cache, du XML, du JSON, etc.
Comment résoudre le problème de la mise à jour mentionnée précédemment ? Vous pouvez utiliser Event, c’est-à-dire un événement, par exemple, lorsqu’un produit est vendu, vous pouvez publier un événement pour modifier le modèle de lecture original.
De cette manière, la synchronisation devient asynchrone via le mécanisme d’événement.
Enfin, cette méthode est mieux utilisée uniquement pour des requêtes complexes, et les requêtes simples originales sont toujours récupérées dans la base de données relationnelle. Pourquoi ? Parce que l’introduction d’une nouvelle technologie nécessite un prix, comme des étapes de mutation synchrone et des mécanismes d’événements, nous ne pouvons pas seulement voir les avantages des nouvelles technologies et non les inconvénients.
|