2010-05-13 12 views
5

Ich untersuche, wie ich eine SQL-basierte Delphi-Anwendung auf Multi-Tier-Thin-Clients verschiebe und Datasnap in Delphi 2010 eingesetzt habe. Ich habe das White Paper von Bob Swart durchgearbeitet und erweitert das weiter.Delphi 2010 Datasnap - Design Query

Meine Hauptfrage ist wirklich, dass ich die Server-Seite in Bezug auf Verbindungen und SQL-Abfragen effizient machen möchte, da mehrere Abfragen gleichzeitig ausgeführt werden und offen bleiben, um Daten abzufragen, kann mir jemand in eine Richtung zeigen Anleitung, wie man eine echte Datasnap Server-Anwendung entwirft, da die Demos nicht detailliert genug sind.

Dank Matt

Antwort

1

Sie haben in Ihrem Design entscheiden:

  • (Mid-Server) Wird verwalten Sitzung oder Client identifizieren ihre Sitzung jede Verbindung (Stateful vs stateless)

  • (Mid-Server) Wie viel zwischengespeicherte Daten Sie haben möchten. Sie können nur einige lästige sehr stabile Tabellen zwischenspeichern und nur abfragen, wenn sie sich ändern (wenn alle Änderungen über den Mid-Server laufen, benötigen Sie etwas wie eine beliebige Markierung - eine GUID, einen Zähler - auf der Tabelle, um Daten zu vergleichen geändert).

  • (Client/Mid-Server) Wenn Ihr Client immer eine vollständige Sammlung von Daten oder nur Fragmente der Sammlung erhalten wird. (Bsp .: ein Produkt kann eine Spalte categoryId haben, die ein FK zu einer Kategorie Tabelle ist. Sie können beide die ganze Zeit senden oder der Client kann nur die Produktdaten anfordern).

  • (Mid-Server/RDBMS) Sie müssen möglicherweise eine Form der benutzerdefinierten Suche bereitstellen. Wenn Sie einen Hinweis auf die am häufigsten verwendeten Suchbedingungen haben, können Sie (falls erforderlich) die Indexabdeckung dafür bereitstellen.

  • (Mid-Server/RDBMS) Bringen Sie keine großartigen Datasets auf den Mid-Server, es sei denn, Sie planen eine aggressive Zwischenspeicherung von Daten und/oder nutzen sie für sie. Mid-Server ist nur eine weitere Client-Anwendung für das RDBMS - wenn sich beide auf demselben Rechner befinden, können Sie einen Speicher/CPU/IO-Wettbewerb mit dem RDBMS eingeben.

  • (Mid-Server/RDBMS) Führen Sie Ihre Geschäftsregeln auf dem Mid-Server aus, ist das Mantra vieler Puristen da draußen. Für mich ist Gleichgewicht der Schlüssel. Angenommen, das RDBMS hat 2000 Stored Procedures (ich übertreibe nicht, es gibt echte Geschäfte mit einer solchen Anzahl von SPs) und Ihr Mid-Server kann eine hervorragende Arbeit an 1500 dieser 2000 Probleme leisten, die von SPs, GREAT gelöst werden. Aber wenn die letzten 500 eine Änderung für das schlechteste sein können, lassen Sie sie in Ruhe. Es kann ein größerer Ärger als der 1500 sein. Mischen Sie also die zwei, und machen Sie diese 500 ein Software-Projekt zu einer anderen Version.

  • (Mid-Server/RDBMS) Was ich für Stored Procedures gesagt habe, kann auch auf Trigger und andere RDBMS-Serverfunktionen angewendet werden, die Ihnen das Leben erleichtern.

  • (Mid-Server/DataSnap) Die meisten Rohdaten können an Dataset-Provider übergeben werden. Lernen Sie jedoch, das OnBeforeUpdateRecord-Ereignis zu nutzen, um bei Bedarf eine benutzerdefinierte Verarbeitung durchzuführen.

  • (Mid-Server/DataSnap) Sie wissen, dass Sie ein ClientDataset nur mit geänderten Daten von dieser Art von Code erstellen können? Sie können sich nicht vorstellen, wie nützlich es sein kann ... :-)

    Cds_New.Data: = Cds_Updated.Delta;