Ein hochvolumiger UBEUniversal Batch Engine. Ein JD Edwards Batch-Programm, das im Hintergrund große Datenmengen verarbeitet oder komplexe Aufgaben ohne direkte Benutzerinteraktion ausführt.-Prozess, der 50.000 Verkaufszeilen verarbeitet, verschwendet häufig 15 % bis 20 % seines Ausführungsfensters mit redundanten F0101Die zentrale Address-Book-Tabelle in JD Edwards. Sie speichert Informationen über Kunden, Lieferanten und andere Geschäftskontakte.-Suchen. Selbst bei optimierter DatenbankindizierungEine Technik zur Beschleunigung des Datenabrufs aus einer Datenbanktabelle durch eine zusätzliche Struktur für schnellere Suchvorgänge. erzeugt der Zugriff auf denselben Address-Book-Datensatz 5.000 Mal in einem einzigen Batch-Lauf unnötigen SQLStructured Query Language. Eine Standardsprache zur Verwaltung und Abfrage relationaler Datenbanken.-Overhead und MiddlewareSoftware, die Softwarekomponenten oder Anwendungen verbindet und den Datenaustausch ermöglicht. In JDE verwaltet sie die Kommunikation zwischen Clients, Applikationsservern und Datenbank.-Latenz. Dieses BSFN-CacheEine Technik, um Ergebnisse von Business Functions temporär im Speicher zu halten und wiederholte Datenbankzugriffe zu reduzieren.-Beispiel für JD EdwardsEin von Oracle entwickeltes ERP-System zur Verwaltung zentraler Geschäftsprozesse wie Finanzwesen, Produktion und Supply Chain. reduziert wiederholte F0101-Lesezugriffe, indem die Suchlogik in einen lokalen Speicherbereich verlagert wird und nach dem ersten FetchDas Abrufen von Daten aus einer Quelle, typischerweise einer Datenbank, in den Speicher zur weiteren Verarbeitung. die Datenbankschicht umgangen wird.
Die Implementierung dieses Patterns erfordert eine pointerbasierte JDECACHEEine JD Edwards API, mit der Entwickler speicherbasierte Caches implementieren können, um wiederholte Datenbankzugriffe zu reduzieren.-Struktur innerhalb einer C Business FunctionEine wiederverwendbare JD Edwards Softwarekomponente, geschrieben in C, die Geschäftslogik kapselt und von Anwendungen oder Reports aufgerufen werden kann.. Anstatt die Standard-Middleware den BufferEin temporärer Speicherbereich, der Daten zwischenspeichert, während sie zwischen Komponenten übertragen oder verarbeitet werden. verwalten zu lassen, steuern wir jdeCacheInitEine JDECACHE API-Funktion zur Initialisierung einer neuen speicherbasierten Cache-Instanz. und jdeCacheFetchEine JDECACHE API-Funktion zum Abrufen eines Datensatzes aus dem Cache, falls vorhanden. manuell, um F0101-Attribute wie Search Type (AT1Ein Feld in JD Edwards, typischerweise in F0101, das den Suchtyp oder die Kategorie eines Address-Book-Datensatzes angibt.) oder Alpha Name (ALPHEin Feld in JD Edwards, typischerweise in F0101, das den Alpha-Namen oder die beschreibende Bezeichnung einer Address-Book-Entität speichert.) direkt im Speicher zu halten. Dieser Ansatz vermeidet Risiken von Zombie-CachesCaches, die nicht korrekt beendet oder freigegeben wurden und dadurch unnötig Speicher belegen oder Stabilitätsprobleme verursachen können., die häufig in schlecht geschriebenem Custom Code auftreten, indem jdeCacheTerminateEine JDECACHE API-Funktion zur Freigabe des von einer Cache-Instanz belegten Speichers. an das Ende des UBE- oder Applikationsprozesses gebunden wird. In einer typischen 9.2-Umgebung kann diese Konfiguration das physische I/OInput/Output-Operationen mit direktem Zugriff auf physische Speichermedien, die langsamer sind als Speicherzugriffe im RAM. für StammdatentabellenZentrale Referenzdaten eines Unternehmens, etwa Kunden, Produkte oder Lieferanten, die sich vergleichsweise selten ändern. deutlich reduzieren, nach meiner Erfahrung oft um mehr als 90 %, und damit die Datenbank-ContentionEine Situation, in der mehrere Prozesse oder Benutzer gleichzeitig auf dieselben Daten zugreifen oder diese ändern wollen und dadurch Verzögerungen oder Sperren verursachen. während hoher Verarbeitungsfenster deutlich senken.
Die Performance-Kosten wiederholter F0101-Lesezugriffe
Ein UBEUniversal Batch Engine. Ein JD Edwards Batch-Programm, das im Hintergrund große Datenmengen verarbeitet oder komplexe Aufgaben ohne direkte Benutzerinteraktion ausführt., der 50.000 Verkaufsauftragszeilen verarbeitet, ruft häufig eine BSFNBusiness Function. Eine wiederverwendbare JD Edwards Komponente, die Geschäftslogik kapselt und oft in C oder als NER umgesetzt ist. auf, um den Alpha-Namen für dieselbe Versandadresse tausende Male zu lesen. Wenn deine Schleife 10.000 Iterationen durchläuft und für jeden Datensatz ein SELECTEine SQL-Anweisung zum Abrufen von Daten aus einer oder mehreren Datenbanktabellen. auf F0101Die zentrale Address-Book-Tabelle in JD Edwards. Sie speichert Informationen über Kunden, Lieferanten und andere Geschäftskontakte. auslöst, belastest du effektiv deine eigene Datenbank. Selbst mit einem gut indizierten Primärschlüssel auf ABAN8Das Address Book Number Feld in F0101, häufig als eindeutiger Schlüssel für Address-Book-Datensätze genutzt. ist die Round-Trip-Latenz zwischen Enterprise ServerDer Applikationsserver in JD Edwards, der Business Logic, UBEs und die Kommunikation mit der Datenbank ausführt. und DatenbankserverEin Server, der die Datenbank hostet und Datenzugriffsanforderungen von Anwendungen oder anderen Servern verarbeitet. nicht null. In einer Standardarchitektur kostet der Datenbank-Middleware-Overhead für einen einzelnen Primärschlüssel-Fetch typischerweise 1 bis 3 Millisekunden. 3 ms wirken trivial, aber multipliziert mit 10.000 Iterationen entsteht erheblicher Overhead, oft mehr als eine halbe Minute reiner I/OInput/Output. Lese- und Schreiboperationen zwischen einem Computersystem und einem Speichermedium oder einem anderen System.-Wartezeit für einen einzigen UBE-Lauf.
Entwickler verlassen sich häufig auf Standard-Servicefunktionen wie GetAddressBookDescription (B0100066), weil sie zuverlässig sind und die notwendige Fehlerbehandlung enthalten. Diese Funktionen sind jedoch zustandslosEin System oder eine Komponente, die keine Informationen über vorherige Interaktionen speichert. Jede Anfrage wird unabhängig behandelt.; sie speichern Ergebnisse nicht nativ über mehrere Aufrufe innerhalb desselben ThreadsEine einzelne Ausführungssequenz innerhalb eines Prozesses. Mehrere Threads können innerhalb desselben Prozesses parallel ausgeführt werden.. Jedes Mal, wenn B0100066 aufgerufen wird, öffnet sie einen CursorEin Datenbankkonstrukt, mit dem Zeilen eines Resultsets einzeln durchlaufen und verarbeitet werden können., führt das SQLStructured Query Language. Eine Standardsprache zur Verwaltung und Abfrage relationaler Datenbanken. aus und ruft die Zeile ab. Wenn dies innerhalb einer hochvolumigen Schleife in einem R42520Ein JD Edwards Standardreport, insbesondere das Druckprogramm für Sales Order Pack Slips. Pack Slip Print oder in einem kundenspezifischen R55Eine Namenskonvention für kundenspezifische JD Edwards Reports, wobei „R“ für Report steht und „55“ häufig für Custom Objects verwendet wird. Financial Integrity Report passiert, wird der kumulierte Overhead zum wichtigsten Bottleneck des Batch-FenstersEin definiertes Zeitfenster, oft außerhalb der Spitzenzeiten, in dem hochvolumige Batch-Prozesse ausgeführt werden..
Die Skalierbarkeit von JDEGängige Abkürzung für JD Edwards, das ERP-System von Oracle.-Logik für globale Unternehmen erfordert, sich von der On-Demand-Abfrage-Mentalität für StammdatenZentrale Referenzdaten eines Unternehmens, etwa Kunden, Produkte oder Lieferanten, die sich vergleichsweise selten ändern. zu lösen, die sich während einer einzelnen Session selten ändern. Die Reduktion der Anzahl roher SQLStructured Query Language. Eine Standardsprache zur Verwaltung und Abfrage relationaler Datenbanken.-Ausführungen ist der wirksamste Hebel, den ein Entwickler zur Performance-Verbesserung hat, ohne teure Hardware-Upgrades oder größere OCI-InstanzenOracle Cloud Infrastructure. Virtuelle Server oder Datenbankdienste auf der Oracle Cloud Plattform. zu benötigen. Durch die Implementierung eines JDECACHEEine JD Edwards API, mit der Entwickler speicherbasierte Caches implementieren können, um wiederholte Datenbankzugriffe zu reduzieren.-Pointers zur Speicherung der ersten F0101Die zentrale Address-Book-Tabelle in JD Edwards.-Suche können spätere Anfragen für denselben AN8Das Address Book Number Feld in F0101, das eine Entität eindeutig identifiziert. in Mikrosekunden aus dem Speicher statt in Millisekunden über das Netzwerk beantwortet werden. Diese Verschiebung verwandelt lineare Performance-Degradation in nahezu konstante Laufzeit für die Stammdatenauflösung.
Design der Cache-Datenstruktur und des Schlüssels
Eine JDECACHEEine JD Edwards API, mit der Entwickler speicherbasierte Caches implementieren können.-Implementierung steht und fällt mit der typedef structEine C-Deklaration, die einen zusammengesetzten Datentyp definiert und mehrere Variablen unter einem Namen gruppiert., die in der BSFN-Header-DateiEine .h-Datei einer JD Edwards Business Function, die Datenstrukturen und Funktionssignaturen enthält. definiert wird. Ich habe Entwickler gesehen, die bestehende Datenstrukturen (DSTRData Structure. Eine JD Edwards Datenstruktur zur Übergabe von Parametern zwischen Funktionen oder zur Definition von Datensätzen.) für Cache-Speicherung wiederverwenden wollten, um Zeit zu sparen. Das ist häufig ein Fehler, der zu Problemen mit SpeicherausrichtungDie Organisation von Daten im Speicher an Adressen, die für effiziente CPU-Zugriffe geeignet sind. oder unnötigem Speicher-Overhead führt. Du solltest eine dedizierte Struktur definieren, die nur die Felder enthält, die wirklich gespeichert werden sollen. Für eine hochfrequente F0101Die zentrale Address-Book-Tabelle in JD Edwards.-Suche sollte die Struktur mit mnAddressNumberEin typischer JD Edwards Variablenname vom Typ MATH_NUMERIC für die Address Number. (MATH_NUMERICEin JD Edwards numerischer Datentyp für Werte, die mathematische Genauigkeit erfordern.) als Primärindex beginnen, gefolgt von konkreten Datenpunkten wie szNameAlphaEin typischer JD Edwards Variablenname für den Alpha-Namen oder die beschreibende Bezeichnung. (ALPHEin Feld in JD Edwards, typischerweise in F0101, das den Alpha-Namen speichert.) und eventuell szTaxIdEin typischer JD Edwards Variablenname für eine Steuer-ID. (TAX1Ein Feld in JD Edwards, typischerweise in F0101, das eine Steuer-ID speichert.). Die Definition in der .h-DateiEine C-Header-Datei mit Funktionsdeklarationen, Makros und Datenstrukturdefinitionen. stellt sicher, dass jede Funktion innerhalb der Source dieselbe Speicher-FootprintDie Menge an RAM, die ein Programm, Prozess oder eine Datenstruktur während der Ausführung verwendet.-Definition verwendet.
Die Eindeutigkeit des Cache-Schlüssels ist nicht verhandelbar, wenn du den Overhead von JDECACHE_FetchRecordsEine JDECACHE API-Funktion, die Datensätze aus dem Cache abruft, potenziell mit Filtern, aber weniger effizient als eine direkte Schlüsselsuche. mit komplexen Filtern vermeiden willst. Durch einen Einzelschlüsselindex auf mnAddressNumberEin typischer JD Edwards Variablenname vom Typ MATH_NUMERIC für die Address Number. führt der JDEGängige Abkürzung für JD Edwards.-Cache-Manager eine binäre SucheEin effizienter Suchalgorithmus, der eine sortierte Liste wiederholt halbiert, um ein Element zu finden. über Speichersegmente aus. Das ist deutlich schneller als eine SQLStructured Query Language.-Indexsuche auf einer großen F0101Die zentrale Address-Book-Tabelle in JD Edwards.-Tabelle mit 500.000+ Datensätzen. In einer typischen Deployment-Umgebung, in der ein einzelner UBEUniversal Batch Engine. 10.000 Verkaufszeilen verarbeitet, reduziert ein Cache für Sold-ToDer Kunde, an den Waren oder Dienstleistungen verkauft werden.- und Ship-ToDie Adresse oder Entität, an die Waren geliefert werden sollen.-Namen die gesamten Datenbankaufrufe um 20.000 Calls. Das ist kein marginaler Gewinn, sondern oft der Unterschied zwischen einem 15-Minuten-Batch und einem Lauf unter 5 Minuten.
Die Effizienz entsteht dadurch, dass die Struktur alle Daten enthält, die die aufrufende Anwendung später im Ausführungsfluss benötigen könnte. Wenn deine Logik später Search Type (ATYEin Feld in JD Edwards, typischerweise in F0101, das den Suchtyp oder die Kategorie eines Address-Book-Datensatzes angibt.) oder Business Unit (MCUBusiness Unit. Ein JD Edwards Feld für eine organisatorische Einheit oder Kostenstelle.) aus dem Address Book benötigt, füge sie jetzt der Struktur hinzu. Eine 200-Byte-Struktur für 5.000 aktive Kunden benötigt nur wenige Megabyte Speicher. Im Vergleich zur Latenz wiederholter JDB_FetchKeyedEine JD Edwards API-Funktion zum Abrufen eines Datensatzes aus einer Tabelle anhand eines konkreten Schlüssels.-Aufrufe über ein belastetes Netzwerk zu einer OCIOracle Cloud Infrastructure.-Datenbank ist dieser Speicherverbrauch vernachlässigbar. Stelle sicher, dass dein JDECACHE_KEYSEGEine Struktur oder ein Array in JDECACHE zur Definition von Schlüsselsegmenten innerhalb der Cache-Struktur.-Array korrekt auf den OffsetDie Position eines Datenelements relativ zum Beginn einer Speicherstruktur oder eines Datenblocks. von mnAddressNumberEin typischer JD Edwards Variablenname für die Address Number. innerhalb der Struktur zeigt.
Initialisierung von JDECACHE innerhalb der BSFN
Jeder BSFNBusiness Function. Eine wiederverwendbare JD Edwards Komponente.-Entwickler hat irgendwann einen Crash des Call Object KernelDie JD Edwards Enterprise Server Komponente, die Business Functions ausführt und Speicher sowie Threads verwaltet. gesehen, weil zwei verschiedene Custom Functions versucht haben, einen Cache mit demselben Namen zu initialisieren. Du musst eine eindeutige und beschreibende Zeichenkette an die APIApplication Programming Interface. Eine Schnittstelle, über die Softwarekomponenten miteinander kommunizieren. jdeCacheInitEine JDECACHE API-Funktion zur Initialisierung einer neuen Cache-Instanz. übergeben, zum Beispiel "C550101_AddressBookCache". Ein generischer Name wie "AB_Cache" riskiert eine KollisionEine Situation, in der mehrere Elemente dieselbe Ressource oder denselben Identifier gleichzeitig verwenden und dadurch Fehler verursachen können. mit Oracle-Standard-BSFNs im selben ThreadEine einzelne Ausführungssequenz innerhalb eines Prozesses.. In Umgebungen mit 50.000 Verkaufsauftragszeilen kann eine Namenskollision den Speicherbereich des Kernels beschädigen und Zombie-ProzesseProzesse, die ihre Ausführung beendet haben, aber weiterhin in der Prozesstabelle stehen, weil ihr Parent-Prozess den Exit-Status nicht gelesen hat. auf dem Enterprise ServerDer Applikationsserver in JD Edwards, der Business Logic und Batch-Prozesse ausführt. erzeugen.
Multithreaded Call Object Kernels verwenden Speicher wieder, wodurch Session-IsolationDie Trennung von Daten und Ressourcen zwischen Benutzersessions, damit eine Session eine andere nicht beeinflusst. kritisch wird. Verhindere Datenkontamination zwischen Sessions, indem du die Jobnummer (JOBSDie Jobnummer oder Prozess-ID in JD Edwards, die eine UBE- oder Applikationsausführung eindeutig identifiziert.) in den Cache-Namen aufnimmst. Ohne diesen eindeutigen Identifier könnte Benutzer A Address-Book-Daten aus dem Cache von Benutzer B lesen. In einer 9.2-Umgebung führt das Fehlen der Jobnummer zu intermittierenden DatenintegritätsfehlernFehlern, bei denen Genauigkeit, Konsistenz oder Zuverlässigkeit von Daten beeinträchtigt werden., die in einer lokalen Einzelbenutzer-Entwicklungsumgebung kaum reproduzierbar sind.
Das Setzen des Cache-Index während der Initialisierung bestimmt, ob spätere Suchvorgänge mit O(1)Konstante Zeitkomplexität. Die Laufzeit bleibt unabhängig von der Eingabegröße gleich. oder O(n)Lineare Zeitkomplexität. Die Laufzeit wächst linear mit der Eingabegröße. arbeiten. Definiere den Index direkt nach der Initialisierung mit jdeCacheAddIndexEine JDECACHE API-Funktion zur Definition eines Index auf dem Cache. und mappe ihn auf das Feld F0101Die zentrale Address-Book-Tabelle in JD Edwards..AN8Das Address Book Number Feld in F0101.. Für einen Cache mit 2.000 Datensätzen benötigt ein nicht indizierter Scan deutlich mehr CPU-ZyklenKleinste Zeiteinheiten eines Prozessors, die elementare Operationen darstellen. als eine Schlüsselsuche.
Die Logik muss prüfen, ob der Cache-HandleEin Identifier oder Pointer, der eine bestimmte Cache-Instanz im Speicher repräsentiert. gültig ist, um Overhead zu minimieren. Die Prüfung der Variable hCacheEin typischer Variablenname für den Cache-Handle in JD Edwards. gegen NULLEin spezieller Wert, der das Fehlen eines gültigen Speicherzeigers oder Werts angibt. stellt sicher, dass die Initialisierung nur einmal erfolgt, selbst wenn eine BSFNBusiness Function. 10.000 Mal innerhalb eines ThreadsEine einzelne Ausführungssequenz innerhalb eines Prozesses. aufgerufen wird.
Implementierung der Fetch-oder-Insert-Logik
Die BSFNBusiness Function.-Logik beginnt mit einem sofortigen Aufruf von jdeCacheFetchEine JDECACHE API-Funktion zum Abrufen eines Datensatzes aus dem Cache. unter Verwendung des übergebenen AN8Das Address Book Number Feld in F0101. als PrimärschlüsselEine Spalte oder Spaltenkombination, die jede Zeile einer Tabelle eindeutig identifiziert.. Diese Prüfung findet vor jeder Datenbankaktivität statt. Dadurch verbraucht das System nur CPU-ZyklenElementare Prozessoreinheiten zur Ausführung von Operationen., wenn die Daten im Speicher der Benutzersession fehlen. In einem hochvolumigen UBEUniversal Batch Engine. kann diese einzelne Zeile C-CodeQuellcode in der Programmiersprache C, häufig für leistungsrelevante JD Edwards Business Functions verwendet. zehntausende redundante SQLStructured Query Language.-Statements eliminieren.
Wenn der FetchDas Abrufen von Daten aus einer Quelle in den Speicher. JDECACHE_NOT_FOUNDEin JDECACHE Return Code, der anzeigt, dass der gesuchte Datensatz nicht im Cache vorhanden ist. zurückgibt, geht die BSFNBusiness Function. zur physischen Datenbank. Hier führst du ein normales JDB_FetchKeyedEine JD Edwards API-Funktion zum Abrufen eines Datensatzes per Schlüssel. auf der Tabelle F0101Die zentrale Address-Book-Tabelle in JD Edwards. aus, um den Alpha-Namen oder Search Type zu lesen. Wenn die Datenbank einen Datensatz liefert, befüllt die BSFN die lokale Datenstruktur und ruft sofort jdeCacheAddEine JDECACHE API-Funktion zum Hinzufügen eines neuen Datensatzes zum Cache. auf.
Dieses Fetch-oder-Insert-Pattern erzeugt einen selbstbefüllenden BufferEin Speicherbereich, der sich bei Bedarf automatisch mit Daten füllt und spätere Zugriffe beschleunigt., der mit der Komplexität des Batch-Prozesses skaliert. Die Datenbank wird genau einmal pro eindeutigem AN8Das Address Book Number Feld in F0101. pro Session abgefragt. Die Kapselung in einer spezifischen C BSFNEine Business Function, die in C implementiert ist. erhält eine klare Separation of ConcernsEin Software-Designprinzip, bei dem Verantwortlichkeiten sauber voneinander getrennt werden., während die aufrufende Anwendung nichts über den darunterliegenden Cache-Mechanismus wissen muss.
Wenn JDB_FetchKeyedEine JD Edwards API-Funktion zum Abrufen eines Datensatzes per Schlüssel. den AN8Das Address Book Number Feld in F0101. nicht findet, muss die BSFNBusiness Function. einen Fehler zurückgeben, ohne jdeCacheAddEine JDECACHE API-Funktion zum Hinzufügen eines Datensatzes zum Cache. auszuführen. Einen Null-DatensatzEin Datensatz ohne gültige Daten oder mit Nullwerten. in den Cache zu schreiben kann zu SpeicherbeschädigungEin Fehler, bei dem Speicherinhalte unbeabsichtigt verändert werden und unvorhersehbares Verhalten auslösen können. oder unerwarteten Ergebnissen führen.

