-
Gebiet der Erfindung
-
Die Erfindung betrifft Datenverarbeitungssysteme und insbesondere die Bearbeitung einer relationalen Datenbank; Ziel der Erfindung ist die Bereitstellung eines Verfahrens zum Sortieren von Aufzählungstabellen einer relationalen Datenbank.
-
Hintergrund der Erfindung
-
Aufzählungen sind Gruppen von benannten Ordinalzahlenwerten für eine qualitative Klassifizierung, die in einer aussagekräftigen Folge geordnet werden können. Zum Beispiel werden für Software-Anwendungen, die auf Computern Jobplanungen verwalten, Aufzählungen zum Qualifizieren von Status eines Jobs durch entsprechende Objektstatus verwendet, wobei jeder Status einer aus einer vordefinierten Gruppe von möglichen Status ist (READY, COMPLETE, FAILED, SUBMITTED, ... (BEREIT, VOLLSTÄNDIG, FEHLGESCHLAGEN, ÜBERGEBEN)}. Jeder Status wird als eine Zeichenfolge beschrieben. In einer Software-Anwendung kann jeder Wert jedoch zur Vereinfachung einem einfachen Aufzählungsvariablennamen zugehörig sein. Wenn zum Beispiel die eine Zeichenfolge als interne Variable angenommen wird, könnte der READY-Status „R” sein, SUBMITTED „S” und so weiter. Diese internen Werte, die zu Programmierungszwecken verwendet werden, haben für den Endbenutzer einer Software-Anwendung, der sie verwendet, keine Bedeutung. Zum Anzeigen der Daten der Anwendung für den Endbenutzer, zum Vorbereiten von verständlichen Berichten oder für irgendeinen anderen Fall, in dem eine verständliche Darstellung der Daten der Anwendung erforderlich ist, kann jedoch eine vollständige Zeichenfolge in der Sprache des Endbenutzers oder des Berichtlesers notwendig und wünschenswert sein. Zum Beispiel wird ein englischsprachiger Endbenutzer es verstehen, wenn der Job als „READY” angegeben wird, und ein italienischsprachiger Endbenutzer wird es verstehen, wenn der Job als „PRONTO” angegeben wird. Dies setzt voraus, dass der interne Wert des Jobstatus in eine Zeichenfolge umgewandelt wird, die in der Ländereinstellung der Benutzersprache gelesen wird. Es wird angemerkt, dass die in der Ländereinstellung bearbeiteten Daten Zeichenfolgen sind, die in alphabetischer Reihenfolge sortiert werden können. Aufzählungswerte können alles sein, sogar binäre Werte, solange sie auf irgendeine Weise sortiert werden können. Es soll angenommen werden, dass die Aufzählungsvariablenwerte zum Beispiel nach einem Befehl sortiert werden müssen, der vom Endbenutzer eingegeben wird, der die Daten der Anwendung anzeigt; wie hierin erklärt, ist für eine typische Software-Anwendung diese Anforderung nach dem Stand der Technik in Bezug auf Verarbeitungszeit und Speicherplatz wirklich kostspielig auszuführen, wenn die Notwendigkeit einer Darstellung der Aufzählungsvariablenwerte mit Zeichenfolgen in der Sprache des Endbenutzers mit der Sortierung der Zeichenfolgen in einer alphabetischen Reihenfolge einhergeht.
-
Eine typische Software-Anwendung, die eine relationale Datenbank zum Speichern von Variablenwerten verwendet, wird eine zusätzliche unabhängige Tabelle, den Katalog, zum Speichern der Zeichenfolgen in verschiedenen Sprachen verwenden, die den Aufzählungsvariablenwerten zugehörig sind. Zum Vorbereiten von Anwendungsvariablenwerten in einer für den Endbenutzer verständlichen Weise muss die Anwendung die nicht-verständlichen internen Aufzählungsvariablenwerte in entsprechende Zeichenfolgen in der Sprache des Endbenutzers übersetzen, indem sie in der Katalogtabelle gelesen werden. Für den Zugriff auf die Daten in relationalen Katalogdatenbanken führt die Anwendung SQL-Abfragen aus. Wenn die Anwendung die Aufzählungsvariablenwerte vorbereiten muss, die in alphabetischer Reihenfolge ihres Ausdrucks in der Ländereinstellung sortiert sind, wird eine JOIN-SQL-Anweisung zwischen der Anwendungsdatentabelle und der Katalogtabelle ausgeführt. Der Grund für den JOIN-Befehl für die beiden Tabellen ist, dass die Sortierung der Zeichenfolgen der Katalogdatenbank in alphabetischer Reihenfolge gleichzeitig mit den entsprechenden Aufzählungsvariablenwerten der Katalogdatenbank erfolgen muss. Eine JOIN-SQL-Operation kombiniert zwei Tabellen, indem alle möglichen Kombinationen jeder Zeile der ersten Tabelle mit allen Zeilen der zweiten Tabelle erzeugt werden; dazu müssen alle (n) Zeilen in der ersten Tabelle mit allen (m) Zeilen in der zweiten Tabelle mit Verarbeitungskosten von n × m geladen und verglichen werden; diese Operation ist daher sehr kostspielig, insbesondere, wenn tausende Objekte zu verarbeiten sind. Dies hat eine starke Auswirkung auf die Leistung der Software-Anwendungen, wie zum Beispiel Jobverwaltungsanwendungen, die hunderttausende von Jobs in einer verteilten Datenverarbeitungsumgebung planen.
-
Der oben veranschaulichte Nachteil muss für eine Software-Anwendung vermieden werden, die relationale SQL-Datenbanken für Daten und Katalog verwendet und sortierte Zeichenfolgen vorbereitet, die Aufzählungswerten entsprechen, die unter Verwendung einer Ländereinstellung umgewandelt werden. Es wird angemerkt, dass viel Arbeit in der Datenbanksystemtechnologie auf eine effiziente JOIN-Umsetzung abzielte, da relationale Systeme im Allgemeinen JOIN-SQL-Anweisungen verlangen, die dennoch sehr kostspielig geblieben sind.
-
Kurzdarstellung der Erfindung
-
Hier wird ein Verfahren zum Berechnen einer sortierten Liste von Aufzählungswerten in einer bestimmten Sprache beschrieben, die aus mindestens einer relationalen Datenbank gelesen werden, die mindestens eine Datentabelle enthält, die Programmier-Aufzählungsvariablenwerte speichert, und mindestens eine Katalogtabelle, die in mindestens einer Sprache einen Ausdruck der Programmier-Aufzählungsvariablenwerte speichert, wobei das Verfahren die folgenden Schritte aufweist:
- – Empfangen einer Anforderung zum Bereitstellen von Aufzählungsvariablenwerten einschließlich einer in einer bestimmten Reihenfolge sortierten Liste der Werte einer bestimmten Aufzählung in einer bestimmten Sprache;
- – Sortieren aller Ausdrücke in der bestimmten Sprache in der bestimmten Reihenfolge, die den Variablenwerten der bestimmten Aufzählung entsprechen, die in einer entsprechenden Katalogtabelle gelesen werden;
- – wenn die sortierte Liste der bestimmten Aufzählungsausdruckswerte mit einer Liste der bestimmten Aufzählungsvariablenwerte übereinstimmt, die in der bestimmten Reihenfolge in derselben Katalogtabelle sortiert sind, Erstellen einer Liste der bestimmten Aufzählungsvariablenwerte in der entsprechenden Datentabelle, sortiert in der bestimmten Reihenfolge, wobei die anderen angeforderten Aufzählungsvariablen in der Datentabelle sind, wobei die folgenden Schritte übersprungen werden;
- – wenn in dem vorhergehenden Schritt keine Übereinstimmung gefunden wurde, wenn die sortierte Liste der bestimmten Aufzählungsausdruckswerte mit einer Liste der bestimmten Aufzählungsvariablenwerte übereinstimmt, die in der umgekehrten Reihenfolge aus der bestimmten Reihenfolge in derselben Katalogtabelle sortiert wurden, Erstellen einer Liste der bestimmten Aufzählungsvariablenwerte in der entsprechenden Datentabelle, sortiert in der umgekehrten Reihenfolge aus der bestimmten Reihenfolge, wobei die anderen angeforderten Aufzählungsvariablen in der Datentabelle sind, wobei der folgenden Schritt übersprungen wird;
- – wenn in einem der beiden vorhergehenden Schritte keine Übereinstimmung gefunden wurde, Erstellen einer neuen Tabelle, die mit derselben Katalogtabelle und der Datentabelle verknüpft wird, die die Aufzählungsvariablenwerte enthält, und Erstellen einer Liste mit den in der verknüpften Tabelle gelesenen Aufzählungsvariablenwerten, die nach den Ausdrücken der bestimmten Aufzählungsvariablenwerte in der bestimmten Sprache sortiert sind, wobei die anderen angeforderten Aufzählungsvariablen in der verknüpften Tabelle sind.
-
Das Verfahren weist ferner auf:
- – in einem permanenten Speichermittel Speichern des Ergebnisses von Übereinstimmungen, die in den vorhergebenden Schritten ausgeführt wurden, die einer Signatur der Anforderung zugehörig sind;
- – Ausführen des empfangenden Schritts;
- – Lesen des Übereinstimmungsergebnisses in dem permanenten Speichermittel für diese Anforderung;
- – wenn die Übereinstimmung in dem permanenten Speichermittel gefunden wird, Überspringen der Übereinstimmungsberechnung und direktes Ausführen der Erstellung einer sortierten Liste der anderen Schritte des Verfahrens.
-
Das Verfahren kann auch folgende erste Schritte aufweisen:
- – Berechnen des Übereinstimmungsergebnisses für alle möglichen Aufzählungsvariablen und Sprachen in der mindestens einen Katalogtabelle;
- – Ausführen des Schritts des Speicherns der Ergebnisse für eine in dem vorherigen Schritt berechnete Übereinstimmung in einem permanenten Speichermittel;
wobei das Verfahren nach dem empfangenden Schritt ferner aufweist,
- – Lesen des Übereinstimmungsergebnisses in dem permanenten Speichermittel für diese Anforderung;
- – wenn die Übereinstimmung in dem permanenten Speichermittel gefunden wurde, Überspringen der Übereinstimmungsberechnung und direktes Ausführen der Erstellung einer sortierten Liste der anderen Schritte des Verfahrens.
-
Nach Empfang eines Ereignisses enthält das Verfahren auch einen Schritt des Mitteilens einer Änderung in der mindestens einen Katalogtabelle, die auf mindestens eine Aufzählung angewendet wird, wobei der Inhalt des permanenten Speichermittels durch Löschen der berechneten Übereinstimmungsergebnisse für sämtliche Anforderungen aktualisiert wird, die die Aufzählungen verwenden, die von der Änderung betroffen sind, und wobei die Übereinstimmung mit den neuen Katalogwerten für die von der Änderung betroffenen Aufzählung erneut berechnet wird.
-
In dem Verfahren ist der Ausdruck in der mindestens einen Katalogtabelle eine Zeichenfolge, und darin ist das Ordnen des Ausdrucks ein Ordnen, das in der alphabetischen Reihenfolge vorgenommen wird.
-
Das Verfahren kann als ein Computerprogrammprodukt umgesetzt werden, das Programmiercode-Anweisungen zum Ausführen der Schritte des Verfahrens aufweist, wenn das Programm auf einem Computer ausgeführt wird.
-
Ferner wird ein System beschrieben, das ein Mittel aufweist, das zum Ausführen des Verfahren wie beansprucht angepasst ist.
-
Kurzbeschreibung der Zeichnungen
-
1 zeigt eine Datenverarbeitungsumgebung des Verfahrens einer Ausführungsform der Erfindung,
-
2 ist eine Veranschaulichung der Datenbanktabellenverwaltung für ein Sortieren einer Aufzählung unter Verwendung einer Ländereinstellung nach dem Stand der Technik,
-
3 ist ein Ablaufplan des Verfahrens gemäß einer Ausführungsform der Erfindung,
-
4 zeigt eine Datenverarbeitungsumgebung des Verfahrens einer zweiten Ausführungsform der Erfindung,
-
5 ist ein Ablaufplan des Verfahrens gemäß einer zweiten Ausführungsform der Erfindung.
-
Ausführliche Beschreibung
-
1 zeigt eine Datenverarbeitungsumgebung des Verfahrens einer Ausführungsform der Erfindung. Es wird angenommen, dass eine Anwendung (100), die zum Beispiel auf einem Server ausgeführt wird, eine Datenbank (120) verwendet, um Daten in einer Tabelle 1 (125), ... Tabelle N ... zu speichern und um ländereinstellungsabhängige Informationen in einem Katalog 1 (130) ... Katalog N zu speichern, die Eingaben beschreiben, die zur Umsetzung von Aufzählungsvariablenwerten in Ausdrücke in einer für den Endbenutzer der Anwendung verständlichen bestimmten Sprache benötigt werden. Diese Figur ist nur eine Veranschaulichung, und die Anzahl von Tabellen, Katalogen ist variabel und unabhängig von dem Verfahren der Ausführungsform. Die Syntax der Anforderung (Programmierung auf höherer Ebene), die von dem Client an die Anwendung gesendet wird, und QUERY (ABFRAGE) (Programmierung auf niedrigerer Ebene zum Zugreifen auf relationale Datenbanken, die heute als SQL-Anweisungen standardisiert sind) dienen nur zur Veranschaulichung. Ein SQL-Entwickler greift mithilfe von SQL-Anweisungen wie SELECT (AUSWÄHLEN) auf die Datenbank zu, um auf ein Element aus einer Datenbanktabelle zuzugreifen. Oft ist jedoch eine weitere Abstraktionsebene oder eine API vorhanden, die Entwicklern die Aufgabe leichter macht (wobei „getOrderedObjects(LOCALE)” ein Beispiel dafür ist). Die API ermöglicht es den Entwicklern, in ihrer eigenen Domäne zu arbeiten statt mit Abfragen auf einer relativ niedrigen Ebene, um auf eine relationale Datenbank zuzugreifen.
-
Von der Client-Anwendung (105) wird eine Anforderung an die Anwendung gesendet, um eine Liste von Objekten zu erhalten, die nach den Werten einer Aufzählungsvariablen der Anwendung geordnet sind. Diese Anforderung kann zum Anzeigen einiger Ergebnisse für den Endbenutzer bestimmt sein. Die Anforderung (110) getOrderedObjects(LOCALE) verweist auf eine Anforderung für eine Liste von Objekten, die mindestens eine Aufzählungsvariable enthalten, geordnet nach der Umsetzung von Aufzählungsvariablenwerten in Ausdrücke, die für den Endbenutzer der Anwendung in einer bestimmten Sprache (LOCALE (LÄNDEREINSTELLUNG), angegeben als Parameter) verständlich sind, wobei eine derartige Umsetzung in dem Katalog gespeichert wird. Anders ausgedrückt, das System erhält eine Anforderung für eine Liste von Objekten. Das beschriebene Verfahren wird verwendet, sobald:
- – die angeforderten Objekte mindestens einen Typ einer Aufzählungsvariablen enthalten
- – der Aufzählungstyp nicht unverändert verwendet wird, sondern stattdessen in eine entsprechende Kennzeichnung (Label) umgesetzt wird, indem er in einem Katalog gesucht wird (z. B. zu dem Zweck, ihn für den Benutzer darzustellen)
- – die angeforderte Liste von Objekten gemäß der Kennzeichnung sortiert wird, die aus dem Katalog stammt.
-
Es wird angemerkt, dass ein oder mehrere Objekte angefordert werden können und der Prozess, wenn er auf ein Objekt angewendet wird, in der restlichen Beschreibung in derselben Weise auch auf mehr als ein Objekt angewendet werden kann. Bei der standardmäßigen Verarbeitung der Anforderung des Clients verknüpft die Anwendung die Datentabellen (125) und die Katalogtabellen (130), um eine JOIN-Tabelle zu erstellen, und sortiert sie wie gefordert (110). In einer Ausführungsform der Erfindung verlangt die Anwendung von einer neuen Software-Komponente der Anwendung, einem Abfrageoptimierungsprogramm (135), nach Empfang der Anforderung eine Abfrage zu erzeugen. Das Abfrageoptimierungsprogramm legt zuerst fest, welcher Aufzählungsvariablenwert-Sortierprozess angewendet wird. Zum Ermitteln der besten Strategie liest das Abfrageoptimierungsprogramm die Aufzählungswerte aus den Datentabellen und die Kennzeichnungen aus den Katalogtabellen (115) und berechnet eine Sortierstrategie, die anschließend zum Erzeugen einer Abfrage verwendet wird. Es gibt die sortierte Liste „OrderedObjects by(LOCALE)” (112) an den Anforderer zurück, zum Beispiel die Client-Anwendung (105), Es wird angemerkt, dass eine Variation sein könnte, dass die Ordnung vollkommen an die Komponente des Abfrageoptimierungsprogramms delegiert wird, das die geordnete Liste vorbereiten könnte, wobei diese Wahl das globale Verfahren zum Optimieren der Sortierung von Aufzählungsvariablen, ausgedrückt in einer bestimmten Sprache, nicht ändert.
-
Der Prozess der bevorzugten Ausführungsform, wie ausführlich in der Beschreibung von 3 erörtert, kann schnellere und effizientere Abfragen im Vergleich mit dem herkömmlichen Prozess nach dem Stand der Technik erzeugen, der in jedem Fall eine JOIN-Operation für Daten- und Katalogtabellen aufweist, wenn eine Anforderung zum Sortieren (110) verarbeitet werden muss.
-
2 ist eine Veranschaulichung der Datenbanktabellenverwaltung zum Sortieren einer Aufzählung, die eine bestimmte Ländereinstellung nach dem Stand der Technik verwendet. Die Software-Anwendung, die zum Beispiel eine Jobverwaltungsanwendung ist, verwendet eine relationale Datenbank zum Speichern von Daten, wie in einer Anwendungsdaten-Tabelle (200) veranschaulicht. Die Tabelle weist mindestens eine Spalte (204) für die Status von Jobs auf, die Aufzählungswerte sind. Die Variable, die für den Status von Jobs verwendet wird, die durch die Software-Anwendung verwaltet werden, ist eine Zeichenfolge aus einem Buchstaben; da Computerprogramme oft in englischer Sprache geschrieben werden, wird hier als Beispiel angenommen, dass der verwendete Wert der Anfangsbuchstabe der englischen Wörter für Jobstatus ist: „R” wird für einen Job verwendet, der „Ready” ist, „S” für Job „Submitted”, „C” für „Complete” und „F” für „Failed”. Die Jobverwaltungsanwendung pflegt in einer Datenbankspalte 202 die Liste der Jobs, die verwaltet werden; in der Spalte 204 pflegt die Jobverwaltungsanwendung den entsprechenden Aufzählungsvariablenwert für jeden Job. In diesem Beispiel werden speziell die Jobs J1, J2, J3 und J4 behandelt.
-
Unabhängig davon enthält eine Katalogdatenbank, die der Entwickler ursprünglich erstellt haben kann (210), die Zeichenfolgen, die den Aufzählungswerten für alle unterstützten verschiedenen Sprachen entsprechen. Die Daten für englische Sprache umfassen die 4 Zeilen in der Katalogtabelle mit dem Wort „English”, das in einer Spalte 212 „Lang” (für „language”) gespeichert ist. Da es sich um eine Aufzählung handelt, weist jede Zeile der Ländereinstellung für die englische Sprache mindestens in einer Spalte 214 PS (Possible States (mögliche Status)) die Aufzählungswerte in einer finiten Zahl für einen Typ eines Jobstatus („Jobstatus” in Spalte 218) und in einer Spalte 216 „Label” (Kennzeichnung) die entsprechende Zeichenfolge in englischer Sprache auf, die ein aussagekräftiger Ausdruck in englischer Sprache ist. Die aussagekräftige Zeichenfolge für den Variablenwert „R” ist „Ready”. Desgleichen werden diese Zeichenfolgen für jedes Paar aus Aufzählungswert und unterstützter Sprache bereitgestellt. Zum Beispiel ist der aussagekräftige Ausdruck für denselben Variablenwert „R” in italienischer Sprache „Pronto”, wie in der Sprachenspalte „Label” 216 für die Zeile zu lesen ist, für die in der Spalte 212 „Italian” und in der Spalte 214 der Variablenwert „R” der möglichen Status zu lesen ist.
-
Die Aufzählung, die das Verfahren der Erfindung unterstützt, kann in einer bestimmten Sprache in der Katalogdatenbank als eine Zeichenfolge ausgedrückt werden, wie im Beispiel für Jobstatus (completed, failed usw.). Wenn der Ausdruck geordnet wird, kann dies in alphabetischer Reihenfolge geschehen oder in Bezug auf Uhrzeit oder Datum oder einer beliebigen Ordnung, die definiert werden kann. Dasselbe Verfahren gilt für diese anderen Fälle.
-
Es wird angemerkt, dass die Anwendungsdaten-Tabelle und die Katalogtabelle jeweils eine Tabelle, wie hier veranschaulicht, oder mehrere Tabellen enthalten können, zum Beispiel eine für jede Sprache für die Katalogdatenbank. Desgleichen kann jede Tabelle mehrere Spalten enthalten, auch wenn das vereinfachte Beispiel von 2 ausreichend ist, um das Verfahren nach dem Stand der Technik zu beschreiben. Ebenso wie ein Beispiel für die Anwendungsdaten eine zusätzliche Spalte „Stream” (Strom) (206) zum Speichern der Jobstrom-IDs für eine Gruppe von Jobs haben kann. Diese Jobstromvariable wird für die beispielhafte Jobverwaltungsanwendung zum Verwalten von Jobs nach Gruppe verwendet. Außerdem kann die Katalogtabelle verschiedene Aufzählungsvariablen enthalten, wobei die eine für das Beispiel von 2, der Jobstatus, die so genannte „State”-(Status) Variable in der Anwendungsdaten-Tabelle ist, sodass die in der Katalogtabelle betrachteten Zeilen der Aufzählungsvariablen „Jobstatus” zugehörig sind, wie in der Katalogtabellenspalte „Type” (Typ) erwähnt. Weitere Zeilen in der Katalogtabelle könnten einem „Type” entsprechen, der sich vom Jobstatus unterscheidet. In der Spalte „Type” in der Katalogtabelle könnte „EarlyAction” (frühzeitige Aktion) stehen: es könnte sein, dass diese Aufzählungsvariable in alphabetischer Reihenfolge in einer bestimmten Sprache sortiert werden muss (siehe anderes Beispiel in dem Dokument): diese Aufzählungsvariable gibt die Aktionen an, die für den Job ausgeführt werden müssen.
-
Die Jobverwaltungsanwendung kann die Katalogdatenbank immer für die Suche nach einem aussagekräftigen Wert in einer bestimmten Ländereinstellung verwenden. Sie sucht nach dem Schlüssel (State = R) in den Zeilen „English” des Katalogs und findet die Zeichenfolge „Ready”, oder in den Zeilen „Italian” des Katalogs und findet die Zeichenfolge „Pronto”. Wenn die Jobverwaltungsanwendung zu einem Zeitpunkt Datensätze der Aufzählungsvariablenwerte und deren entsprechende Zeichenfolge auf Grundlage von Ausdrücken vorbereiten und in der alphabetischen Reihenfolge der Zeichenfolgen sortieren muss, muss zuerst ein dynamischer Aufbau einer JOIN-Tabelle erfolgen. Eine hier veranschaulichte JOIN-Tabelle (220) weist mindestens die Spalten „Jobs” und „State” der Anwendungsdaten-Tabelle und eine Tabelle mit den Kennzeichnungen des jeweiligen Status wie in der Katalogtabelle gefunden auf. Tatsächlich ist es notwendig, die Anwendungsdaten-Tabelle und die Katalogtabelle zuerst durch eine JOIN-Operation zu verknüpfen und anschließend die Sortieroperation für die Katalogkennzeichnungen in der JOIN-Tabelle auszuführen.
-
Die SQL-Anweisungen, die ein Programm für den Zugriff auf relationale Datenbanken verwendet, können wie folgt lauten:
SELECT ”etwas” FROM ”einer Tabelle” WHERE ”eine Bedingung angegeben werden kann, um die Anzahl von Daten zu begrenzen”
-
Beispiel:
-
- SELECT (Jobs, State) FROM Application_data
- WHERE (Application data.Stream = 'S1')
was bedeutet:
- SELECT Spalten mit der Bezeichnung „Jobs” und „State” FROM allen Zeilen in einer Tabelle mit der Bezeichnung „Application_data” WHERE der Wert einer Spalte mit der Bezeichnung „Stream” „S1” lautet.
zum Programmieren der Sortierung einer Tabelle:
- ORDER BY ”angeben, das Ergebnis nach einigen Kriterien anzuordnen”
-
Es soll angenommen werden, dass die Anwendung eine Anzeige der Liste von Jobs und ihrer Status vorbereitet, ausgedrückt in Italienisch und sortiert in der alphabetischen Reihenfolge der möglichen Jobstatus; die Anwendung verwendet die Datenbanken für Anwendungsdaten (200) und Katalog (210) von 2, die beide eine eindeutige Tabelle und die folgenden SQL-Anweisungen zum Erstellen der JOIN-Tabelle (220) aufweisen:
SELECT (Jobs, State) FROM Application_data
JOIN Katalog ON Application_Data.State = Catalog.PS
WHERE (Catalog.Lang = 'Italian')
-
Diese Anweisungen erstellen die JOIN-Tabelle von 2 (220), die den entsprechenden Wert von Status aufweist, die die entsprechenden Kennzeichnungen in italienischer Sprache der Katalogtabelle sind. Diese JOIN-Tabelle enthält eine erste Spalte (222) von Job-IDs, die die Aufzählungsvariablenwerte (J1, J2, J3 und J4) sind, wie bereits in der Spalte „Jobs” in der Anwendungsdaten-Tabelle; sie weist auch eine zweite Spalte (224) der Jobstatus auf, die die Aufzählungsvariablenwerte (S, R, C, F) sind, wie bereits in der Anwendungsdaten-Tabelle. Eine dritte Spalte (226) weist die Kennzeichnungen auf, die in der Katalogtabelle unter „Label” (216) gelesen werden, wobei diese Kennzeichnungen den Status entsprechen, die in der Spalte „PS” (214) für die italienische Sprache gelesen werden, also für die Zeilen, in denen die Spalte „Lang” (212) „Italian” enthält. Dem Status „R” wird in der JOIN-Tabelle die Kennzeichnung „Pronto” zugeordnet, wie in der Katalogtabelle zu lesen; „S” wird zu „Inserito”, „C” zu „Terminato” und „F” zu „Fallito” zugeordnet.
-
Wenn die Verknüpfungstabelle bereit ist, kann die Anwendung die Zeilen gemäß der aufsteigenden alphabetischen Reihenfolge der Beschriftungen (226) unter Verwendung der folgenden SQL-Klausel ordnen, die auf die JOIN-Tabelle angewendet wird:
ORDER BY Kennzeichnung ASC;
das Ergebnis wird mit der sortierten JOIN-Tabelle (230) in 2 veranschaulicht, in der die Zeilen der JOIN-Tabelle 220 in alphabetischer Reihenfolge aller Kennzeichnungen in italienischer Sprache in der Spalte 226 sortiert sind (Fallito, Inserito, Pronto und Terminato). Die sortierte JOIN-Tabelle kann direkt für die Anzeige für einen italienisch sprechenden Benutzer der Anwendung verwendet werden, wobei die verschiedenen Status der Jobs, die aktuell von der Anwendung verwaltet werden, die in der aufsteigenden alphabetischen Reihenfolge der Zeichenfolge aufgelistet sind, die Jobstatus-Werte in italienischer Sprache beschreiben.
-
3 ist ein Ablaufplan des Verfahrens gemäß einer Ausführungsform der Erfindung. Gemäß einer Ausführungsform der Erfindung wird zum Verarbeiten einer Anforderung zum Vorbereiten einer Darstellung mit Zeichenfolgen gemäß einer bestimmten Ländereinstellung für die Werte einer Aufzählungsvariablen zuerst die Sortierstrategie festgelegt.
-
Ein Beispiel für die Umsetzung ist ein Analysesystem für eine Entscheidung für die Sortierstrategie, wobei als Eingabe eine „OrdinalType”-Klasse und eine „userLocale” (d. h. Sprache) verwendet werden. Danach wird eine Werteliste abgerufen, die der internen Darstellung des Eingabetyps und den entsprechenden übersetzten Versionen aus dem Katalog entspricht. Wenn der Eingabetyp „BooleanValue” und die Sprache „English” ist, lauten die Werte intern „Y” und „N”, was im Katalog „Ja” und „Nein” entspricht.
-
Das System erzeugt die folgenden 3 Listen:
- 1. in Reihenfolge ASCENDING (AUFSTEIGEND) sortierte interne Werte
- 2. in Reihenfolge DESCENDING (ABSTEIGEND) sortierte interne Werte
- 3. interne Werte, die nach der entsprechenden Katalogzeichenfolge in Reihenfolge ASCENDING sortiert sind
-
Zum Beispiel liegen im Fall eines „BooleanValue” diese Listen vor:
- 1. (N, Y)
- 2. (Y, N )
- 3. (N, Y) entsprechend der sortierten Liste („No”, „Yes”)
-
Wenn die Sprache „English” ist, ist anzumerken, dass die nach der entsprechenden Katalogzeichenfolge in Reihenfolge ASCENDING sortierten internen Werte
(„No”, „Yes”) entsprechen, also (N, Y): 1. stimmt mit 3. überein
-
Wenn die Sprache jedoch „German” ist, entsprechen die nach der entsprechenden Katalogzeichenfolge in Reihenfolge ASCENDING sortierten internen Werte („Ja”, „Nein”), also (Y, N): 2. stimmt mit 3. überein
-
Das System ermittelt anschließend die optimale Sortierstrategie für jedes bestimmte Paar (Aufzählungstyp, Ländereinstellung) wie folgt:
- – wenn list#3 (Liste 3) gleich list#1 (Liste 1) ist, lautet die Strategie „Katalog ignorieren (kein JOIN), nach Aufzählungswerten sortieren”
- – wenn list#3 gleich list#2 (Liste 2) ist, lautet die Strategie „Katalog ignorieren (kein JOIN), nach Aufzählungswerten unter Verwendung einer umgekehrten Reihenfolge zu derjenigen sortieren, die durch die ursprüngliche Sortieroperation angefordert wird (wenn zum Beispiel eine Abfrage in Reihenfolge ASCENDING nach den Katalogzeichenfolgen sortiert werden soll, wird anschließend gemäß dieser Strategie zum Erreichen des gewünschten Ergebnisses die gegenwärtige Abfrage nach den Aufzählungswerten in Reihenfolge DESCENDING sortiert)”
- – andernfalls lautet die Strategie „Katalog verwenden (JOIN-Operation für die Tabellen und eine Sortierung nach der Zeichenfolgen in der für den Endbenutzer erforderlichen Reihenfolge ausführen)”
-
In diesem einfachen Beispiel ist für die Ländereinstellung „English” list#3 = list#1, daher lautet die Strategie „Katalog ignorieren (kein JOIN), nach Aufzählungswerten sortieren”.
-
In diesem einfachen Beispiel ist für die Ländereinstellung „German” list#3 = list#2, daher lautet die Strategie „Katalog ignorieren (kein JOIN), nach Aufzählungswerten unter Verwendung einer umgekehrten Reihenfolge zu derjenigen sortieren, die durch die ursprüngliche Sortieroperation angefordert wird”.
-
Das gesamte System ist dynamisch, da die Sortierstrategie vom Typ, der Ländereinstellung (Sprache) und dem tatsächlichen Inhalt der Katalogtabelle abhängt.
-
In einem komplexeren Beispiel soll angenommen werden, dass ein Aufzählungstyp mit der Bezeichnung „EarlyAction” vorhanden ist, der drei Werte hat: „A” (ABEND), „C” (CONTINUE) und „F” (CONFIRM). Der englische Katalog sieht wie folgt aus:
A → Abend
C → Continue
F → Confirm
-
In einer Katalogreihenfolge wird die Liste als A, F, C sortiert. Diese stimmt mit keiner „nativen” Reihenfolge überein, sodass die Strategie „Katalog verwenden” lautet und eine JOIN-Operation verwendet wird:
SELECT·FROM Application_data
JOIN Katalog mit Application_data.EarlyAction = Catalog.PS
WHERE (Catalog.Lang = 'English und Catalog.Type = ”EarlyAction”)
ORDER BY Katalogkennzeichnung
-
Im Folgenden wird der italienische Katalog betrachtet:
A → Fine anomala
C → Continua
F → Conferma
-
In der Katalogreihenfolge ist die Liste als F, C, A sortiert. Dies stimmt mit der umgekehrten (DESCENDING) nativen Reihenfolge überein, sodass die beste Strategie jetzt lautet „Katalog ignorieren (kein JOIN), nach Aufzählungswerten unter Verwendung einer umgekehrten Reihenfolge zu derjenigen sortieren, die durch die ursprüngliche Sortieroperation angefordert wird”.
SELECT·FROM Application_data
ORDER BY Application_data.EarlyAction DESC
-
Es ist ersichtlich, dass unter Verwendung dieses Systems dieselbe Verwendungsabfrage zwei völlig verschiedene SQL-Anweisungen erzeugt, und dass durch die Nutzung der tatsächlichen Werte des italienischen Katalogs die zweite Abfrage optimiert wurde und auf eine effiziente Weise ausgeführt wird.
-
Der Ablaufplan von 3 beginnt mit einem ersten Schritt (300) des Abfangens der Standardanforderung in der Anwendung zum Aufbauen einer Liste von Zeichenfolgen für die Werte einer Aufzählungsvariablen in der Anwendung der Anwendungsdaten-Datenbank, geordnet nach der alphabetischen Reihenfolge der Zeichenfolgen, die diesem Wert in einer Sprachen-Ländereinstellung entsprechen, der in der Katalogdatenbank gespeichert ist. Dasselbe gilt für mehr als einen Aufzählungswert, die Beschreibung ändert sich dadurch nicht.
-
Die Sortierstrategie wird anschließend festgelegt, sie beginnt mit dem Erfassen der Liste von internen Aufzählungswerten, die nach der entsprechenden Katalogzeichenfolge in Reihenfolge ASCENDING sortiert sind: in der Katalogtabelle von 1 lautet das Ergebnis C, F, R, S, wenn die Ländereinstellung der Anforderung „English” lautet. Die Liste der internen Aufzählungswerte, sortiert in Reihenfolge ASCENDING, wird erfasst: in der Anwendungsdaten-Tabelle von 1 lautet das Ergebnis C, F, R, S, wenn die Ländereinstellung der Anforderung „English” lautet. Die beiden Listen werden verglichen (305), wenn das Prüfergebnis positiv ist, lautet die Strategie zum Ausführen der oben genannten Anforderung, die JOIN-Operation zu ignorieren und stattdessen die Aufzählungsvariablenwerte direkt zu sortieren (310) und zu der Anwendung zurückzukehren (315), um die Ausführung der Anforderung abzuschließen und die sortierten Aufzählungswerte durch die entsprechende Zeichenfolge in der Katalogdatenbank zu ersetzen.
-
Wenn nach dem Vergleichen der beiden Listen (305) das Prüfergebnis negativ ist, wird die Liste der in Reihenfolge DESCENDING sortierten internen Aufzählungswerte erfasst und mit der Liste von internen Aufzeichnungswerten verglichen (320), die nach der entsprechenden Zeichenfolge in Reihenfolge ASCENDING sortiert sind. Wenn das Prüfergebnis positiv ist, wird die Strategie zum Ausführen der oben genannten Anforderung lauten, die JOIN-Operation zu ignorieren und stattdessen die Aufzählungsvariablenwerte direkt zu sortieren (325) und zu der Anwendung zurückzukehren (315), um die Ausführung der Anforderung abzuschließen und die sortierten Aufzählungswerte durch die entsprechende Zeichenfolge in der Katalogdatenbank zu ersetzen.
-
Wenn das Ergebnis der zweiten Prüfung (320) zum Überprüfen, ob die nach der entsprechenden Katalogzeichenfolge in Reihenfolge ASCENDING sortierten internen Werte mit den in Reihenfolge DESCENDING sortierten internen Werte übereinstimmen, negativ ist, wird eine JOIN-Operation für die internen Werte und den Katalog ausgeführt (330), (wodurch die JOIN-Tabelle 220 von 2 erhalten wird). Danach wird eine Sortierung an der JOIN-Tabelle ausgeführt (335), (wodurch die sortierte JOIN-Tabelle 230 von 2 erhalten wird). Anschließend kehrt der Prozess zu der Anwendung zurück, wobei der Inhalt der sortierten JOIN-Tabelle das Ergebnis der Anforderung enthält.
-
Es wird angemerkt, dass der Ablaufplan ein Verfahren beschreibt, das bei einer Anforderung zum Sortieren einer bestimmten Aufzählung ausgeführt wird. Wenn die Anforderung für mehr als eine Aufzählung gilt (mehr als ein Programmierobjekt von getOrderedObject in dem Programm), wird der Ablaufplan für jede Aufzählung (jedes Objekt) wiederholt.
-
4 zeigt eine Datenverarbeitungsumgebung des Verfahrens einer zweiten Ausführungsform der Erfindung. In einer zweiten Ausführungsform der Erfindung wird die Anwendung um eine zweite Funktion erweitert, die als eine zweite Software-Komponente, die „Strategie-Cachespeicher”-Komponente (400) für die Anwendung (100) umgesetzt werden kann. Die Strategie-Cachespeicher-Komponente, die ebenfalls mit der Anwendung in Beziehung steht, ist ein Verwaltungsprogramm zum Speichern einer Sortierstrategie, die für eine bestimmte Anforderung und gemäß dem Inhalt in dem Katalog berechnet wurde. Wie in 3 erläutert, wird eine Strategie zum Sortieren berechnet (305, 320), bevor eine Sortierung vorgenommen wird, um auf eine Anforderung zu antworten, den Ausdruck, der in einer bestimmten Sprache eine Aufzählungswertvariable beschreibt, in einer alphabetischen Reihenfolge (110) getOrderedObjects(LOCALE) zu sortieren. Diese Strategie wird durch das Abfrageoptimierungsprogramm für jede Anforderung zum Sortieren berechnet und kann sich ändern, wenn sich der Katalog ändert. Wenn das Abfrageoptimierungsprogramm die Sortierstrategie berechnet, werden einige Informationen aus der Katalogtabelle gelesen, und zwar die Liste von Kennzeichnungen für einen bestimmten Aufzählungstyp und eine bestimmte Aufzählungssprache. Jede Änderung an diesen Daten muss überwacht werden: wenn sich eine Kennzeichnung, die auf einen Wert eines bestimmten Typs verwiesen hat, in dem Katalog ändert, muss die Strategie für diesen Typ neu berechnet werden, anschließend kann die von dem Abfrageoptimierungsprogramm für eine Anforderung eines bestimmten Typs bereits berechnete Sortierstrategie nicht mehr verwendet werden, anschließend kann die von dem Abfrageoptimierungsprogramm für eine Anforderung bereits berechnete Sortierstrategie nicht mehr verwendet werden. Der Strategie-Cachespeicher speichert die Sortierstrategie, die vorher von dem Abfrageoptimierungsprogramm berechnet wurde, in einem Repository (420), wobei die Strategie unter Verwendung eines Paars aus (Schlüssel, Wert) verschlüsselt sein kann, wobei der Wert das Ergebnis der Berechnung der besten Strategie durch das Abfrageoptimierungsprogramm ist: alle Werte sind möglich, es könnte „1” sein, wenn das Ergebnis lautet „Datenbankwerte sortieren” (310) oder „2” für „REVERSE (umgekehrte) Sortierung von Datenbankwerten ausführen” (325) oder „3” für „JOIN-Tabelle erstellen und Sortierung an JOIN-Tabelle ausführen” (330, 335). Der Schlüssel ist einer Anforderung zugehörig, sodass Anforderungen, die dieselbe Ausgabe haben sollten, denselben Schlüssel haben. Das Abfrageoptimierungsprogramm sendet die für eine bestimmte Anforderung berechnete Strategie an den Strategie-Cachespeicher, der diese Informationen im Repository speichert.
-
Es ist anzumerken, dass ein Repository eine Art von permanentem Speichermittel für einen Computer ist; dasselbe Verfahren gilt für jeden anderen Typ eines permanenten Speichermittels.
-
Der Strategie-Cachespeicher behält die Informationen im Repository genau bei. Wenn der Katalog für einen bestimmten Typ aktualisiert wird, ist die Strategie für diesen Typ nicht mehr für die Anforderung gültig, und die Strategie-Cachespeicher-Komponente verwirft alle diesem Typ zugehörigen Informationen, sodass, wenn das Abfrageoptimierungsprogramm eine Strategie für eine Anforderung wiederverwenden muss, die Strategie neu berechnet wird und die Informationen erneut an den Strategie-Cachespeicher übergeben werden, der sie im Repository speichert. Der Strategie-Cachespeicher wird über jede Änderung im Repository durch einen Datenbank-TRIGGER benachrichtigt, der ein von relationalen Datenbanken bereitgestellter Mechanismus ist, der in Aktion tritt, wenn eine Änderung eintritt. Ein CatalogChange() (410) wird vom Strategie-Cachespeicher empfangen, der somit alle Informationen aus dem Repository verwirft, und das Abfrageoptimierungsprogramm muss die Strategie erneut berechnen und zum Speichern an die Strategie-Cachespeicher-Komponente übergeben.
-
Das Repository enthält ein Paar von Informationen, das eine Information ist, die zum Erkennen einer bestimmten Anforderung verwendet wird, und eine, die zum Erkennen eines Ergebnisses in der Übereinstimmung verwendet wird, das zum Festlegen berechnet wurde, welche Sortierstrategie anzuwenden ist. Zum Beispiel ist jede Signatur der Anforderung gültig; jede Variable für das Prüfergebnis ist gültig.
-
5 ist ein Ablaufplan des Verfahrens gemäß einer zweiten Ausführungsform der Erfindung. Optionale Schritte (340, 342, 345), die dieser zweiten Ausführungsform entsprechen, wurden im Vergleich mit dem ersten Ablaufplan von 3 hinzugefügt. Die Sortierstrategie, die durch den in 3 veranschaulichten Ablauf berechnet wurde, kann optional in einem permanentem Repository (420) gespeichert werden. Wenn das Repository verwendet wird, wird bei einer benötigten Sortierung das Repository zuerst überprüft (Prüfung 340), um festzustellen, ob eine Sortierstrategie für die angegebenen Paare (Aufzählungstyp, Benutzersprache) gefunden wird, und falls dies der Fall ist (Antwort „Yes” auf Prüfung 340), wird der Rest des Ablaufs (d. h. alle Schritte ab und einschließlich Schritt 305) nicht ausgeführt.
-
Wenn das Repository verwendet wird, kann es auch beim Hochfahren der Anwendung aufgefüllt werden. Wenn die Anwendung startet, erzeugt sie in diesem Fall alle möglichen Paare (Aufzählungstyp, Benutzersprache), die die Anwendung unterstützen muss, sie erzeugt die richtige Sortierstrategie für jedes von ihnen und speichert sie im Repository.
-
Wenn das Repository verwendet wird, kann es auch auf eine dynamischere Weise aufgefüllt werden. In diesem Fall wartet die Anwendung, bis eine Abfrage mit einer Sortierklausel (110) ausgegeben wird, prüft dann, ob das Repository vorhanden ist und arbeitet und:
- – wenn das Repository vorhanden ist, verwendet die Anwendung es zum Abrufen der Sortierstrategie und kehrt zurück
- – wenn das Repository nicht vorhanden ist, erstellt die Anwendung es und berechnet und fügt ihm genau den Eintrag für das angegebene (Aufzählungstyp, Benutzersprache) Paar hinzu.
-
Die Anwendung kann auch festlegen, den Katalog auf Änderungen zu überwachen. Wenn der Katalog geändert wird, löscht die Anwendung das Sortierstrategie-Repository, um sicherzustellen, dass bei der nächsten Verwendung ganz von vorne begonnen wird. Dies kann zum Beispiel mit einem Datenbank-TRIGGER (410) in der Katalogtabelle umgesetzt werden.
-
Es ist anzumerken, dass, obwohl die Beschreibung und die Beispiele sich mit bestimmten spezifischen Objekten befassen, die Erfindung für alle Arten von Typen gilt, die aus einer Gruppe von lokalisierbaren Werten bestehen. Ein Aufzählungstyp könnte auf jeden Datentyp verallgemeinert werden, der dem Benutzer nicht direkt angezeigt werden kann, erfordert aber einen Schritt „in Zeichenfolge umsetzen”, wobei der Schritt „in Zeichenfolge umsetzen” durch Durchsuchen einer Tabelle umgesetzt wird, die Paare von (Wert, Zeichenfolge) enthält.
-
Die beschriebene Optimierung gilt in erster Linie dafür, wie oft die Optimierung angewendet werden kann. Die Antwort hängt zum großen Teil von den Aufzählungswerten, der Länge der Aufzählung und der Katalogsprache ab. Für eine Anwendung, die eine Jobplanung in einer verteilten Datenverarbeitungsumgebung ausführt, zeigt die für einige westliche Sprachen erfasste Statistik, dass 35% aller Fälle optimiert werden können. Dies kann abhängig von den Anwendungen auch unterschiedlich ausfallen. Die beschriebene Optimierung gilt auch dafür, wie viel sich durch die Verwendung der Optimierung gewinnen lässt. Es hängt hauptsächlich von den Tabellengrößen ab; auf Grundlage von typischen Werten, wie sie in der Literatur zu finden sind, kann die Einsparung einer kostspieligen JOIN-Operation die Leistung um das 10-fache (d. h. 1000%) oder mehr verbessern, aber eine Menge von Faktoren haben großen Einfluss darauf, wie in der Praxis zu sehen ist.
-
Die Verwendung eines Repository vermeidet ein erneutes Ausführen der Prüfung zum Festlegen der besten Strategie, wenn dieselbe Anforderung für dieselbe Aufzählung empfangen wird.