eins. Konzept
In einer Netzwerkumgebung ist die Datenbankanwendung ein C/S- oder Mehrschichtstrukturmuster. In dieser Umgebung sollte die Entwicklung von Datenbankanwendungen in Betracht ziehen, die Menge der Netzwerkdatenübertragung so weit wie möglich zu verringern und die Parallelität so weit wie möglich zu verbessern. Basierend auf diesem Zweck entstand eine zwischengespeicherte Daten -Update -Technologie Der Betrieb ist abgeschlossen, die Daten werden zu einer geeigneten Zeit in die Datenbank übermittelt, wodurch der Netzwerkverkehr stark reduziert, die Last auf dem Datenbankserver reduziert und die Gleichzeitleistung verbessert.
Es sollte gesagt werden, dass dies keine sehr neue Technologie ist. Der Autor stellte jedoch fest, dass einige Programmierer nicht auf die rationale Verwendung dieser Technologie achten und immer noch unter der Idee eigener Anwendungen bleiben, was zu Ineffizienz oder potenziellen Fehlern in den kompilierten Programmen führt. Daher ist es notwendig, die Vorteile, Prinzipien und Methoden der Anwendung dieser Technologie zusammenzufassen (als Beispiel Delphi).
zwei. Für und Wider
Die Daten -Update -Technologie mit Cache hat die folgenden Vorteile:
(1) Minimieren Sie den Netzwerkverkehr und verkürzen Sie den Datenzugriffszeit. Verbessern Sie die Effizienz von Client -Datenbankbetreibern.
.
(3) Reduzieren Sie die Transaktionsverarbeitungszeit effektiv und reduzieren Sie den Durchsatz von gleichzeitigen Transaktionen. Dies kann die Konsistenz der Datenbank besser sicherstellen.
Wir können ein Beispiel geben, um seine Überlegenheit zu veranschaulichen: Der Datenbankbetreiber fügt einen Datendatensatz in die Datenbank ein, stellt jedoch sofort fest, dass der Datensatz den Anforderungen nicht entspricht, sodass er die Daten löscht. In diesem Prozess führt die Serverseite einen Einfügungsvorgang und einen Löschvorgang durch und führt auf der Client- und Serverseite zwei Hin- und Rückfahrdatenübertragungen durch, wenn die Datenaktualisierungstechnologie ohne Puffer verwendet wird. Andere Datenbanktabellen. Wenn die Datenaktualisierungsmethode mit Cache übernommen wird, können diese beiden Schritte der inversen Vorgänge im Datenpuffer des Clients ohne Aktionen auf der Serverseite ausgeführt werden, und es werden keine Netzwerkdatenübertragung und Kaskadierung von Daten erstellt. Dies zeigt die enormen Vorteile der gepufferten Daten -Update -Technologie.
Ein Nachteil der Datenaktualisierung mit Cache ist, dass die Daten, wenn die Daten von anderen Benutzern geändert werden, inkonsistente Situationen wie Verlust und Änderung verursachen. Betrachten Sie die Variablen vollständig. Die Anwendung dieser Technologie erfordert bestimmte Fähigkeiten und bestimmte Denkveränderungen.
drei. Anwendungsprinzipien
Die Vorteile einer Technologie spiegeln sich in einer bestimmten Umgebung wider.
(1) C/S- oder Mehrschicht-Datenbankanwendungen. In diesem Fall kann der Netzwerkverkehr effektiv reduziert werden. In der eigenständigen Situation macht die Technologie keinen Sinn.
(2) Im Falle der Datenaktualisierung mehrerer Tabellen. In der Aktualisierung der Haupttabelle/Detailstruktur wirken sich die Addition und Löschung der beiden Tabellen häufig aufeinander aus. Dies verkürzt die Transaktionszeit effektiv und sorgt besser für die Datenkonsistenz.
(3) In Fällen, in denen die Ladekapazität der Server begrenzt ist. Heutzutage wird die Differenz der Fähigkeiten von Kunden und Servern immer kleiner und kleiner, da die Geschwindigkeit der PCs und der Preisverfall immer kleiner wird, und die Servicefunktionen von Servern werden relativ reduziert. Objektiv ist es erforderlich, die Belastung des Servers aus der Sicht der Software zu verringern, während gepufferte Datenaktualisierungen die Belastung des Servers verringern, indem sie einen Teil der Aktualisierungsaufgabe durch den Client freigeben.
(4) In dem Fall, in dem die Wahrscheinlichkeit, dass Daten gleichzeitig aktualisiert werden, relativ niedrig ist. Wenn dieselben Daten in der Datenbank wahrscheinlich von mehreren Benutzern im gleichen Zeitraum aktualisiert werden, ist diese Situation nicht für zwischengespeicherte Aktualisierungen geeignet, da in diesem Fall ein Fehlerüberschreiben von Daten einfach generiert wird, was zu einer Inkonsistenz der Daten führt.
Vier. Überblick über Kontrollmethoden in Delphi
Als beliebter Datenbankentwicklungs -Tool verfügt Delphi über reichliche Datenbankmanipulationsfunktionen. Delphi bietet umfassende Unterstützung für gepufferte Datenzugriffstechnologie. Im Allgemeinen bietet Delphi den Benutzern mehrere Datensatzsteuerungen für den Zugriff auf Datenbanktabellen wie TTABLE und TQUERY. In der Eigenschaftskontrolle des Datensatzes befindet sich eine CachedUpdate -Option. Nur wenn die tatsächliche eingereichte Methode (z. B. Applicupdates () usw.) aufgerufen wird, wird Delphi die tatsächlichen übermittelten Daten in der Datenbank widerspiegelt. Aktualisieren Sie, wenn die Datenbanktabelle tatsächlich aktualisiert wird. Dies bietet uns die Bequemlichkeit, die Schritte der Datenübermittlung selbst zu steuern. Darüber hinaus verringert es durch dieses Modell die Transaktionsdauer erheblich, reduziert den Netzwerkverkehr und erhöht die Zuverlässigkeit der Anwendung. Im Folgenden geben wir ein bestimmtes Anwendungsmodul an, um zu veranschaulichen, wie dieses Programmiermodell verwendet wird.
fünf. Beispiel für Delphi -Programm
(1) Beschreibung des Anwendungshintergrunds
Angenommen, wir erstellen ein Modul für die Produktreihenfolge. Dieses Modul umfasst drei Datenbanktabellen: Bestellentabelle (mit Feldern wie Bestell -ID, Betrag Summe, Datum des Datums, Kundenname usw.), Bestelldetail (mit Bestelldetail -ID, Bestell -ID und Produktnummer CommondityId), Bestellung), Bestellung), Bestellung Details (mit Bestell -ID, Bestell -ID und Produktnummer CommondityId, Mengenbetrag, Einheitenpreispreis und anderen Feldern), Lagerungstabelle (einschließlich Produktnummer CommondityId, vorhandene Aktien und andere Felder). Unter ihnen sind die Reihenfolge und die Auftragsliste eins-zu-viele-Beziehungen, wobei die Bestellnummer Orderid als Verbindungsfeld. Immer wenn eine Bestellung hinzugefügt wird, muss die Inventarabelle geändert und die Menge der verkauften Waren aus dem Inventar abgezogen werden.
(2) Programm Framework Beschreibung
Das Folgende ist ein Framework für Delphi -Programme, in dem grob erklärt wird, wie der Programmiermodus der Cache -Updates verwendet wird. Die Leser können die Funktionen dieses Programms selbst weiter verbessern.
Einheitsordnung;
{Einheitsname}
Schnittstelle
Verwendung
{Referenziertes Modul}
Fenster, Nachrichten, Systeme, Varianten, Klassen, Grafiken, Steuerelemente, Formulare,
Dialoge, Gitter, Dbgrids, extctrls, dbctrls, toolwin, actnman, actnctrls,
ActnMenus, DB, DBTables;
Typ
{Deklarierte Variablen, hinzugefügte Kontrollpersonen und definierte Methoden und Verfahren}}
TorderForm = class (tform)
TBORDER: TTABLE;
Tbdetail: ttable;
OrderDB: tdatabase;
ActionMainMenubar1: TactionMainMenubar;
Dbnavigator1: tdbnavigator;
DBGRID1: TDBGRID;
Prozedur TBORDERAFTERPOST (Datensatz: tDataset);
Prozedur TBDetailNewRecord (Datensatz: tdataset);
Prozedur TBDetailUpDatereCord (Datensatz: tdataset;
UpdateKind: tupdatekind;
Prozedur tbDetailAfterPost (Datensatz: tdataset);
Prozedur Formcreate (Absender: Tobject);
Privat
{Private Deklarationen}
öffentlich
{Öffentliche Erklärungen}
Ende;
var
OrderForm: torderform;
Durchführung
{$ R *.dfm}
{Das Folgende ist das Hauptprogramm -Framework}
procedure torderForm.formcreate (Absender: tobject);
{Legen Sie die Optionen für die Cache -Update für die Haupttabelle und die detaillierte Tabelle auf true} fest}
Beginnen
Tborder.cachedupdates: = true;
Tbdetail.cachedupdates: = true;
Ende;
procedure torderForm.tborderAfterPost (Datensatz: tdataset);
{Führen Sie den Inhalt dieses Prozesses aus, nachdem Sie die Aktualisierung der Bestellentabelle übermittelt haben.
HINWEIS: Wenn die Eigenschaft von CachedUpdates eines Datensatzes wahr ist,
Anschließend ist die Post -Aktion nur eine Commit -Aktion im Clientpuffer.
Anstatt es tatsächlich an die tatsächliche Datenbank zu senden. Ein echtes Commit zu erreichen,
Die Antrags -Anweisung ist erforderlich. }
Beginnen
Orderdb.starttransaction; // Die Aktualisierung der Transaktion startet die Ausführung
versuchen
Tborder.Applyupdates; // Bitte tatsächliche Aktualisierung der Haupttabelle
Tbdetail.applyupdates; // Reale Aktualisierungen der detaillierten Liste
außer
Orderdb.rollback; // Wenn ein Unfall auftritt, rollen Sie dann die Transaktion zurück und beenden Sie den Prozess
Ausfahrt;
Ende;
Orderdb.commit; // Wenn kein Unfall auftritt, schließen Sie dann das Transaktionsausschuss ab
Tborder.commitupdates; // den Clientpuffer der TBORD -Tabelle löschen
Tbdetail.commitupdates; // den Clientpuffer der TBDetail -Tabelle löschen
Ende;
procedure torderform.tbDetailnewRecord (Datensatz: tDataset);
{Die Aktion, die ausgefüllt wird, wenn eine detaillierte Liste hinzugefügt wird. }
Beginnen
Tbdetail.fieldbyName ('orderId'). Asideger: = tborder.fieldByName ('orderId'). Assineer;
Datei: // Das Feld "OrderID" der Haupttabelle dem Feld "OrderID" der detaillierten Tabelle zuweisen.
Ende;
procedure torderForm.tbDetailUpDatereCord (Datensatz: tDataset;
UpdateKind: tupdatekind;
{Wenn die Datenbanktabelle tatsächlich aktualisiert wird, werden die Operationen, die gleichzeitig ausgeführt werden müssen, im OnupdatereCord -Ereignis definiert.
In diesem Fall wird ein Kaskadierungs -Update -Betrieb der detaillierten Liste und Inventarabelle durchgeführt.
Achten Sie darauf: Die in diesem Prozess ausgeführten Vorgänge sind Aktionen, die bei der Aktualisierung der Datenbank durchgeführt werden.
Anstelle der Aktionen bei der Aktualisierung der zwischengespeicherten Daten des Kunden}}
Var temp_query: TQuery;
Beginnen
Wenn updatekind = ukInsert dann Datei: // ist, wenn der Aktualisierungstyp einen neuen Datensatz einfügen soll, aktualisieren Sie den entsprechenden Bestandsbetrag
mit temp_query tun
Beginnen
schließen;
Sql.clear;
SQL.ADD ('Aktualisierungsspeicher set set Stocks = Stocks-: Betrag');
SQL.ADD ('WO COMMONDITYID =: CommondityId');
parambyName ('seng'): = tborder.fieldbyName ('seng'). Asfloat;
ParambyName ('comondityId'): = tbdetai.fieldbyName ('commondityId'). Asideger;
ExecSQL;
Ende;
Ende;
procedure torderForm.tbDetailAfterPost (Datensatz: tDataset);
{Führen Sie nach Änderung der Datensätze in der detaillierten Tabelle und der Senden (Post) die Anweisungen in diesem Prozess aus.
Achtung: Diese Art der Einreichung richtet sich an Client -Daten und spiegelt sich nicht wirklich in der Datenbank wider.
In diesem Beispiel besteht die implementierte Funktion darin, das Feld Gesamtbetrag der Haupttabelle zu berechnen}
Beginnen
Tborder.fieldbyName ('Geld'): = 0;
mit tbdetail tun
Beginnen
Erste;
Während nicht eof tun
Beginnen
Tborder.fieldbyName ('Geld'): = tborder.fieldByName ('Geld')+
FieldbyName ('Preis'). Asfloat*FieldbyName ('Betrag');
Datei: // akkumulieren Sie den Betrag der detaillierten Tabelle zum Betrag der Haupttabelle
nächste;
Ende;
Ende;
Ende;
Ende.