un. concept
Dans un environnement réseau, l'application de la base de données est un modèle de structure C / S ou multicouche. Dans cet environnement, le développement d'applications de la base de données devrait envisager de réduire autant que possible la quantité de transmission des données du réseau et d'améliorer la concurrence. Sur la base de cet objectif, une technologie de mise à jour de données en cache a vu le jour. L'opération est terminée, les données sont soumises à la base de données à un moment donné à un moment approprié, ce qui réduit considérablement le trafic réseau, réduit la charge sur le serveur de base de données et améliore les performances de concurrence.
Il convient de dire qu'il ne s'agit pas d'une très nouvelle technologie. Cependant, l'auteur a constaté que certains programmeurs ne prêtent pas attention à l'utilisation rationnelle de cette technologie et restent à l'idée d'applications autonomes, entraînant des erreurs d'inefficacité ou potentielles dans les programmes compilés. Par conséquent, il est nécessaire de résumer les avantages, les principes et les méthodes d'application de cette technologie (prendre Delphi comme exemple).
deux. Pour les avantages et les inconvénients
La technologie de mise à jour des données avec Cache présente les avantages suivants:
(1) minimiser le trafic réseau et réduire le temps d'accès aux données. Améliorer l'efficacité des opérateurs de base de données clients.
(2) Réduit le fardeau du serveur de base de données, car de nombreuses mises à jour, modifications et opérations de suppression répétées peuvent être terminées dans le tampon du client, et les résultats ne sont soumis qu'au serveur à la fin.
(3) Réduire efficacement le temps de traitement des transactions et réduire le débit des transactions simultanées. Cela peut mieux garantir la cohérence de la base de données.
Nous pouvons donner un exemple pour illustrer sa supériorité: l'opérateur de la base de données inserte un enregistrement de données dans la base de données, mais constate immédiatement que l'enregistrement ne répond pas aux exigences, il supprime donc les données. Dans ce processus, si la technologie de mise à jour des données sans tampon est utilisée, le côté serveur effectuera une opération d'insertion et une opération de suppression, et effectuera deux transmissions de données aller-retour du côté client et du serveur, et si ces données sont utilisées pour être avec Autres tables de base de données. Si la méthode de mise à jour des données est adoptée avec le cache, ces deux étapes d'opérations inverses peuvent être terminées dans le tampon de données du client sans aucune action du côté serveur, et aucune transmission de données réseau et mise à jour en cascade des données ne seront générées. Cela montre les énormes avantages de la technologie de mise à jour des données tamponnée.
Un inconvénient de la mise à jour des données avec le cache est que les données sont stockées sur le client, si les données sont modifiées par d'autres utilisateurs, il provoquera des situations incohérentes telles que la perte et la modification. Considérez pleinement les variables. L'application de cette technologie nécessite certaines compétences et certains changements de réflexion.
trois. Principes de demande
Les avantages de toute technologie se reflètent dans un certain environnement.
(1) Occasions d'application de la base de données C / S ou multicouches. Dans ce cas, le trafic réseau peut être effectivement réduit. Dans une situation autonome, la technologie n'a aucun sens.
(2) Dans le cas de la mise à jour des données de plusieurs tables. Par exemple, dans la mise à jour de la structure principale de la table / détail, l'addition et la suppression des deux tables se affectent souvent. Cela raccourcit efficacement le temps de transaction et assure mieux la cohérence des données.
(3) Dans les occasions où la capacité de charge du serveur est limitée. De nos jours, avec l'augmentation de la vitesse des PC et la diminution du prix, la différence dans les capacités des clients et des serveurs devient de plus en plus petite, et les capacités de service des serveurs sont relativement réduites. Objectivement, il est nécessaire de réduire le fardeau du serveur du point de vue du logiciel, tandis que les mises à jour de données tamponnées réduisent la charge du serveur en partageant une partie de la tâche de mise à jour par le client.
(4) Dans le cas où la probabilité de mise à jour des données en même temps est relativement faible. Si les mêmes données dans la base de données sont susceptibles d'être mises à jour par plusieurs utilisateurs au cours de la même période, cette situation ne convient pas aux mises à jour mises en cache, car dans ce cas, l'écrasement d'erreurs des données est facilement généré, entraînant une incohérence des données.
Quatre. Aperçu des méthodes de contrôle à Delphi
En tant qu'outil de développement de base de données populaire, Delphi possède de riches fonctions de manipulation de la base de données. Delphi fournit une prise en charge complète de la technologie d'accès aux données tamponnées. Généralement, Delphi fournit aux utilisateurs plusieurs contrôles de jeu de données pour accéder aux tables de base de données telles que TTable et TQuery; Il y a une option CacheDupdate dans le contrôle de la propriété de l'ensemble de données. , ce n'est que lorsque la méthode réelle soumise (telle que ApplicationUpdates (), etc.) est appelée, Delphi reflète les données soumises réelles à la base de données. être mis à jour lorsque le tableau de la base de données est réellement mis à jour. Cela nous permet de contrôler nous-mêmes les étapes de la soumission des données. De plus, grâce à ce modèle, il réduit considérablement la durée des transactions, réduit le trafic réseau et augmente la fiabilité de l'application. Ci-dessous, nous donnons un module d'application spécifique pour illustrer comment utiliser ce modèle de programmation.
cinq. Exemple du programme Delphi
(1) Description de l'arrière-plan de l'application
Supposons que nous fabriquons un module pour le traitement des commandes de produits. Ce module comprend trois tables de base de données: commande de commande de commande (avec des champs tels que l'ID de commande, le montant du montant, la date de la date, le nom de nom du client, etc.), le détail de commande (avec l'identifiant de détail de commande, l'ID de commande et le numéro de produit CommondityID), la commande Détail (avec l'ID de commande, l'ID de commande et le numéro de produit CommondityID, le montant de la quantité, le prix unitaire et les autres champs), le stockage de la table d'inventaire (y compris le numéro de produit CommondityID, les actions existantes et autres champs). Parmi eux, l'ordre et la liste des commandes sont des relations un à plusieurs, avec le numéro de commande OrderId comme champ de connexion. Chaque fois qu'une commande est ajoutée, le tableau des stocks doit être modifié et la quantité de marchandises correspondantes vendues est soustraite de l'inventaire.
(2) Description du cadre du programme
Ce qui suit est un cadre pour les programmes Delphi, qui explique à peu près comment utiliser le mode de programmation des mises à jour de cache. Les lecteurs peuvent encore améliorer les fonctions de ce programme.
commande unitaire;
{Nom de l'unité}
interface
usages
{Module référencé}
Windows, messages, systèmes, variantes, classes, graphiques, contrôles, formulaires,
Dialogues, grilles, dbgrids, extctrls, dbctrls, toolwin, actnman, actnctrls,
ActnMenus, DB, DBTables;
Taper
{Variables déclarées, contrôles ajoutés et méthodes et procédures définies}
TorderForm = class (tform)
TBBORDER: TTABLE;
TBDETAIL: TTABLE;
ORDERDB: TDATABASE;
ActionMainMenubar1: TactionMainMenubar;
Dbnavigator1: tdbnavigator;
Dbgrid1: tdbgrid;
Procédure tborderafterPost (ensemble de données: tdataset);
Procédure tbDetailNewRecord (ensemble de données: tdataset);
Procédure tbDetailUpDateRecord (ensemble de données: tdataset;
UpdateKind: TupDateKind; Var UpdateAction: TupDateAction);
Procédure tbDetailAfterPost (ensemble de données: tdataset);
Procédure FormCreate (expéditeur: tobject);
Privé
{Déclarations privées}
publique
{Déclarations publiques}
fin;
var
OrderForm: TORORDORM;
Mise en œuvre
{$ R * .dfm}
{Ce qui suit est le cadre du programme principal}
Procédure torderForm.formCreate (expéditeur: tobject);
{Définissez les options de mise à jour du cache pour la table principale et la table détaillée sur true}
Commencer
Tborder.cachedUpdates: = true;
TbDetail.CachedUpdates: = true;
fin;
Procédure torderForm.tborDerafterPost (ensemble de données: tdataset);
{Après avoir soumis la mise à jour de la table de commande, exécutez le contenu de ce processus.
Remarque: Si la propriété CachedUpdate d'un ensemble de données est vraie,
Ensuite, l'action de publication n'est qu'une action de validation dans le tampon client.
Au lieu de le soumettre à la base de données réelle. Pour réaliser un véritable engagement,
La déclaration ApplicationUpdates est requise. }
Commencer
Orderdb.startTransaction; // La transaction de mise à jour démarre l'exécution
essayer
Tborder.applyupdates; // s'il vous plaît mise à jour réelle du tableau principal
TbDetail.Applyupdates; // réelles mises à jour de la liste détaillée
sauf
OrderDb.Rollback; // Si un accident se produit, alors reculez la transaction et sortez du processus
sortie;
fin;
OrderDb.Commit; // Si aucun accident ne se produit, alors terminez le commit de transaction
Tborder.commitupdates; // effacer le tampon client de la table TBorder
TbDetail.Commitupdates; // effacer le tampon client de la table TBDetail
fin;
Procédure torderForm.tbDetailNewRecord (ensemble de données: tdataset);
{L'action terminée lorsqu'une liste détaillée est ajoutée. }
Commencer
TbDetail.FieldByName ('OrderId'). ASINTeger: = tborder.fieldByName ('OrderId'). ASINTEGER;
Fichier: // Attribuez le champ OrderId de la table principale au champ OrderId de la table détaillée. Ce champ est le champ associé des deux tables.
fin;
Procédure torderForm.tbdetailUpDateRecord (ensemble de données: tdataset;
UpdateKind: TupDateKind; Var UpdateAction: TupDateAction);
{Lorsque la table de la base de données est réellement mise à jour, les opérations qui doivent être effectuées simultanément sont définies dans l'événement OnUpDateRecord.
Dans ce cas, une opération de mise à jour en cascade de la liste détaillée et du tableau d'inventaire est effectuée.
Faites attention: les opérations effectuées dans ce processus sont des actions effectuées lorsque la base de données est réellement mise à jour.
Au lieu des actions effectuées lors de la mise à jour des données mises en cache du client}
Var temp_query: tQuery;
Commencer
Si updatekind = ukInsert, fichier: // si le type de mise à jour est d'insérer un nouvel enregistrement, mettez à jour le montant de l'inventaire correspondant
avec temp_query faire
Commencer
fermer;
Sql.clear;
SQL.Add ('Update Storage Set Stocks = Stocks-: Montant');
SQL.Add ('WHERE COMMONDITYID =: CommonDityId');
ParamBYName ('Montant'): = tborder.fieldByName ('Montant'). Asfloat;
ParamBYName ('CommondityId'): = tbDetai.FieldByName ('CommonDityId'). ASINTEGER;
EXECSQL; Fichier: // Exécutez l'instruction SQL pour mettre à jour l'inventaire et soustraire le montant de l'inventaire correspondant.
fin;
fin;
Procédure torderForm.tbDetailAfterPost (ensemble de données: tdataset);
{Après avoir modifié les enregistrements dans le tableau détaillé et soumission (post), exécutez les instructions de ce processus.
Faites attention: ce type de soumission est ciblé sur les données du client et ne se reflète pas vraiment dans la base de données.
Dans cet exemple, la fonction implémentée consiste à calculer le champ de quantité totale du tableau principal}
Commencer
Tborder.fieldByName ('Money'): = 0;
avec tbdetail do
Commencer
d'abord;
Bien que ne fasse pas
Commencer
Tborder.fieldByName ('Money'): = tborder.fieldByName ('Money') +
FieldByName ('Price'). Asfloat * fieldByName ('montant');
fichier: // accumuler le montant du tableau détaillé au champ de montant du tableau principal
suivant;
fin;
fin;
fin;
fin.