ORDA – Optimierung der Leistung mit vollständiger Kontrolle über REST-Anfragen

In einer früheren Version haben Sie entdeckt, wie ORDA REST-Anfragen automatisch optimiert wurden, um die Leistung bei der Arbeit mit einem Remote-Datenspeicher und Client/Server-Konfigurationen zu erhöhen.

Sie haben gelernt, dass Sie Kontexte verwenden können, um die Vorteile der automatischen Optimierung von ORDA-REST-Anfragen zu nutzen.

Das war ein wichtiger Schritt, aber jetzt bieten wir Ihnen die vollständige Kontrolle über das Verhalten Ihrer REST-Anfragen. Da die Leistung ein strategisches Anliegen ist, sind Sie sicher gespannt auf diese neue Funktion!

Und das ist noch nicht alles: Es gibt jetzt neue Tools, die Ihnen helfen, Ihre Probleme zu verstehen und zu beheben.

Lesen Sie weiter, um eine vollständige Präsentation zu erhalten.

HDI: Wie kann ich mit der Kontrolle von REST-Anfragen beginnen?

Wissen Sie noch, was Kontext ist?

Bevor Sie beginnen, hier eine kurze Zusammenfassung:

  • Wenn Sie mit einer Entity-Auswahl arbeiten, löst 4D nach einer Lernphase automatisch optimierte Anfragen aus (die Server-Seiten der Entities werden nur mit den entsprechenden Attributen abgefragt)
  • Sie können einen Kontext verwenden, um diese Optimierung beizubehalten und sie bei der Arbeit mit anderen Entitätsauswahlen (oder Entitäten) wiederzuverwenden.

Haben Sie schon vom Orda-Cache gehört?

Wenn Daten mit ORDA an den Server angefordert werden, werden sie im ORDA-Cache auf dem Client-Rechner abgelegt.

Der ORDA-Cache ist nach Datenklassen organisiert. Die geladenen Entitäten werden im ORDA-Cache als Objekte gespeichert, die den Inhalt der angeforderten Attribute enthalten.

Weitere Details über Kontexte und ORDA-Cache finden Sie in der Summit 2020-Sitzung.

Der neue Schritt: die vollständige Kontrolle über die Kontexte

Wie Sie bereits wissen, werden die Attribute eines Kontexts in der Lernphase von 4D definiert. Dank des Datenspeichers besteht der große Fortschritt darin, dass Sie jetzt mit der Funktion .setRemoteContextInfo()entscheiden können, welche Attribute Sie in einen bestimmten Kontext aufnehmen wollen.

Beispiel

In diesem Beispiel fügen wir die Attribute firstname und lastname der Datenklasse Personen in den Kontext contextA ein.

Wenn Sie also die Funktion all() Funktion ist die erste Personeneinheit für die Lernphase nicht vollständig geladen. Die an den Server gesendeten Anfragen sind bereits vollständig optimiert.

var $ds : 4D.DataStoreImplementation
var $contextA : Object
var $persons : cs.PersonsSelection
var $p : cs.PersonsEntity
var $text : Text

$ds :=Open datastore(New object("hostname"; "school.acme.com"); "schools")

$ds .setRemoteContextInfo("contextA"; "Persons"; New collection("firstname"; "lastname"))
$contextA :=New object("context"; "contextA")
$persons :=$ds.Persons.all($contextA)
$text :=""
For each ($p; $persons)
$text :=$p.firstname+" "+$p.lastname
End for each

über Listenfelder

Beachten Sie, dass Sie, wenn die Entitätsauswahl $persons in einem Listenfeld verwendet wird, die gewünschten Attribute im Kontext des Seitenmodus angeben können.

Im folgenden Beispiel enthält der Kontext des Listenfelds die Attribute firstname und lastname der Datenklasse Personen.

Wenn eine Entität ausgewählt wird, wird sie sofort mit den Attributen des aktuellen Elementkontexts (firstname, lastname, children, gender) geladen.

Es gibt keine Lernphase mehr, in der die erste Entität vollständig geladen werden muss.

var $contextPersons

FormpersonsFormdsPersonsall$contextPersons: Object
var $listAttributes ; $pageAttributes: Collection

$contextPersons :=New object("context"; "persons")
$listAttributes :=New collection("firstname"; "lastname")

Form .ds.setRemoteContextInfo("persons"; Form.ds.Persons; $listAttributes) //Form.ds is a remote datastore