Cache-Scope und Terminierung verwalten
Ein einzelner UBEUniversal Batch Engine., der 50.000 Datensätze verarbeitet und eine Cache-Instanz nicht beendet, kann mehrere hundert Megabyte RAMRandom Access Memory. Flüchtiger Arbeitsspeicher für laufende Programme und Daten. im Call Object KernelDie JD Edwards Enterprise Server Komponente, die Business Functions ausführt und Speicher sowie Threads verwaltet. (COKCall Object Kernel. Die JD Edwards Enterprise Server Komponente zur Ausführung von Business Functions und Ressourcenverwaltung.) verbrauchen. Wenn mehrere Benutzer ähnliche SpeicherlecksEin Fehler, bei dem ein Programm nicht mehr benötigten Speicher nicht freigibt. auslösen, erreicht der COK irgendwann sein Speicherlimit und kann abstürzen. Du musst sicherstellen, dass jdeCacheTerminateEine JDECACHE API-Funktion zur Freigabe des Cache-Speichers. explizit für jeden initialisierten Cache-HandleEin Identifier oder Pointer, der eine bestimmte Cache-Instanz im Speicher repräsentiert. aufgerufen wird.
In einem Standard-UBEUniversal Batch Engine.-Batchprozess, etwa einem hochvolumigen F4211Die Sales Order Detail Tabelle in JD Edwards.-Update, sollte der Cache über Do-Section-Events hinweg bestehen bleiben, um die Hit RateDer Anteil der Anfragen, die im Cache gefunden werden. für F0101Die zentrale Address-Book-Tabelle in JD Edwards.-Suchen zu maximieren. Das optimale Pattern ist der Aufruf einer Cleanup-BSFNEine Business Function, die speziell Ressourcen wie Cache-Speicher am Ende eines Prozesses freigibt. im End Report EventEin Ereignispunkt am Ende eines JD Edwards UBE Reports, an dem Abschluss- oder Cleanup-Logik ausgeführt wird..
Interaktive AnwendungenAnwendungen, mit denen Benutzer direkt interagieren und unmittelbar Eingaben und Ausgaben erhalten. benötigen eine differenziertere Scope-Strategie. Wenn ein Cache ein komplexes Power FormEin erweitertes JD Edwards Formular mit mehreren Subforms und flexibler Funktionalität. mit mehreren SubformsTeilbereiche innerhalb eines größeren Formulars, die zusammengehörige Funktionen oder Daten anzeigen. unterstützt, muss entschieden werden, ob der Cache für die Dauer des Formulars oder nur für ein bestimmtes Ereignis lebt. Persistenz auf Form-Ebene verbessert die UI-Reaktion beim Scrollen der GridEine tabellarische Benutzeroberflächenkomponente in JD Edwards., erfordert aber eine Terminierungs-BSFN im End Form EventEin Ereignispunkt beim Schließen eines interaktiven JD Edwards Formulars..
Die korrekte Verwendung des HandlesEin Identifier oder Pointer für eine konkrete Ressource oder Cache-Instanz. hCache stellt sicher, dass die konkrete Instanz beendet wird, die vom eigenen Prozess erzeugt wurde, und nicht irgendein globaler PointerEin Pointer, der programmweit zugänglich ist und bei falscher Nutzung Speicherprobleme verursachen kann.. In einer MultithreadingDie Fähigkeit eines Systems oder einer Anwendung, mehrere Threads parallel auszuführen.-Umgebung verhindert die Übergabe des spezifischen Handles an die Terminierungsfunktion unbeabsichtigte Datenkontamination.
Benchmark-Ergebnisse und Grenzen der Invalidierung
In einem hochvolumigen UBEUniversal Batch Engine., der 50.000 Datensätze verarbeitet, kann der Ersatz direkter JDB_FetchKeyedEine JD Edwards API-Funktion zum Abrufen eines Datensatzes per Schlüssel.-Aufrufe auf F0101Die zentrale Address-Book-Tabelle in JD Edwards. durch eine JDECACHEEine JD Edwards API, mit der Entwickler speicherbasierte Caches implementieren können.-Implementierung die Laufzeit der BSFNBusiness Function. um 70 % bis 90 % reduzieren. Dieser Performance-Sprung entsteht, weil SQL-Overhead und Netzwerk-Round-TripsDie Zeit, die eine Datenanfrage für Hin- und Rückweg über das Netzwerk benötigt. zur Datenbankschicht nach dem ersten Auftreten einer eindeutigen Address Number entfallen.
Die DatenintegritätGenauigkeit, Konsistenz und Zuverlässigkeit von Daten über ihren Lebenszyklus hinweg. hängt davon ab, dass JDECACHEEine JD Edwards API für speicherbasierte Caches. ein Snapshot im SpeicherEine Kopie von Daten zu einem bestimmten Zeitpunkt, die sich nicht automatisch mit späteren Änderungen der Quelle aktualisiert. ist, kein Echtzeitspiegel der Datenbank. Wenn ein paralleler ProzessEin Prozess, der gleichzeitig mit einem anderen Prozess ausgeführt wird. oder ein anderer ThreadEine einzelne Ausführungssequenz innerhalb eines Prozesses. den F0101Die zentrale Address-Book-Tabelle in JD Edwards.-Datensatz während der BSFN-Ausführung aktualisiert, bleibt der Cache unwissend und liefert weiterhin veraltete DatenDaten, die nicht mehr aktuell sind, weil die Quelle nach dem Caching geändert wurde., bis er explizit beendet wird oder der Prozess endet.
Diese Caching-Strategie ist speziell für StammdatenZentrale Referenzdaten eines Unternehmens, die sich vergleichsweise selten ändern. gedacht, die für die Dauer eines einzelnen Batch-Jobs oder einer interaktiven Session stabil bleiben. Um SpeicherlecksFehler, bei denen nicht mehr benötigter Speicher nicht freigegeben wird. oder Out-of-Memory-Fehler auf dem Enterprise ServerDer JD Edwards Applikationsserver für Business Logic, UBEs und Datenbankkommunikation. zu vermeiden, muss die BSFNBusiness Function. am Ende des Prozesses jdeCacheTerminateEine JDECACHE API-Funktion zur Freigabe des Cache-Speichers. aufrufen. Beim Deployment solcher Custom Caches in Produktion sollte die Runtime-Metrics-Sektion im Server ManagerEin JD Edwards Administrationswerkzeug zur Verwaltung und Überwachung von Servern, Anwendungen und Systemkomponenten. genutzt werden, um JDE-ObjekteJD Edwards Komponenten wie Anwendungen, Reports, Business Functions oder Tabellen. und Speicherverbrauch pro Prozess zu überwachen.

