Die Verwendung von ORDA für den Zugriff auf große Tabellen (insbesondere solche mit Beziehungen) im Client/Server-Modus wurde erheblich verbessert. Mit 4D v17 R5 wird die LAN-Leistung um das 2-3fache und die WAN-Leistung um das 30fache gesteigert. Und das Beste daran: Sie müssen nichts an Ihrem Code ändern, alles läuft automatisch. Interessant, nicht wahr? Nun, lassen Sie uns die Details betrachten.
Wenn Sie einen Datensatz in einer Client-Anwendung laden, werden normalerweise alle Felder des Datensatzes vom Server übertragen. Auch solche, die Sie nicht benötigen. Daher hängt die Leistung von Ihrem Anwendungsdesign, Ihrer Datenbankstruktur und den Netzwerkkapazitäten ab … vor allem, wenn Sie große Tabellen mit mehreren oder großen Feldern verwenden. Wenn Sie beispielsweise in einem langsamen WAN nur wenige Felder in auswahlbasierten Listenfeldern (von Tabellen mit Dutzenden von Feldern mit vielen Beziehungen/Feldern und großen Texten/Bildern) verwenden, wird Ihre Anwendung bald nicht mehr funktionieren.
ORDA-Anfragen nutzten bisher das gleiche Feldladeprinzip … bis jetzt! Mit v17 R5 analysiert der Server die Attribute, die Sie in jeder Datenklasse benötigen, und identifiziert die zugehörigen Attribute, so dass nur die angeforderten Daten zwischen dem Server und dem Client übertragen werden.
FALLSTUDIE
Um diese Verbesserungen zu veranschaulichen, verwenden wir eine einfache Datenbank:
Die Tabelle Book hat 1.000 Datensätze. Das Feld „Zusammenfassung“ enthält zwischen 100 und 2.000 Zeichen und das Feld „Miniaturansicht“ enthält etwa 10 KB an Bildern. In der zugehörigen Tabelle Autor enthält das Feld Biografie in jedem Datensatz 10.000 Zeichen.
Mit dieser Datenbank haben wir zwei auswahlbasierte Listenfelder erstellt: eines mit einer ORDA-Entitätsauswahl und das andere mit einer klassischen Auswahl. In jedem Listenfeld wird der Titel des Buches zusammen mit dem Autor angezeigt, um Beziehungen zu aktivieren. Außerdem haben wir eine Aktion hinzugefügt, mit der das Listenfeld automatisch gescrollt wird, damit kein menschliches Handeln die Ergebnisse stören kann:
Die Messungen in der Tabelle unten zeigen die TCP-Frames, die zwischen dem Server und dem Client (einschließlich aller Bestätigungsantworten) des Beispiels im Video übertragen wurden. Die Netzwerkverbindung des Clients ist Wi-Fi Typ „802.11ac“ (250Mbps Download, 100Mbps Upload , mit 1ms Verzögerung):
Mode | Frames | Overall size (bytes) | Dauer (ms) |
Klassisch | 4,070 | 473,924 | 5,747 |
ORDA | 46 | 6,744 | 692 |
Wie Sie sehen, bedeutet die Verwendung von ORDA, dass nur wenige Bilder übertragen werden! Und die Dauer? Je langsamer das Netz ist, desto größer ist der Unterschied zwischen ORDA und dem klassischen Ansatz.
Ein neues Konzept: OPTIMIERUNGS-Kontext
Damit können Sie aufzeichnen, was das System gelernt hat, um es später wiederzuverwenden. Dazu müssen Sie lediglich ein Optionsobjekt mit einem„Kontext„-Attribut erstellen und dann den gewünschten Wert angeben, bevor Sie das Objekt als Parameter setzen:
Wenn (Form.currentContext=Null)
Form .currentContext:=New object("context"; "contextListboxBookAndAuthor")
End if
Form .books:=ds.Book.all(Form.currentContext)
Dieses Optionsobjekt kann jetzt mit dem Create entity selection Befehl und den folgenden Methoden verwendet werden: dataClass. query (), entitySelection. query (), dataClass. fromCollection (), und dataClass. all().
N.B.: In der Messtabelle haben wir die Kontextfunktion nicht aktiviert, um so genau wie möglich zu sein.
Zum Schluss:
ORDA vereinfacht Ihre Entwicklungen:
- Es beschleunigt die Übertragung von Informationen – ohne Änderungen am Code.
- Sie müssen keine großen Felder aus einer Tabelle auslagern und in einer 1-1-Tabelle speichern, um Auswirkungen auf den Client/Server-Modus zu vermeiden.
- Wenn Sie außerhalb des LANs auf den Server zugreifen wollen, können Sie den Client jetzt direkt anschließen … ohne Remote-Desktop-Technologien zu verwenden.