$pageAttributes :=New collection("firstname"; "lastname"; "children"; "gender")
Form .ds.setRemoteContextInfo("persons"; Form.ds.Persons; $pageAttributes; //Form.persons is displayed in a list box

Handhabung der Seitenlänge für Entitätsselektionen

Beachten Sie, dass Sie eine Seitenlänge für vom Server angeforderte Entitätsauswahlen festlegen können. Die gute Nachricht ist, dass dies auch für Attribute von artbezogenen Entitäten gilt.

Im folgenden Beispiel werden die Entitäten „Adresse“ durch Seiten mit 100 Entitäten mit dem Attribut city beim Server angefordert.

Für jede Entität „Adresse“ werden die zugehörigen Entitäten „Personen“ (Entitätsauswahl) von Seiten mit 50 Entitäten mit den Attributen firstname und lastname angefordert.

var $ds : 4D.DataStoreImplementation
var $contextA : Object
var $addresses : cs.AddressSelection
var $a : cs.AddressEntity
var $p : cs.PersonsEntity
var $text : Text

$ds :=Open datastore(New object("hostname"; "school.acme.com"); "schools")

$ds .setRemoteContextInfo("contextA"; $ds.Address; "city, persons:50, persons.lastname, persons.firstname"; "main"; 100)

$contextA :=New object("context"; "contextA")
$addresses :=$ds.Address.all($contextA)

$text :=""
For each ($a; $addresses)
$text :=$text+"/"+$a.city
For each ($p; $a
.persons )
$text :=$text+" - "+$p.firstname+$p.lastname
End for each
End for each

der ORDA-Cache

Weitere nützliche Werkzeuge werden zur Verfügung gestellt, um die ORDA-Cache-Zeitüberschreitung und die maximale Größe zu handhaben und den Inhalt des ORDA-Cache zu überprüfen.

Weitere Informationen finden Sie auf der Dokumentations-Website.

Sie können zum Beispiel den ORDA-Cache-Timeout ändern, um die Häufigkeit Ihrer Anfragen anzupassen. Dies ist nützlich, wenn Sie wissen, ob sich Ihre Daten häufig ändern werden oder nicht.

Beispiel

Im folgenden Beispiel enthält die Datenklasse „Cities“ Postleitzahlen und Städte, die sich wahrscheinlich nicht sehr oft ändern werden.

var $ds : 4D.DataStoreImplementation
$ds :=Open datastore(New object("hostname"; "school.acme.com"); "schools")
// The entities will expire after 3 hours
// There are 350 entities maximum in the cache of the Cities dataclass
$ds .Cities.setRemoteCacheSettings(New object("timeout"; 10800; "maxEntries"; 350))

Um Speicherplatz zu sparen, können Sie auch die maximale Anzahl der im Cache vorhandenen Entitäten für jede Datenklasse aktualisieren.

Kontexte prüfen und zurücksetzen

Um in dieses faszinierende Thema einzutauchen, besuchen Sie die Dokumentation.

Wichtig: Beachten Sie, dass Sie für ein vollständiges Verständnis und zur Fehlersuche wahrscheinlich die Anfragen inspizieren müssen.

eine weitere Sache

Die Funktion dataClass.getCount() steht nun zur Verfügung, um die Anzahl der Entitäten in einer Datenklasse zu ermitteln, was zwar nicht direkt mit dieser Funktion zusammenhängt, aber dennoch nützlich ist.

Dies vermeidet den Aufruf von dataclass. all().length baut eine Entitätsauswahl auf dem Server auf und lädt die erste Entität vollständig auf dem Client.

var $count : Integer

$count :=ds.Persons.getCount()

Spielen Sie jetzt mit dem HDI und der Summit 2020 Demo

Laden Sie die HDI- und Summit 2020-Demo herunter, um mehr zu erfahren!

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert ist seit 2017 als Product Owner im 4D Produktteam tätig. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Marie-Sophie ist Absolventin der ESIGELEC Ingenieurschule und begann ihre Karriere als Ingenieurin bei IBM im Jahr 1995. Sie nahm an verschiedenen Projekten teil (Wartungs- oder Build-Projekte) und arbeitete als Cobol-Entwicklerin. Dann arbeitete sie als UML-Designerin und Java-Entwicklerin. In letzter Zeit bestand ihre Hauptaufgabe darin, funktionale Anforderungen zu analysieren und zu schreiben sowie Geschäfts- und Entwicklungsteams zu koordinieren.