DE69030228T2 - Verfahren zur Verbindung zweier Relationen einer Datenbank auf einem gemeinsamen Feld in einem parallelen Datenbanksystem - Google Patents
Verfahren zur Verbindung zweier Relationen einer Datenbank auf einem gemeinsamen Feld in einem parallelen DatenbanksystemInfo
- Publication number
- DE69030228T2 DE69030228T2 DE69030228T DE69030228T DE69030228T2 DE 69030228 T2 DE69030228 T2 DE 69030228T2 DE 69030228 T DE69030228 T DE 69030228T DE 69030228 T DE69030228 T DE 69030228T DE 69030228 T2 DE69030228 T2 DE 69030228T2
- Authority
- DE
- Germany
- Prior art keywords
- partitions
- jobs
- execution time
- relation
- pair
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 title claims description 73
- 238000005192 partition Methods 0.000 claims description 94
- 230000006870 function Effects 0.000 claims description 35
- 238000005304 joining Methods 0.000 claims description 32
- 230000008569 process Effects 0.000 claims description 19
- 238000000638 solvent extraction Methods 0.000 claims description 8
- 238000005457 optimization Methods 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 5
- 238000012360 testing method Methods 0.000 description 10
- 238000009826 distribution Methods 0.000 description 7
- 239000002131 composite material Substances 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000011156 evaluation Methods 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 238000003860 storage Methods 0.000 description 2
- 244000126002 Ziziphus vulgaris Species 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000012856 packing Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24558—Binary matching operations
- G06F16/2456—Join operations
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99931—Database or file accessing
- Y10S707/99932—Access augmentation or optimizing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Multi Processors (AREA)
Description
- Die Erfindung betrifft allgemein die Verwaltung relationaler Datenbanken in einer Mehrprozessor-Umgebung und im einzelnen die Verbindung zweier Datenbankrelationen auf einem gemeinsamen Feld in einer parallelen, relationalen Datenbankumgebung bei Datenschräglauf, durch Partitionieren der gemeinsamen Operation in getrennte Jobs und optimales Planen der Jobs unter einer Vielzahl von Prozessoren.
- Eine gemeinsame Operation in relationalen Datenbanksystemen ist die natürliche Verbindung zweier Relationen auf den jeweils über einer gemeinsamen Domäne definierten Spalten. Siehe hierzu beispielsweise die Beschreibung der natürlichen Verbindung auf den Seiten 209 und 210 in An Introduction to Database Systems, Band 1, 3. Ausgabe, von C. Date, Addison- Wesley (1982). Das Ergebnis der Verbindung ist eine neue Relation, in der jede Reihe die Verkettung zweier Reihen ist, d.h., jeweils eine Reihe aus jeder der ursprünglichen Relationen, so daß beide Reihen in ihren jeweiligen Verbindungsspalten denselben Wert haben.
- Ein bekannter Algorithmus zur Berechnung der Verbindung zweier Relationen ist die von M. Blasgen und K. Eswaran in "Storage and Access in Relational Databases", IBM Systems Journal, Band 4, Seite 363 et seq. (1977) beschriebene Sortier-Mischtechnik. Sie kann in Kurzform wie folgt zusammengefaßt werden: Zunächst wird jede Relation (falls erforderlich) nach der Verbindungsspalte sortiert. Anschließend werden die beiden sortierten Relationen in der offensichlichen verriegelten Sequenz abgetastet und es werden die Reihen gemischt, die gleiche Werte aufweisen.
- Wenn Sortier-Mischverbindungen parallel in einem Mehrprozessor-Datenbanksystem ausgeführt werden, kommt es zu einem Datenschräglaufproblem, das sich in den Verbindungsspalten der Relationen fortsetzen kann. Das Schräglaufproblem wird generell von den in der Literatur beschriebenen Verbindungsalgorithmen nicht angesprochen. Als einer der frühen Artikel über die parallele Sortier-Mischverbindung sei "Parallel Algorithms for the Execution of Relational Database Operations" von D. Bitton, H. Boral, D. J. DeWitt und W. K. Wilkinson in ACM Trans. on Database Systems, Band 8, Nr. 3, September 1983, Seite 324-353 genannt. Bitton et al. schlagen zwei externe parallele Sortieralgorithmen vor, die sie als parallele, binäre, bitonische Misch- und Blocksortierung bezeichnen. In beiden Algorithmen werden sortierte Läufe auf die Platte geschrieben und Zweiweg-Mischungen werden zum Mischen der Läufe von der Platte verwendet. Der Mischbaum wird auf verschiedenen Prozessoren abgebildet, der endgültige Mischlauf ist sequentiell.
- In "Join and Semijoin Algorithms for a Multiprocessor Database Machine", ACM Trans. on Database Machines, Band 9, Nr. 1, März 1984, wird auf den Seiten 133-161 von P. Valduriez und G. Gardarin der für eine k-Weg-Mischung verallgemeinerte Algorithmus beschrieben. Das Ergebnis sind p Listen, die sequentiell auf einem einzelnen Prozessor gemischt werden (unter der Annahme, daß p< k).
- In der Abhandlung von J. P. Richardson, H. Lu und K. Mikkilineni mit dem Titel "Design and Evaluation of Parallel Pipelined Join Algorithms", ACM SIGMOD 1987, San Francisco, Mai 1987, Seite 160-169, wird eine Methode zur Parallelisierung der Misch-Verbindungsoperation beschrieben. In der Methode von Richardson et al. werden die Relationen T&sub1; und T&sub2; zu m&sub1; und m&sub2; Läufen gemischt. Unter der Annahme, daß T&sub1; die größere Relation ist, wird jeder Lauf von T&sub1; einem Prozessor zugewiesen. Jeder Prozessor mischt m&sub2; Läufe von T&sub2; (das heißt, der endgültige Mischlauf von T&sub2; wird wiederholt, mindestens so oft, wie Prozessoren vorhanden sind) und mit den diesem Prozessor zugewiesenen Läufen von T&sub1; misch-verbunden. Dieses Verfahren ist gut, wenn die Projektionen der beiden zu verbindenden Relationen so beschaffen sind, daß eine von ihnen sehr klein ist. Die Autoren beschreiben auch eine andere Version ihres Algorithmus, die eingesetzt werden kann, wenn eine Relation klein ist.
- S. G. Akl und N. Santoro ziehen in "Optimal Parallel Merging and Sorting Without Memory Conflicts", IEEE Trans. on Comp., Band C-36, Nr. 11, November 1987, Seite 1367-1369, das parallele Mischen zweier sortierter Listen durch Partitionieren jeder der beiden Listen in Betracht.
- Ein anderer bekannter Algorithmus zur Berechnung der Verbindung zweier Relationen ist die von D. J. DeWitt, R. H. Gerber, G. Graefe, M. L. Heytens, K. B. Kumar und M. Maralikrishna in "Multiprocessor Hash-based Join Algorithms", Proc. 11th VLDB (1985) beschriebene Hash-Verbindungstechnik. Für ein Mehrprozessorsystem kann diese kurz wie folgt zusammengefaßt werden: Zuerst werden beide Relationen (falls erforderlich) entsprechend der Verbindungsspalten im Hash-Verfahren in Hash-Partitionen zerlegt. Die Anzahl der Hash-Partitionen wird generell mit der Anzahl der Prozessoren gleichgesetzt. Anschließend werden die Hash-Partitionen unter den Prozessoren verteilt, so daß sich die entsprechenden Partitionen der beiden Relationen auf demselben Prozessor befinden. Zweitens werden die entsprechenden Hash-Partitionen der beiden Relationen miteinander verbunden.
- Obwohl eine Verbindungsabfrage durch Einsatz mehrerer Prozessoren beschleunigt werden kann, kann die Beschleunigung aus dieser Art von konventionellem Verbindungsalgorithmus bei Vorhandensein eines Datenschräglaufs sehr eingeschränkt sein, wie von M. S. Lashmi und P. S. Yu in "Effect of Skew on Join Performance in Parallel Architectures", Proc. Intl. Symposium on Databases in Parallel and Distributed Database Systems (1988) beschrieben wird. In "A Performance Evaluation of Four Parallel Join Algorithms in a Shared-Nothing Multiprocessor Environment", Proc. ACM Sigmod Conference (1989), bewerten D. A. Schneider und D. J. DeWitt die Leistung von vier parallelen Verbindungsalgorithmen. Sie schlagen vor, bei starkem Datenschräglauf nicht eine Hash-Verbindung, sondern einen anderen Algorithmus in Erwägung zu ziehen. In "Removing Skew Effect in Join Operation on Parallel Processors", Technical Report CSD-890027, UCLA (1989), schlagen R. C. Hu und R. R. Muntz einen einfachen Hash-Verbindungsalgorithmus zur Identifizierung des größten Schräglaufelements vor und weisen für die Bearbeitung mehrere Prozessoren zu.
- In dem Artikel "Limited Factors of Join Performance on Parallel Processors" werden von M. Seetha Lakshmi und Philip S. Yu in Proceedings of the fifth International Conference on Data Engineering (IEEE Cat. No 89 CH 2695-5) vom 10.2.88 auf den Seiten 488-496 verschiedene Verfahren erörtert, von denen bekannt ist, daß sie die Effektivität paralleler Verbindungsoperationen verbessern. Der Artikel spricht Verfahren zur Verbindung von Relationen in einem Mehrprozessor-Datenbanksystem an, wozu auch der Schritt der Unterteilung von Relationen in entsprechende Partitionen und das Verbinden dieser Partitionen auf einem der Prozessoren gehört.
- Neben diesen mehr theoretischen Untersuchungen ist es eine Aufgabe der Erfindung, effiziente Techniken bereitzustellen, mit denen die Gesamtausführungszeit in einer parallelen relationalen Datenbankumgebung bei der natürlichen Verbindung zweier Relationen mittels der Sortier-Misch- und der Hash- Verbindungstechniken minimiert wird.
- Diese Aufgabe der Erfindung wird durch das Verfahren mit den Merkmalen des Hauptanspruchs gelöst. Weitere Verbesserungen der Erfindung werden in den Unteransprüchen gekennzeichnet.
- Die Erfindung und ihre Verbesserungen erfüllen darüber hinaus die Aufgabe, Sortier-Misch- und Hash-Verbindungstechniken für den Einsatz in einem Mehrprozessor-Datenbanksystem bereitzustellen, die einen in den Verbindungsspalten der Relationen möglicherweise vorhandenen Datenschräglauf wirksam behandeln.
- Entsprechend den allgemeinen Lehren der Erfindung wird die Verbindungsoperation in drei Stufen mit einer optionalen vierten Stufe ausgeführt. Die erste Stufe ist eine Vorbereitungsstufe, die im Detail von dem zugrundeliegenden Verbindungsalgorithmus abhängt. Mit dieser vorbereitenden Stufe erreicht man eine Vorverarbeitung, deren Ergebnisse in der folgenden Stufe als Grundlage für die Definition von Unteraufgaben für die endgültige Verbindungsoperation eingesetzt werden. Die in der ersten Stufe bereitgestellten Daten werden in der zweiten Stufe eingesetzt, um sowohl Unteraufgaben zu definieren als auch diese Unteraufgaben optimal den verschiedenen Prozessoren zuzuweisen, und zwar in der Weise, daß die Prozessoren in der endgültigen Verbindungsoperation auch bei Datenschräglauf nahezu gleichmäßig belastet werden. Diese zweite Stufe ist eine für die Erfindung kritische Zuordnungsstufe. Im Detail ist die zweite Stufe für die verschiedenen zugrundeliegenden Verbindungsalgorithmen unterschiedlich; das generelle Verfahren der Definition und Zuordnung von Unteraufgaben in der zweiten Stufe ist jedoch bei den verschiedenen zugrundeliegenden Algorithmen gleich. Nachdem in der zweiten Stufe die Definition und Zuordnung der Unteraufgaben abgeschlossen ist, werden die Daten entsprechend der Zuordnung auf die Prozessoren verteilt, damit in der dritten Stufe die Verarbeitung und die endgültige Verbindung der beiden Relationen stattfinden kann. Das in der endgültigen Verbindungsoperation verwendete Verfahren hängt von dem zugrundeliegenden Verbindungsalgorithmus ab. Während der in der dritten Stufe durchgeführten eigentlichen Verbindung könnte wahlweise eine dynamische Neuzuweisung der Unteraufgaben stattfinden, wenn die Verbindungsoperation unausgewogen werden sollte.
- Wie erwähnt, kann die Verbindungsoperation mit verschiedenen zugrundeliegenden Verbindungsverfahren realisiert werden. Im ersten Aspekt dieser Erfindung wird ein Verfahren beschrieben, das auf parallelen Sortier-Mischverbindungen in einem Datenbanksystem mit mehreren Prozessoren basiert. In der ersten Stufe werden die erste und die zweite Relation in eine der Zahl der Prozessoren entsprechende Anzahl von Gruppen partitioniert und in die zu verbindende Spalte einsortiert. Diese sortierten Daten aus der ersten Stufe werden der zweiten Stufe bereitgestellt. In der zweiten Stufe werden die sortierten Daten der ersten Stufe in Bereiche und Multiplizitäten repartitioniert, um Unteraufgaben zu definieren, die jeweils Daten aus einer Bereichspartition verbinden. Die von einem einzelnen Prozessor zur Ausführung der einzelnen Unteraufgaben benötigte Zeit wird geschätzt, und die Partitionen werden weiter unterteilt, wie es zur gleichmäßigen Aufteilung der Sortieroperationen auf die verschiedenen Prozessoren notwendig ist. Die Jobs werden unter den Prozessoren nach einer Optimierungstechnik mit minimalem Makespan eingeplant. Der Algorithmus bearbeitet wirksam die in den Verbindungsspalten der Relationen möglicherweise vorhandenen Datenschrägläufe, indem er die Einplanung von Jobs unter den Prozessoren anhand eines geschätzten Schräglaufs aktualisiert.
- Im zweiten Aspekt der Erfindung wird eine Methode beschrieben, die auf dem parallelen Hash-Verbindungsalgorithmus in einem Mehrprozessor-Datenbanksystem basiert. Die Technik wurde speziell zur Bearbeitung von Datenschrägläufen konzipiert. Der vorgeschlagene Algorithmus basiert auf einem hierarchischen Hashing-Konzept. Die hierarchische Hash-Code-Anwendung wird mit einem Optimierungsalgorithmus mit minimalem Makespan kombiniert, um die Hash-Partitionen iterativ aufzuspalten und für eine gerechte Zuweisung der Hash-Partitionen in den einzelnen Prozessoren zu sorgen. Teil der Analyse ist eine weitere Verfeinerung der Partitionierungen, wenn die Größe der Partitionen zu einer unerwünschten Lastverteilung führt. Während dieser Auswertungsstufe wird keine tatsächliche Hash-Code-Anwendung durchgeführt. Statt dessen werden die Vorteile der Hash-Code-Anwendung auf jeder Ebene geschätzt, so daß die optimale Hash-Code-Anwendung zu einem späteren Zeitpunkt erfolgen kann.
- Die obengenannten und andere Aufgaben, Aspekte und Vorteile werden besser verständlich anhand der folgenden ausführlichen Beschreibung eines bevorzugten Ausführungsbeispiels der Erfindung unter Bezugnahme auf die Zeichnungen; es zeigt:
- Figur 1 ein Blockdiagramm der allgemeinen Organisation eines Mehrprozessor-Datenbanksystems, in dem die Verbindungsprozeduren gemäß der Erfindung praktiziert werden können;
- Figur 2 ein Beispiel dreier Relationen, die zur Erläuterung des Datenschräglaufkonzepts dienen;
- Figur 3 ein High-Level-Blockdiagramm, das die einzelnen Stufen der Verbindungsoperation gemäß der Erfindung erläutert;
- Figur 4 ein Flußbild mit den Details der zweiten Stufe der Verbindungsoperation bei Anwendung eines Sortier-Misch-Verbindungsalgorithmus gemäß der Erfindung;
- Figur 5 ein Diagramm, das erläutert, wie Unteraufgaben in einem ersten Aspekt der Erfindung in kleinere Unteraufgaben unterteilt werden;
- Figur 6 ein Flußbild mit den Details der zweiten Stufe der Verbindungsoperation unter Anwendung eines ersten Hash-Verbindungsalgorithmus gemäß der Erfindung;
- Figur 7 ein Flußbild mit den Details der zweiten Stufe der Verbindungsoperation unter Anwendung eines zweiten Hash-Verbindungsalgorithmus gemäß der Erfindung; und
- Figur 8 ein Diagramm, das erläutert, wie Unteraufgaben in der Hash-Verbindungsoperation der Erfindung neu zugewiesen werden.
- In der folgenden Beschreibung wird der Einfachheit halber angenommen, daß jeder Prozessor des Mehrprozessor-Datenbanksystems mit derselben Rechenkapazität ausgestattet ist. Der genaue Aufbau der Architektur der parallelen Datenbank ist hier im übrigen zum größten Teil nicht von Bedeutung. Bezugnehmend auf die Zeichnungen und hier insbesondere auf Figur 1; hier wird ein Blockdiagramm des allgemeinen Aufbaus eines aus mehreren Prozessoren bestehenden Datenbanksystems gezeigt. P Prozessoren 10&sub1; bis 10P sind miteinander über ein Verbindungsnetz 12 verknüpft. Die Prozessoren tauschen die Daten über das Verbindungsnetz 12 aus. Wie die verschiedenen Prozessoren im einzelnen miteinander verbunden sind, ist hier nicht von Bedeutung; wichtig ist, daß für die anstehenden Aufgaben eine ausreichend große Bandbreite vorhanden ist. Für die sekundäre Speicherung verwendet das Datenbanksystem außerdem die herkömmlichen Plattenlaufwerke 161D1 bis 16PDP. Die zu sortierenden beziehungsweise zu verbindenden Relationen werden auf diesen Plattenlaufwerken gespeichert.
- Die Verteilung der von dem Verbindungsattribut angenommenen Werte hat einen wesentlichen Einfluß auf die für die Verbindungsoperation benötigte Ausführungszeit. In vielen Datenbanken kommen bestimmte Werte für ein Attribut häufiger vor, als andere Werte, was zu einer schräglaufenden Verteilung führt. Betrachten wir die drei in Figur 2 gezeigten Relationen für KUNDEN, BESTELLUNGEN und LIEFERANTEN. Der Kunden-ID in der Relation KUNDE nimmt eindeutige Werte an, dasselbe Attribut kann jedoch in der Relation BESTELLUNGEN nicht eindeutige Werte annehmen, da ein Kunde mehr als einen Artikel bestellen kann. Außerdem kann ein bestimmter Artikel von mehr als einem Kunden bestellt werden, und mehrere Lieferanten können einen bestimmten Artikel liefern.
- Eine Abfrage, bei der alle Kunden mit offenen Bestellungen aufgelistet werden sollen, würde die Relationen BESTELLUNGEN und KUNDEN in der Spalte Kunden-ID miteinander verbinden, was zu einer Verbindung mit einem einfachen Schräglauf führen würde. Eine Abfrage, bei der alle Lieferanten aufgelistet werden sollen, welche die offenen Bestellungen liefern können, würde die Relationen BESTELLUNGEN und LIEFERANTEN in der Artikel-Spalte miteinander verbinden, was zu einer Verbindung mit einem doppelten Schräglauf führen würde. Die Bezeichnungen einfacher Schräglauf und doppelter Schräglauf sollen die Fälle darstellen, bei denen das Verbindungsattribut einer oder beider Relationen eine schräglaufende Verteilung hat.
- Die Verbindungsoperation gemäß der Erfindung, wie sie in Figur 3 dargestellt ist, hat drei Stufen und wahlweise eine vierte Stufe. Stufe 1 ist die Vorbereitungsstufe, die gemeinsam für alle Erfindungsaspekte gilt; die Details dieser Stufe variieren jedoch, abhängig von dem zugrundeliegenden Verbindungsalgorithmus. Diese Stufe wird für zwei zugrundeliegende Verbindungsalgorithmen ausführlicher beschrieben. Im einzelnen beschreiben wir zunächst Stufe 1 für ein auf dem Sortier- Mischverfahren basierendes Ausführungsbeispiel der Erfindung, anschließend wird Stufe 1 für ein auf dem Hash-Code basierendes Ausführungsbeispiel der Erfindung beschrieben.
- Die vorbereitende Phase der Stufe 1 ist eine Vorverarbeitung; ihre Ergebnisse werden in Stufe 2 als Grundlage für die Definition von Unteraufgaben für die endgültige Verbindungsoperation der Stufe 3 verwendet. Im einzelnen heißt das, daß die durch Stufe 1 zur Verfügung gestellten Daten sowohl zur Definition von Unteraufgaben als auch zur optimalen Zuweisung dieser Unteraufgaben an verschiedene Prozessoren verwendet werden, und zwar so, daß die Prozessoren in der endgültigen Verbindungsoperation in Stufe 3 fast gleichmäßig belastet werden, auch bei einem Datenschräglauf. Stufe 2 ist demnach eine Zuweisungsstufe und ist für die vorliegende Erfindung von kritischer Bedeutung. In der folgenden Beschreibung werden die Schritte der Stufe 2, die sowohl an den Sortier- Misch- als auch an den beiden auf dem Hash-Code basierenden Ausführungsbeispielen dieser Erfindung beteiligt sind, im Detail beschrieben.
- Nachdem in Stufe 2 die Definition und die Zuweisung der Unteraufgaben abgeschlossen sind, werden die Partitionen der zu verbindenden Relationen zur Verarbeitung und zur endgültigen Verbindung der beiden Relationen in Stufe 3 an die ihnen zugewiesenen Prozessoren verteilt. Die in der endgültigen Verbindungsoperation verwendete Methode hängt von dem zugrundeliegenden Verbindungsverfahren ab. Wahlweise beinhaltet Stufe 4 Prozessoren, die über ihren Bearbeitungsfortgang berichten. Da die Zuweisungen in Stufe 2 auf Schätzungen der Zeiten für die Unteraufgaben beruhen, könnte die in Stufe 3 begonnene Verbindungsoperation unausgewogen werden. Wenn diese Unausgewogenheit eine bestimmte vorher festgelegte Schwelle überschreitet, kann die Zuweisung der Stufe 2 wahlweise dynamisch verändert werden.
- Der erste Aspekt der Erfindung, der hier beschrieben werden soll, bezieht sich auf ein auf dem Sortier-Misch-Verbindungsalgorithmus basierendes zugrundeliegendes Verbindungsverfahren. Nehmen wir an, Relation R&sub1; enthält N&sub1; Reihen, während die Relation R&sub2; N&sub2; Reihen umfaßt. P soll die Anzahl der Prozessoren in dem Datenbanksystem bezeichnen.
- In der ersten Stufe der Erfindung wird die Gruppe der Reihen von R&sub1; so gleichmäßig wie möglich in P Gruppen von jeweils etwa N&sub1;/P Reihen unterteilt. Mit anderen Worten, die Partition hat N&sub1;-P N&sub1;/P Gruppen von je N&sub1;/P Reihen und P-N&sub1;+P N&sub1;/P Gruppen von je N&sub1;/P Reihen, wobei x die kleinste Ganzzahl bezeichnet, die größer als oder gleich der realen Zahl x ist, und x die größte Ganzzahl bezeichnet, die kleiner als oder gleich x ist. Jedem Prozessor wird dann eine der Partitionen zum Sortieren gegeben. Die Prozessoren müßten ihre Aufgaben mehr oder weniger in der gleichen Zeit ausführen. Die zweite Relation wird analog sortiert. Am Ende dieser Stufe sind zwei Gruppen von P sortierten "Läufen" vorhanden.
- Um die zweite Stufe der Erfindung vorzustellen, nehmen wir an, daß V&sub1;≤V&sub2; zwei Werte in der Domäne der Verbindungsspalten sind. Mit einem der 2P sortierten Läufe, zum Beispiel demjenigen, welcher der Relation iε{1,2} und dem Prozessor jε{1,...,P} entspricht, haben wir eine wohldefinierte (möglicherweise leere) benachbarte Untergruppe ij,V&sub1;,V&sub2;' die aus allen Reihen mit Sortierspaltenwerten im Intervall [V&sub1;,V&sub2;] besteht. Schickt man jede der Untergruppen ij,V&sub1;,V&sub2; zur endgültigen Sortierung und Mischung an einen einzelnen Prozessor, so führt dies zu einer unabhängigen Unteraufgabe τ¹V&sub1;,V&sub2; des gesamten restlichen Teils der Verbindungsoperation. Das hochgestellte Zeichen unterstreicht hier die Tatsache, daß nur ein einzelner Prozessor beteiligt ist. Die Bedeutung dieser Tatsache wird anhand der folgenden Beschreibung deutlich. Wir wollen die Zeit schätzen, die für die Ausführung dieser Unteraufgabe benötigt wird, und zwar wie folgt: T¹V&sub1;,V&sub2; = A(I&sub1;+I&sub2;)+BO, hierbei ist
- die Anzahl der Eingabereihen von Ri, O ist die Anzahl der Ausgabereihen aus dem Mischlauf von R&sub1; und R&sub2; und A und B sind bekannte Konstanten. Wenn wir annehmen, daß die Werte jeder ij,V&sub1;,V&sub2; gleichmäßig auf die DV&sub1;,V&sub2;-Elemente in der zugrundeliegenden Domäne zwischen V&sub1; und V&sub2; verteilt sind, dann können wir wie folgt berechnen: O = I&sub1;I&sub2; DV&sub1;,V&sub2;.
- In dem speziellen Fall V&sub1;< V&sub2; ist die Berechnung von O nur eine Schätzung. Ein Paar (V&sub1;,V&sub2;), das die Bedingung V&sub1;< V&sub2; erfüllt, nennen wir ein Paar vom Typ 1. In dem speziellen Fall V&sub1;=V&sub2; verkürzt sich die Gleichung für O auf O=I&sub1;I&sub2;. Tatsächlich ist der Ausgang nur das Kreuzprodukt der beiden Eingänge, so daß die Formel in diesem Fall ganz genau ist. Ein Paar (V&sub1;,V&sub2;), das die Bedingung V&sub1;=V&sub2; erfüllt, nennen wir ein Paar vom Typ 2. Für Paare vom Typ 2, sagen wir mit V=V&sub1;=V&sub2;, kann es sein, daß wir die zusätzliche Möglichkeit in Betracht ziehen möchten, die größere der beiden Gruppen
- so gleichmäßig wie möglich in M Gruppen einer bestimmten Reihenzahl zu unterteilen, wobei 1≤M≤P, und noch feiner abgestimmte unabhängige Unteraufgaben τ¹V&sub1;,V&sub2; ... τMV&sub1;,V&sub2; zu erzeugen. In der Unteraufgabe τmV&sub1;,V&sub2;, mε {1, ..., M}, wird das Kreuzprodukt der kleineren Gruppe und die m-te Partition der größeren Gruppe in einem einzelnen Prozessor ausgeführt. Nehmen wir zum Beispiel an, daß die erste Relation die größere Anzahl von Reihen enthält, dann beträgt die zur Ausführung dieser Unteraufgabe benötigte Zeit TmV&sub1;,V&sub2; = A(I + I&sub2;) + B I I&sub2;, wobei Im&sub1; die Anzahl der Reihen in der m-ten Partition ist. Wir bestehen nicht darauf, daß jede der M Unteraufgaben in einem anderen Prozessor ausgeführt werden soll, obwohl dies in der Praxis wahrscheinlich der Fall ist. Das Ausführen von M> 1 Unteraufgaben ist eindeutig weniger effizient, als das Ausführen einer Unteraufgabe, da die Eingabe aus der kleineren Relation (in diesem Falle R&sub2;) an jeden beteiligten Prozessor geschickt werden muß. Wir nutzen diese Möglichkeit nur bei der Bearbeitung eines übermäßigen Schräglaufs. Wir sagen, daß das Paar vom Typ 2 (V&sub1;,V&sub2;) eine Multiplizität von M hat. Ein Paar vom Typ 1 (V&sub1;,V&sub2;) soll eine Multiplizität 1 haben.
- Wir können jetzt unseren allgemeinen Lösungsansatz aufstellen: Nehmen wir an, wir erzeugen eine geordnete Sequenz von K Wertepaaren, mit entsprechenden Multiplizitäten in der Domäne der Verbindungsspalten. Diese Sequenz hat folgende Form:
- V1.1≤V1.2< ..< Vk-1.1≤Vk-1.2< Vk.1≤Vk.2< Vk+1.1≤Vk+1.2< ...< VK.1≤VK.2.
- Jeder Wert in den Verbindungsspalten von R&sub1; und R&sub2; muß in eines der Intervalle [Vk,1,Vk,2] fallen. Für kε{1,...,K} soll Mk die Multiplizität des Paares (Vk,1,Vk,2) bezeichnen. Wir haben
- Unteraufgaben τmVk,1,Vk,2 erzeugt, die in den P Prozessoren ausgeführt werden sollen. Die hierzu nötige Gesamtrechenzeit kann geschätzt werden als
- und soll so gleichmäßig wie möglich auf die Prozessoren aufgeteilt werden. Bei einer "perfekten" Zuweisung, die nicht notwendigerweise möglich ist, wäre jeder Prozessor während
- Zeiteinheiten beschäftigt. Im einzelnen möchten wir gerne jede Unteraufgabe τmVk,1,Vk,2 einem Prozessor A
- in der Weise zuweisen, daß die Ausführungszeit für den gesamten Job,
- minimiert wird. Dieses Optimierungsproblem ist der sogenannte minimale Makespan bzw. das Planungsproblem in einem Mehrprozessorsystem. Obwohl es als NP-komplett bekannt ist, gibt es eine Reihe sehr schneller heuristischer Verfahren, die über eine ausreichend gute Leistung für den ungünstigsten Betriebsfall und eine exzellente Leistung für den durchschnittlichen Betriebsfall verfügen. Hier seien speziell zur Beschreibung der LPT-Heuristik "Bounds on Multiprocessing Timing Anomalies" von R. Graham, SIAM Journal of Computing, Band 17, 1969, Seite 416 ff. genannt, sowie zur Beschreibung der MULTIFIT-Heuristik "An application of Bin Packing to Multiprocessor Scheduling" von E. Coffman, M. Garey und D. S. Johnson im SIAM Journal of Computing, Band 7, 1978, Seite 1 ff.
- Natürlich haben wir eine Kontrolle darüber, wie die geordnete Sequenz von Wertepaaren und die entsprechenden Multiplizitäten erzeugt werden. Das Ziel in der zweiten Stufe unserer Erfindung ist ein Teile-und-herrsche-Verfahren zur Erzeugung dieser geordneten Sequenz. Ein Beispiel für eine Lösungsmöglichkeit ist der im Flußbild der Figur 4 dargestellte Algorithmus.
- Bezugnehmend auf Figur 4; der Prozeß beginnt in Funktionsblock 20, indem zunächst K=1 gesetzt wird, V1,1 ist der minimale Wert in den Verbindungsspalten von R&sub1; und R&sub2;, V1,2 ist das Maximum und M&sub1;=1. Außerdem wird die Zeit für die Unteraufgabe geschätzt und eine Liste aller aktuellen Unteraufgaben, geordnet nach Zeitschätzungen für die Unteraufgaben, geführt. Am Anfang befindet sich auf der Liste nur ein Element. Anschließend wird im Entscheidungsblock 22 geprüft, ob die Zeitschätzung der größten Unteraufgabe in der Liste kleiner als oder gleich 1/P-tel der Summe der Zeitschätzungen aller Unteraufgaben in der Liste ist. Mit anderen Worten, "paßt" die größte Unteraufgabe? Wenn ja, werden in Funktionsblock 24 die LPT- oder MULTIFIT-Algorithmen durchgeführt. Der erste und rechnerisch aufwendigste Schritt in beiden Algorithmen ist das Ordnen der Unteraufgaben nach Zeitschätzungen. Dies ist in unserem Fall bereits geschehen. In Entscheidungsblock 26 wird dann geprüft, ob der Makespan innerhalb eines vorher festgelegten multiplikativen Faktors 1+Δ einer perfekten Zuweisung liegt. Wenn ja, stoppt der Prozeß; andernfalls wird in Entscheidungsblock 28 geprüft, ob Paare vom Typ 1 vorhanden sind. Wenn nicht, stoppt der Prozeß; andernfalls wird in Entscheidungsblock 30 das größte Paar vom Typ 1 auf der Liste ausgewählt. Dann wird in Funktionsblock 32 das größte Paar vom Typ 1 (Vk,1,Vk,2) in zwei oder drei Teile aufgeteilt, und zwar wie folgt: In R&sub1; gibt es I&sub1; Gesamtelemente, bestehend aus P sortierten Reihen 1j,V&sub1;,V&sub2;. In R&sub2; gibt es I&sub2; Gesamtelemente, bestehend aus P sortierten Reihen 2j,V&sub1;,V&sub2;. Insgesamt haben wir 2P sortierte Reihen mit insgesamt I&sub1;+I&sub2; Elementen. Ein Algorithmus nach Z. Galil und N. Megiddo, beschrieben in "A Fast Selection Algorithm and the Problem of Optimum Distribution of Effort", Journal of the ACM, Band 26, 1979, Seite 58 ff, findet das ( I&sub1; + I&sub2; )/ zweitgrößte Element µ dieser Gruppe. Dies ist ein speziellelr Fall des sogenannten Auswahlproblems. Tatsächlich unterteilt der Algorithmus jede Gruppe ij,V&sub1;,V&sub2; in drei benachbarte (möglicherweise leere) Regionen; ¹1j,V&sub1;,V&sub2;, bestehend aus den Reihen, die kleiner als µ sind, ²1j,V&sub1;,V&sub2;, bestehend aus den Reihen, die gleich µ sind, und ³1j,V&sub1;,V&sub2;, bestehend aus den Reihen, die größer als µ sind. Wir haben somit drei Unteraufgaben erzeugt, wo zunächst nur eine vorhanden war. Die erste oder dritte Unteraufgabe, nicht jedoch beide, könnten leer sein. Bei beiden könnte es sich um den Typ 1 oder um den Typ 2 handeln. Die zweite Unteraufgabe ist nicht leer, es ist eine Unteraufgabe vom Typ 2 mit der Multiplizität 1. Figur 5 zeigt, wie bei Anwendung dieses Verfahrens die drei neuen Unteraufgaben aus einer alten Unteraufgabe erzeugt werden. Im nächsten Schritt wird K angepaßt, die Intervalle werden bestimmt und die Zeitschätzungen werden für jede neue Unteraufgabe berechnet. Wird für eine der Unteraufgaben die Anzahl der Ausgabereihen mit Null berechnet, kann die Unteraufgabe von der Liste gestrichen werden; der einem von zwei Relationen entsprechende Teil ist leer und die Verbindung erbringt kein Ergebnis.
- An diesem Punkt wird im Entscheidungsblock 34 geprüft, ob die Liste der Unteraufgaben leer ist. Wenn ja, stoppt der Prozeß; andernfalls wird die Liste der Unteraufgaben in Funktionsblock 36 neu numeriert und neu geordnet. Die Steuerung schleift dann zurück zum Entscheidungsblock 22.
- Fällt die Prüfung im Entscheidungsblock 22 negativ aus, wird in Entscheidungsblock 38 eine weitere Prüfung ausgeführt, in der festgestellt wird, ob es sich bei dem größten Element in der Liste der Unteraufgaben um den Typ 1 handelt. Wenn ja, geht die Steuerung weiter zu Funktionsblock 32; andernfalls wird in Entscheidungsblock 40 geprüft, ob es möglich ist, die Multiplizität des Paares vom Typ 2 entsprechend der größten Unteraufgabe in der Liste auf eine neue Multiplizität M< P zu erhöhen, und zwar in der Weise, daß jede Unteraufgabe jetzt paßt. Wenn dies möglich ist, wird nach der kleinsten solchen Multiplizität gesucht, und die Liste der Unteraufgaben wird in Funktionsblock 42 dahingehend revidiert, daß sie jetzt diese neue Multiplizität enthält. Außerdem wird K angepaßt und die Zeitschätzungen für die neuen Unteraufgaben werden berechnet, bevor die Steuerung zu Funktionsblock 36 geht.
- Fällt die Prüfung in Entscheidungsblock 40 negativ aus, dann wird in Funktionsblock 44 der Unteraufgabe eine Multiplizität P zugewiesen, jede der P Unteraufgaben wird einem anderen Prozessor zugewiesen und die Unteraufgaben werden aus der Liste entfernt. Außerdem wird K angepaßt. Die P von der Liste entfernten Unteraufgaben werden ungefähr in der gleichen Zeit ausgeführt. Die Steuerung geht jetzt weiter zu Entscheidungsblock 34.
- Unsere Methode favorisiert Paare mit der Multiplizität 1, ermöglicht jedoch auch höhere Multiplizitäten zur Beseitigung eines übermäßigen Schräglaufs. Wo ein solcher übermäßiger Schräglauf vorliegt, dürfte sich auf natürlichem Wege während der Durchführung des Algorithmus zeigen. Auch die Zeitschätzungen für die Unteraufgabe dürften bei Durchführung des Algorithmus immer präziser werden. Zu diesem Thema wären noch viele Variationen realisierbar. Zum Beispiel müßten LPT oder MULTIFIT nicht jedesmal im Funktionsblock 24 durchgeführt werden. Ein Zähler könnte die Zahl der Durchführungen des Algorithmus mit minimalem Makespan regeln. Die Zeit zur Durchführung des Algorithmus könnte auch nach einem anderen Zähler ablaufen, auch wenn die Lösung nicht ganz zufriedenstellend ist.
- In der in Figur 3 gezeigten Stufe 3 werden die sortierten Tupel der Relationen R&sub1; und R&sub2; von der Platte gelesen und die den Unteraufgaben entsprechenden Tupel werden an den zugewiesenen Prozessor geschickt. Die Unteraufgaben werden dann auf den zugewiesenen Prozessoren zur Durchführung der endgültigen Verbindungsoperation ausgeführt.
- Wie durch Stufe 4 in Figur 3 gezeigt wird, könnten die Prozessoren im Verlauf der eigentlichen Verbindung wahlweise über den Fortgang der Operation berichten. Da es sich bei den Zeitschätzungen für die Unteraufgabe genau hierum handelt, könnte der Fortgang der Verbindungsoperation unausgewogen werden. Wenn diese Unausgewogenheit eine bestimmte vorher festgelegte Schwelle überschreitet, könnte ein neuer LPT- oder MULTIFIT-Algorithmus eingeleitet werden.
- Die Erfindung kann auch unter Anwendung eines Verfahrens praktiziert werden, das auf dem Hash-Verbindungsalgorithmus beruht und in dem eine Doppel-Hashing-Technik eingesetzt wird, mit der ein hierarchischer Hash-Code in den Stufen 1 und 2 der Figur 3 implementiert wird. Andere Variationen der hierarchischen Hash-Code-Anwendung werden zu einem späteren Zeitpunkt erörtert. Die Doppel-Hashing-Technik hilft bei der Erkennung der Schräglaufwerte, ergibt eine bessere Schätzung des Aufwands für die Verbindungsoperationen in jedem Prozessor und sorgt schließllich für eine gleichmäßigere Lastaufteilung.
- In der ersten Stufe der Figur 3 beginnen wir mit nahezu gleichen Partitionen R&sub1; mit einer Größe von jeweils etwa N&sub1;/P Reihen je Prozessor. Mit anderen Worten, die Partition hat N&sub1;-P N&sub1;/P Gruppen von jeweils N&sub1;/P Reihen und P-N&sub1;+P N&sub1;/P Gruppen von jeweils N&sub1;/P Reihen. H&sub1; und H&sub2; seien zwei Hash- Funktionen, wobei H&sub2; zur weiteren Unterteilung jeder von H&sub1; erzeugten Hash-Partition in feinere Partitionen verwendet wird. Nehmen wir an, H&sub1; kann die Reihen mittels Hash-Codierung in B&sub1; Hash-Partitionen unterteilen und H&sub2; kann jede dieser Partitionen in B&sub2; feinere Hash-Partitionen unterteilen. Für jeden Prozessor j sei αjk,m(R&sub1;) die Anzahl der Reihen, deren Hash-Wert ihrer Verbindungsspalte unter H&sub1; in die k-te Hash-Partition von H&sub1; fällt und deren Hash-Wert unter H&sub2; in die m-te Hash-Partition von H&sub2; fällt. Die Reihe soll einen zusammengesetzten Hash-Wert (k,m) haben. Jeder Prozessor liest in Tupeln von R&sub1; von der Platte und führt die Zählungen αjk,m(R&sub1;) für k=1,...,B&sub1; und m=1...,B&sub2; im Hauptspeicher jedes Prozessors j, um zu verfolgen, wieviele Tupel in die feinkörnigen Partitionen nach H&sub1; und H&sub2; im Hash-Verfahren zerlegt werden. Die Prozessoren müßten ihre Aufgaben in ungefähr der gleichen Zeit ausführen. Die zweite Relation wird in entsprechender Weise im Hash-Verfahren zerlegt und ergibt αjk,m(R&sub2;). Am Ende dieser Stufe haben wir zwei Zähl-Gruppen, αjk,m(Ri),i=1,2.
- Am Beginn der zweiten Stufe von Figur 3 werden in den Prozessoren die Gruppen αjk,m(Ri) hinzugefügt und man erhält
- Mit einer der 2PB&sub1; Hash-Partitionen von H&sub1;, beispielsweise derjenigen, die der Relation iε{1,2}, Prozessor jε{1,...,P} und der Hash-Partition kε{1,...,B&sub1;} entspricht, und mit einer Untergruppe E≤{1,...,B&sub2;}, erhalten wir eine wohldefinierte (möglicherweise leere) Untergruppe θij,k,E, die aus allen Reihen mit zusammengesetzten Hash-Werten (k,m), mεE besteht. Wenn man jede θij,k,E zur Durchführung der endgültigen Verbindung an einen einzelnen Prozessor schickt, so erhält man eine unabhängige Unteraufgabe τ¹k,E des gesamten restlichen Teils der Verbindungsoperation. Die hochgestellte Zahl unterstreicht hier die Tatsache, daß nur ein einzelner Prozessor beteiligt ist. Die Bedeutung dieser Tatsache wird in Kürze deutlich. Die zur Ausführung dieser Unteraufgabe benötigte Zeit wird mit T¹k,E=A(I&sub1; + I&sub2;)+BO geschätzt, wobei
- die Anzahl der Eingabereihen von Ri ist, O die Anzahl der Ausgabereihen aus dem Mischlauf von R&sub1; und R&sub2; ist und A und B bekannte Konstanten sind. Nimmt man an, daß die Werte jeder θij,k,m mεE gleichmäßig auf die Dk,m Elemente in der zugrundeliegenden Domäne mit dem zusammengesetzten Hash-Wert (k,m) verteilt sind, können wir wie folgt berechnen:
- Für den Fall, daß E einen einzelnen Wert, sagen wir m, enthält, möchten wir vielleich die zusätzliche Möglichkeit einer möglichst gleichmäßigen Partitionierung der größeren der beiden Gruppen
- in M Gruppen von Reihen in Erwägung ziehen, wobei 1≤M≤P, und noch feinere unabhängige Unteraufgaben τ¹k,{m},...,τMk,{m} erzeugen. In der Unteraufgabe τjk,{m},jE{1...M} wird die Verbindung der kleineren Gruppe und die j-te Subpartition der größeren Gruppe in einem einzelnen Prozessor ausgeführt. Nehmen wir zum Beispiel an, daß die erste Relation die größere Reihenanzahl enthält, dann beträgt die Zeit zur Ausführung dieser Unteraufgabe Tjk,{m}=A((I&sub1;/M)+I&sub2;)+BI&sub1;I&sub2;/M. Wir bestehen nicht darauf, daß jede der M Unteraufgaben auf einem anderen Prozessor ausgeführt wird, obwohl dies in der Praxis wahrscheinlich der Fall ist. Das Ausführen von M> 1 Unteraufgaben ist natürlich weniger effizient, als das Ausführen einer Unteraufgabe, da die Eingabe aus der kleineren Relation (in diesem Falle R&sub2;) an jeden beteiligten Prozessor geschickt werden muß. Wir nutzen diese Möglichkeit nur zur Bearbeitung eines übermäßigen Schräglaufs. Wir sagen, daß die zusammengesetzte Hash-Partition (k,{m}) eine Multiplizität M hat. Sonst soll sie eine Multiplizität 1 haben.
- Wir können jetzt unseren generellen Lösungsweg aufstellen: Nehmen wir an, wir erzeugen eine geordnete Sequenz von K Paaren der Form (Vk,1,Vk,2), wobei Vk,1ε{1,...,B&sub1;} und Vk,2≤{1,..,B&sub2;}. Wenn Vk,2 nur ein einziges Element enthält, wird das Paar (Vk,1, Vk,2) als Paar vom Typ 2 bezeichnet. In allen anderen Fällen wird es als Paar vom Typ 1 bezeichnet. Die Sequenz von K Paaren muß die Gruppe der zusammengesetzten Hash-Klassen so partitionieren, daß für jede zusammengesetzte Hash-Klasse (i,j) ein eindeutiges kε{1,...,K} vorhanden ist, so daß i=Vk,1 und jεVk,2. Für kε{1,...,K} soll Mk die Multiplizität des Paares (Vk,1,Vk,2) bezeichnen. Wir haben die Unteraufgaben τmVk,1,Vk,2 erzeugt, die in den P Prozessoren ausgeführt werden sollen. Die benötigte Gesamtrechenzeit kann geschätzt werden auf
- diese soll so gleichmäßig wie möglich auf die Prozessoren aufgeteilt werden. Bei einer "perfekten", nicht notwendigerweise möglichen Zuweisung wäre jeder Prozessor für
- Zeiteinheiten beschäftigt. Im einzelnen möchten wir jede Unteraufgabe τmVk,1Vk,2 einem Prozessor A(τmVk,1,Vk,2) so zuweisen, daß die Ausführungszeit für den gesamten Job,
- minimiert wird. Dieses Optimierungsproblem ist der sogenannte minimale Makespan oder das Mehrprozessor-Planungsproblem. Obwohl es bekanntlich NP-komplett ist, gibt es eine Reihe sehr schneller heuristischer Verfahren, die über eine ausreichend gute Leistung für den ungünstigsten Betriebsfall und eine exzellente Leistung für den durchschnittlichen Betriebsfall verfügen.
- Der Punkt ist, daß wir eine Kontrolle darüber ausüben können, wie die geordnete Sequenz von Wertepaaren und die entsprechenden Multiplizitäten erzeugt werden. Das Ziel in der zweiten Stufe unserer Erfindung ist ein Teile- und -herrsche- Verfahren zur Erzeugung dieser geordneten Sequenz. Wir stellen in Stufe 2 zwei Alternativbeispiele möglicher Weiterverarbeitungslösungen vor.
- Bei der ersten Methode wird eine Variante der LPT-Heuristik nach Graham verwendet; sie ist im Flußbild der Figur 6 dargestellt. Bezugnehmend auf Figur 6; zunächst werden in Funktionsblock 50 die Gruppen {(k,F),k=1,...,B&sub1;}, mit F={1,...,B&sub2;}, in absteigender Reihenfolge gemäß dem Wert der Unteraufgabe, T¹k,F sortiert. Es wird eine Liste aller aktuellen Unteraufgaben, geordnet nach den zeitlichen Schätzungen der Unteraufgaben, geführt. In Entscheidungsblock 52 wird dann geprüft, ob die Zeitschätzung der größten Unteraufgabe in der Liste kleiner als oder gleich 1/P-tel der Summe der Zeitschätzungen aller Unteraufgaben in der Liste ist. Mit anderen Worten, "paßt" die größte Unteraufgabe? Wenn nicht, wird in Entscheidungsblock 54 geprüft, ob das größte Element in der Liste der Unteraufgaben vom Typ 1 ist. Wenn ja, wird in Funktionsblock 56 das größte Paar vom Typ 1 (Vk,1,Vk,2) unterteilt in card(Vk,2) Paare vom Typ 2, jedes mit einer Multiplizität 1. Anschließend wird die Liste der Unteraufgaben neu numeriert und im Funktionsblock 58 neu geordnet, bevor die Steuerschleife zum Entscheidungsblock 52 zurückkehrt.
- Ist die Prüfung im Entscheidungblock 54 negativ, wird in Entscheidungsblock 60 in einer weiteren Prüfung festgestellt, ob es möglich ist, die Multiplizität des Paares vom Typ 2, das der größten Unteraufgabe in der Liste entspricht, auf eine neue Multiplizität M(P zu erhöhen, und zwar in der Weise, daß jetzt jede Unteraufgabe paßt. Wenn ja, wird die kleinste dieser Multiplizitäten in Funktionsblock 62 gefunden und die Liste der Unteraufgaben wird revidiert, um diese neue Multiplizität aufzunehmen. Außerdem wird K angepaßt und die Zeitschätzungen werden für die neuen Unteraufgaben berechnet. Der Prozeß geht dann weiter zu Funktionsblock 58.
- Fällt die Prüfung im Entscheidungsblock 60 negativ aus, wird in Funktionsblock 64 der Unteraufgabe eine Multiplizität P zugewiesen, jede der P Unteraufgaben wird einem anderen Prozessor zugewiesen und die Unteraufgaben werden von der Liste entfernt. Außerdem wir K angepaßt. Die entfernten P Unteraufgaben werden fast in der gleichen Zeit ausgeführt. In Entscheidungsblock 66 wird anschließend geprüft, ob die Liste der Unteraufgaben leer ist. Wenn ja, stoppt der Prozeß; wenn nicht, schleift der Prozeß zurück zum Funktionsblock 58.
- Fällt die Prüfung im Entscheidungsblock 52 positiv aus, passen alle Unteraufgaben. In Funktionsblock 68 wird die Ziel- Makespan-Zeit TARGET als 1/P-tel der Summe der Zeitschätzungen aller Unteraufgaben in der Liste berechnet. Wichtigster Punkt ist, daß dieses Ziel jetzt stabil ist. Obwohl wir die Paare vom Typ 1 in aufeinanderfolgenden Schritten in Paare vom Typ 2 aufteilen können, bleibt die Summe der Zeitschätzungen unverändert. Unsere LPT-Variante findet in den folgenden Schritten statt.
- Betrachten wir den Prozessor p, für den die Differenz zwischen TARGET und der bereits ihm zugewiesenen Summe der Unteraufgabenzeiten maximal ist. Betrachten wir die größte in der Liste verbleibende Unteraufgabe (Vk,1,Vk,2). Im Entscheidungsblock 70 wird geprüft, ob es sich um eine Unteraufgabe vom Typ 2 handelt. Wenn dem so ist, wird in Funktionsblock 72 dem Prozessor p die Unteraufgabe (Vk,1,Vk,2) zugewiesen und die Unteraufgabe wird aus der Liste entfernt. Im Entscheidungsblock 80 wird dann geprüft, ob die Liste der Unteraufgaben leer ist. Wenn ja, endet der Prozeß; wenn nein, schleift der Prozeß zurück zum Entscheidungsblock 70.
- Fällt die Entscheidung im Entscheidungsblock 70 negativ aus, wird im Entscheidungsblock 78 geprüft, ob, wenn Prozessor p (Vk,1,Vk,2) zugewiesen würde, die revidierte Differenz zwischen TARGET und der Summe der ihm zugewiesenen Unteraufgabenzeiten negativ wäre. Wenn nicht, geht die Steuerung zum Funktionsblock 72; wenn ja, wird in Funktionsblock 74 (Vk,1,Vk,2) unterteilt in card(Vk,2) Paare vom Typ 2, jedes mit einer Multiplizität 1. Die Liste der Unteraufgaben wird in Funktionsblock 76 neu numeriert und neu geordnet, bevor die Steuerung zum Entscheidungsblock 70 zurückkehrt.
- Der zweite Hash-Verbindungsalgorithmus für Stufe 2 der Verbindungsoperation ist im Flußbild der Figur 7 dargestellt. Wenn man die Flußbilder der Figuren 4 und 7 miteinander vergleicht, stellt man fest, daß die Gesamtlogik des Sortier- Misch-Verbindungsalgorithmus und dieses Hash-Verbindungsalgorithmus sehr ähnlich ist. Bezugnehmend auf Figur 7; der Prozeß beginnt in Funktionsblock 90, indem zunächst die Gruppe {(k,F),k=1,...,B&sub1;} in absteigender Reihenfolge entsprechend dem Wert der Unteraufgabe, T¹k,F, sortiert wird; F={1, ...,B&sub2;}. Wir führen eine Liste aller aktuellen Unteraufgaben, geordnet nach den Zeitschätzungen der Unteraufgaben. Im Entscheidungsblock 92 wird dann geprüft, ob die Zeitschätzung für die größte Unteraufgabe in der Liste kleiner als oder gleich 1/P-tel der Summe der Zeitschätzungen aller Unteraufgaben in der Liste ist. Mit anderen Worten, "paßt" die größte Unteraufgabe? Wenn ja, wird in Funktionsblock 94 LPT oder MULTIFIT durchgeführt. Auch hier ist wieder der erste und rechnerisch aufwendigste Schritt in beiden Algorithmen das Ordnen der Unteraufgaben nach Zeitschätzungen. Dies ist in unserem Fall bereits geschehen. Im Entscheidungsblock 96 wird dann geprüft, ob der Makespan innerhalb eines vorher festgelegten multiplikativen Faktors 1+Δ einer perfekten Zuweisung liegt. Wenn ja, stoppt der Prozeß; wenn nein, wird in Entscheidungsblock 98 geprüft, ob ein Paar vom Typ 1 übrigbleibt. Wenn nein, stoppt der Prozeß; andernfalls wird in Funktionsblock 100 das größte Paar vom Typ 1 auf der Liste ausgewählt. Anschließend wird in Funktionsblock 102 das größte Paar vom Typ 1 (Vk,1,Vk,2) wie folgt in zwei Paare unterteilt: Für jedes Element mεVk,2 gibt es eine entsprechende Unteraufgabenzeit T¹Vk,1'{m. Mit der Gruppe {τ¹Vk,1'{m} mεVk,2} LPT oder MULTIFIT ausführen, wobei Vk,2 in zwei Teilgruppen V¹k,2 und V²k,2 mit etwa gleichen Gesamt-Zeitschätzungen für die Unteraufgabe unterteilt wird. Wenn bei einer der beiden Unteraufgaben eine Zeit von 0 geschätzt wird, kann sie von der Liste gestrichen werden. Außerdem wird K angepaßt. Alternativ könnte man das größte Paar vom Typ 1 in eine beliebige Anzahl Q von Gruppierungen zwischen 2 und der Mächtigkeit Vk,2 aufteilen Die Wahl Q=2 wurde hier aus Darstellungsgründen getroffen. Im Entscheidungsblock 104 wird nun geprüft, ob die Liste der Unteraufgaben leer ist. Wenn ja, stoppt der Prozeß; wenn nein, wird die Liste der Unteraufgaben in Funktionsblock 106 neu numeriert und neu geordnet, bevor die Steuerschleife zum Entscheidungsblock 92 zurückkehrt.
- Fällt die Prüfung im Entscheidungsblock 92 negativ aus, wird im Entscheidungsblock 108 geprüft, ob das größte Element in der Liste der Unteraufgaben vom Typ 1 ist. Wenn ja, geht die Steuerung weiter zum Funktionsblock 102; wenn nein, wird im Entscheidungsblock 110 geprüft, ob es möglich ist, die Multiplizität des Paares vom Typ 2 entsprechend der größten Unteraufgabe in der Liste auf eine neue Multiplizität M< P in der Weise zu erhöhen, daß jetzt jede Unteraufgabe paßt. Wenn ja, wird die kleinste solche Multiplizität gefunden und die Liste der Unteraufgaben wird dahingehend revidiert, daß diese neue Multiplizität in Funktionsblock 112 mit aufgenommen wird. K wird angepaßt und die Zeitschätzungen werden für die neuen Unteraufgaben berechnet. Die Steuerung geht dann zum Funktionsblock 106. Fällt die Prüfung im Entscheidungsblock 110 negativ aus, wird in Funktionsblock 114 der Unteraufgabe die Multiplizität P zugewiesen, jede der P Unteraufgaben wird einem anderen Prozessor zugewiesen und die Unteraufgaben werden von der Liste entfernt. Außerdem wird K angepaßt. Die entfernten P Unteraufgaben werden in fast derselben Zeit ausgeführt. Der Prozeß geht dann weiter zu Funktionsblock 104.
- Bei unserer Methode favorisieren wir Paare mit der Multiplizität 1, es können jedoch auch höhere Multiplizitäten zur Überwindung eines übermäßigen Schräglaufs eingesetzt werden. Wo dieser übermäßige Schräglauf vorliegt, dürfte sich auf natürliche Weise während der Durchführung des Algorithmus herausstellen. Die oben beschriebene Methode könnte auch mit vielen anderen Variationen realisiert werden. Zum Beispiel könnte in beiden Methoden ein iterativer Verbesserungsalgorithmus am Ende eingesetzt werden. Diese Methode ist in Figur 8 dargestellt. In dieser Figur stellt das GOAL 1P-tel der Summe der Zeitschätzungen aller Unteraufgaben dar. Die Methode sucht sich den Prozessor P mit der größten Summe der Zeitschätzungen der ihm zugewiesenen Unteraufgaben heraus. Im Prozessor P wird die größte Unteraufgabe (Vk,1,Vk,2) vom Typ 1 herausgesucht und in card (Vk,2) Paare vom Typ 2 mit einer Multiplizität von 1 unterteilt. Diese Aufgaben werden dann den Prozessoren neu zugewiesen, die größte Unteraufgabe zuerst, wie in Figur 8 gezeigt wird.
- Wie in Stufe 2 für den Sortier-Misch-Verbindungsalgorithmus, die in Figur 4 dargestellt ist, müssen in diesem Verfahren für Stufe 2, basierend auf dem zweiten Hash-Verbindungsalgorithmus nach Figur 7, LPT oder MULTIFIT nicht immer im Funktionsblock 94 durchgeführt werden. Die Anzahl der Durchführungen des Minimum-Makespan-Algorithmus könnte auch durch einen Zähler geregelt werden. Auch könnte nach einem anderen Zähler die Zeit für den Algorithmus ablaufen, auch wenn diese Lösung nicht ganz zufriedenstellend ist.
- In der in Figur 3 gezeigten Stufe 3 werden die Tupel der Relationen R&sub1; und R&sub2; von der Platte gelesen, die Hash-Funktionen H&sub1; und H&sub2; werden angewendet und die Tupel werden an die in Stufe 2 bestimmten zugewiesenen Prozessoren geschickt.
- Auf Wunsch könnten in der in Figur 3 gezeigten Stufe 4 im Verlauf der eigentlichen Verbindung die Prozessoren auch über den Fortgang der Operation berichten. Da es sich bei den Zeitschätzungen der Unteraufgabe genau hierum handelt, könnte der Fortgang der Verbindung unausgewogen werden. Wenn diese Unausgewogenheit eine bestimmte vorher festgelegte Schwelle überschreitet, könnte ein neuer LPT- oder MULTIFIT-Algorithmus eingeleitet werden.
- Es gibt viele alternative Möglichkeiten zur Realisierung des hierarchischen Hashing-Konzepts. Bei einer Alternative kann bei Durchführung der Hashing-Technik eine Liste der in Stufe 1 angetroffenen am häufigsten verwendeten Werte der verschiedenen Verbindungsspalten-Werte geführt werden. Außerdem würde die Vorkommenshäufigkeit gepflegt. Wenn die Vorkommenshäufigkeit eines Verbindungsspalten-Werts unter eine vorher festgelegte Schwelle fällt, würde der Wert aus der Liste entfernt. Eine andere Alternative ist, im Verlauf der Stufe 1 beim Durchführen der Hashing-Technik die Verbindungsspalten- Werte abzutasten. Die Liste mit den am häufigsten verwendeten Werten oder Abtastergebnissen könnte dann zur Erkennung der Schräglaufverteilung und als Richtlinie dafür verwendet werden, welche Partitionen weiter partitioniert werden.
- Zusammenfassend wurde ein Verfahren zur Verbindung zweier Datenbankrelationen auf einem gemeinsamen Feld in einer parallelen relationalen Datenbank-Umgebung mit einer Vielzahl von Prozessoren bereitgestellt, basierend entweder auf der Verwendung eines Sortier-Misch- oder eines Hash-Verbindungsalgorithmus. Der Prozeß beinhaltet die Partitionierung einer ersten Relation in eine Vielzahl von Partitionen und einer zweiten Relation in eine entsprechende Vielzahl von Partitionen, so daß jeder einzelne Wert in dem gemeinsamen Feld eindeutig der entsprechenden Partition der zweiten Relation entspricht, wodurch eine aktuelle Gruppe von Jobs definiert wird, die jeweils aus der Aufgabe des Verbindens einer Partition der ersten Relation mit der entsprechenden Partition der zweiten Relation bestehen. Die Zeit, die ein einzelner Prozessor zur Ausführung jedes dieser Jobs benötigt, wird geschätzt, diese Schätzungen bilden eine aktuelle Gruppe von Ausführungszeitschätzungen.
- Anschließend müssen die Jobs auf eine Zeit reduziert werden, die geringer als oder gleich der Summe der Zeitschätzungen geteilt durch die Anzahl der Prozessoren ist. Dies geschieht durch Subpartitionierung aller Partitionen, die Jobs mit einer Ausführungszeitschätzung entsprechen, die größer als die Summe der Zeitschätzungen geteilt durch die Anzahl der Prozessoren ist. Die Subpartitionierung erreicht man durch Ersetzen einer jeden solchen Partition der ersten Relation und der entsprechenden Partition der zweiten Relation, die mehr als einen unterschiedlichen Wert in dem gemeinsamen Feld enthalten, durch mindestens zwei kleinere Partitionen, wobei jeder einzelne Wert in dem gemeinsamen Feld eindeutig einer der kleineren Partitionen der ersten Relation und eindeutig der entsprechenden Partition der kleineren Partitionen der zweiten Relation entspricht. Hierduch werden Ersatz-Jobs in der aktuellen Gruppe der Jobs definiert, wobei jeder Ersatz-Job aus der Aufgabe besteht, eine dieser kleineren Partitionen der ersten Relation mit der entsprechenden kleineren Partition der zweiten Relation zu verbinden. Bezogen auf jeden Job, bei dem die entsprechenden Partitionen der ersten und der zweiten Relation nur einen unterschiedlichen Wert in dem gemeinsamen Feld enthalten, wird die größere dieser entsprechenden Partitionen durch eine Vielzahl kleinerer Partitionen ersetzt, wobei die Anzahl dieser kleineren Partitionen die minimale Ganzzahl ist, die, wenn sie in die Ausführungszeitschätzung für diesen Job unterteilt wird, eine Zeit ergibt, die unterhalb der Summe der Ausführungszeitschätzungen geteilt durch die Anzahl der Prozessoren liegt. Auf diese Weise werden Ersatz-Jobs definiert, wobei jeder Ersatz-Job aus der Aufgabe besteht, eine der kleineren Partitionen der einen Relation mit der unveränderten entsprechenden Partition der anderen Relation zu verbinden.
- Wenn der Subpartitionierungsprozeß abgeschlossen ist, wird die aktuelle Gruppe der Ausführungszeitschätzungen durch Ersetzen der Ausführungszeitschätzungen der ersetzten Jobs durch Ausführungszeitschätzungen für die Ersatz-Jobs aktualisiert. Der Prozeß wird iterativ durchgeführt, bis für keinen Job in der aktuellen Gruppe von Jobs eine Ausführungszeit vorhanden ist, die größer als die Summe der Ausführungszeitschätzungen geteilt durch die Anzahl der Prozessoren ist.
- Ein wichtiger Teil der Erfindung ist die Verfeinerung der Prozessor-Zuweisungen. Dies geschieht durch Einplanen der aktuellen Gruppe von Jobs unter den einzelnen Prozessoren unter Anwendung einer Optimierungstechnik mit minimalen Makespan. Der Umfang des Ausführungszeit-Schräglaufs, der sich ergeben würde, wenn die Prozessoren die aktuelle Job-Gruppe wie geplant ausführen würden, wird geschätzt. Diese Schätzung wird mit einem Standard-Schräglauf verglichen; wenn die Schätzung annehmbar ist, wird die aktuelle Job-Gruppe entsprechend der Planung auf den Prozessoren ausgeführt, wodurch die beiden Datenbankrelationen auf einem gemeinsamen Feld mit einem minimalen Ausführungszeit-Schräglauf verbunden werden.
- Erfüllt die Schräglauf-Schätzung nicht den Schräglauf-Standard, wird eine der größten Partitionen der ersten und der zweiten Relation durch mindestens zwei kleinere Partitionen ersetzt, um Ersatz-Jobs für den durch die ersetzten Partitionen definierten Job festzulegen. Jeder Ersatz-Job besteht aus der Aufgabe, eine der kleineren Ersatz-Partitionen der ersten Relation durch die entsprechende kleinere Ersatz-Partition der zweiten Relation zu ersetzen. Die aktuelle Gruppe von Ausführungszeitschätzungen wird dann durch Ersetzen der Ausführungszeitschätzungen der ersetzten Jobs durch die Ausführungszeitschätzungen für die Ersatz-Jobs aktualisiert. Außerdem wird die Emplanung der aktuellen Job-Gruppe aktualisiert, so daß der geschätzte Ausführungszeit-Schräglauf minimiert wird. Der Umfang des Ausführungszeit-Schräglaufs wird geschätzt und mit dem Schräglauf-Standard verglichen. Dieser Prozeß wird iterativ wiederholt, bis entweder der Umfang des Schräglaufs dem Standard-Schräglauf entspricht, oder alle Partitionen entsprechend einem vorher festgelegten maximalen Umfang subpartitioniert sind.
Claims (10)
1. Ein Verfahren zur Verbindung zweier Relationen einer
Datenbank auf einem gemeinsamen Feld in einem parallelen
relationalen Datenbanksystem mit P Prozessoren, wobei
das genannte Verfahren folgende Schritte umfaßt:
(a) Partitionieren der ersten Relation in eine Vielzahl
von Partitionen und der zweiten Relation in eine
entsprechende Vielzahl von Partitionen, wodurch
eine aktuelle Gruppe von Jobs definiert wird, die
jeweils aus der Aufgabe bestehen, eine Partition
der ersten Relation mit der entsprechenden
Partition der zweiten Relation zu verbinden, so daß die
Jobs auf einen Prozessor passen,
dadurch gekennzeichnet, daß Schritt a ausgeführt wird
durch
ein Teile- und -herrsche-Verfahren durch Anwendung eines
reiterativen Prozesses, in dem k< P Partitionen erzeugt
werden, und diese Partitionen, die schätzungsweise mehr
als 1/P der geschätzten Gesamtverarbeitungszeit in
Anspruch nehmen, weiter in neue Partitionen unterteilt
werden; anschließend wird die Zahl k an die neue Anzahl
der Partitionen angepaßt, um jeden einzelnen Wert in dem
gemeinsamen Feld zu berücksichtigen, der eindeutig einer
der Partitionen der ersten Relation und eindeutig der
entsprechenden Partition der Partitionen der zweiten
Relation entspricht, wobei der genannte
Partitionierungsschritt jeden Job auf weniger als oder entsprechend 1/P
der Gesamtausführungszeit reduziert;
und weiter gekennzeichnet durch folgende Schritte:
(b) Einplanen einer aktuellen Gruppe von Jobs unter
P Prozessoren unter Anwendung einer
Optimierungstechnik mit minimalem Makespan;
(c) Schätzen der Menge des Ausführungszeit-Schräglaufs,
der auftreten würde, wenn P Prozessoren die
aktuelle Job-Gruppe wie in Schritt (b) geplant
ausführen würden;
(d) Vergleichen des geschätzten Schräglaufs mit einem
Standard-Schräglauf; und
(e) wenn der geschätzte Schräglauf dem
Standard-Schräglauf entspricht, Ausführen der aktuellen Job-
Gruppe, wie zuletzt geplant, unter Einsatz von
P Prozessoren, dadurch Verbinden der genannten
beiden Datenbankrelationen auf einem gemeinsamen Feld
mit minimalem Ausführungszeit-Schräglauf.
2. Das Verfahren nach Anspruch 1, das, wenn der geschätzte
Schräglauf nicht dem Standard-Schräglauf entspricht,
weiter folgende Schritte umfaßt:
(f) Ersetzen einer der größten Partitionen der ersten
und zweiten Relationen durch mindestens zwei
kleinere Partitionen, dadurch Definieren von Ersatz-
Jobs für den durch die ersetzten Partitionen
definierten Job, wobei jeder dieser Ersatz-Jobs aus der
Aufgabe besteht, eine der kleineren
Ersatz-Partitionen der ersten Relation mit der entsprechend
kleineren Ersatz-Partition der zweiten Relation zu
verbinden.
(g) Aktualisieren einer aktuellen Gruppe von
Ausführungszeitschätzungen durch Ersetzen der
Ausführungszeitschätzungen der ersetzten Jobs durch
Ausführungszeitschätzungen für die Ersatz-Jobs;
(h) Aktualisieren der Emplanung der aktuellen Gruppe
von Jobs zwischen P Prozessoren, so daß der
geschätzte Ausführungszeit-Schräglauf minimiert wird;
(i) Schätzen des Ausführungszeit-Schräglaufs, der
entstehen würde, wenn P Prozessoren die aktuelle Job-
Gruppe so ausführen würden, wie in Schritt (h)
geplant;
(j) Vergleichen des in Schritt (i) geschätzten
Ausführungszeit-Schräglaufs mit dem Standard-Schräglauf;
und
(k) iteratives Ausführen der Schritte (e) bis (j), bis
entweder der Schräglauf dem Standard-Schräglauf in
Schritt (j) entspricht oder alle Partitionen
entsprechend einem vorher festgelegten maximalen
Umfang subpartitioniert wurden.
3. Das Verfahren nach Anspruch 2, bei dem der
Partitionierungsschritt weiter folgende Schritte umfaßt:
(l) Schätzen der Zeit, die ein einzelner Prozessor
benötigt, um jeden der genannten Jobs auszuführen,
wobei die genannten Schätzungen eine aktuelle
Gruppe von Ausführungszeitschätzungen bilden;
(m) Subpartitionieren aller Partitionen, die Jobs mit
einer Ausführungszeitschätzung entsprechen, welche
größer ist als die Summe der
Ausführungszeitschätzungen geteilt durch P;
(n) Aktualisieren der aktuellen Gruppe von
Ausführungszeitschätzungen durch Ersetzen der
Ausführungszeitschätzungen der ersetzten Jobs durch
Ausführungszeitschätzungen für die Ersatz-Jobs; und
(o) iteratives Ausführen der Schritte (m) und (n), bis
in der aktuellen Job-Gruppe keine
Ausführungszeitschätzung für einen Job enthalten ist, die größer
ist als die Summe der Ausführungszeitschätzungen
geteilt durch P.
4. Das Verfahren nach Anspruch 3, bei dem der Schritt der
Subpartitionierung weiter folgende Schritte umfaßt:
(p) Ersetzen aller Partitionen der ersten Relation und
der entsprechenden Partition der zweiten Relation,
die mehr als einen unterschiedlichen Wert in dem
gemeinsamen Feld enthalten, durch mindestens zwei
kleinere Partitionen, wobei jeder einzelne Wert in
dem gemeinsamen Feld eindeutig einer der kleineren
Partitionen der ersten Relation und eindeutig der
entsprechenden Partition der kleineren Partitionen
der zweiten Relation entspricht, dadurch Definieren
von Ersatz-Jobs für alle Jobs aus Schritt (p) in
der aktuellen Job-Gruppe, wobei jeder dieser
Ersatz-Jobs aus der Aufgabe besteht, eine dieser
kleineren Partitionen der ersten Relation mit der
entsprechend kleineren Partition der zweiten
Relation zu verbinden; und
(q) in bezug auf alle Jobs, bei denen die
entsprechenden Partitionen der ersten und zweiten Relationen
nur einen unterschiedlichen Wert in dem gemeinsamen
Feld enthalten, Ersetzen der größeren dieser
entsprechenden Partitionen durch X kleinere
Partitionen, wobei X die kleinste ganze Zahl ist, die, wenn
sie in die Ausführungszeitschätzung für einen
solchen Job unterteilt wird, eine Zeit ergibt, die
geringer ist als die Summe der
Ausführungszeitschätzungen
geteilt durch P, dadurch Definition von
Ersatz-Jobs für alle derartigen Jobs aus Schritt (q)
in der aktuellen Job-Gruppe, wobei jeder dieser
Ersatz-Jobs aus der Aufgabe besteht, eine der X
kleineren Partitionen der einen Relation mit der
unveränderten entsprechenden Partition der anderen
Relation zu verbinden.
5. Das Verfahren nach Anspruch 2, bei dem V&sub1; und V&sub2; zwei
Werte in der Domäne der Verbindungsspalten der genannten
ersten und zweiten Relationen sind und ein Paar (V&sub1;,V&sub2;),
das V&sub1;< V&sub2; erfüllt, als ein Paar vom Typ 1 definiert
wird, und ein Paar (V&sub1;,V&sub2;), das V&sub1;=V&sub2; erfüllt, als ein
Paar vom Typ 2 definiert wird, weiter, vor Schritt (f)
folgende Schritte umfassend:
(r) Auswählen des größten Paares vom Typ 1, um es durch
mindestens zwei kleinere Partitionen zu ersetzen;
jedoch
(s) wenn keine Paare vom Typ 1 vorhanden sind, dann
Ausführen der aktuellen Job-Gruppe, wie zuletzt
geplant, unter Einsatz von P Prozessoren, dadurch
Verbinden der genannten zwei Datenbankrelationen
auf einem gemeinsamen Feld mit minimalem
Ausführungszeit-Schräglauf.
6. Das Verfahren nach Anspruch 3, bei dem V&sub1; und V&sub2; zwei
Werte in der Domäne von Verbindungspalten der genannten
ersten und zweiten Relationen sind, und ein Paar
(V&sub1;,V&sub2;), das V&sub1;< V&sub2; entspricht, als ein Paar vom Typ 1
definiert wird und ein Paar (V&sub1;,V&sub2;), das V&sub1;=V&sub2; entspricht,
als ein Paar vom Typ 2 definiert wird, und bei dem, wenn
eine Zeitschätzung für einen der genannten Jobs größer
ist als 1/P der gesamten Ausführungszeit in Schritt (m),
weiter die folgenden Schritte enthalten sind:
(t) Festellen, ob der genannte eine Job ein Paar vom
Typ 1 ist; und
(u) wenn es sich um ein Paar vom Typ 1 handelt, dann
dieses ersetzen durch zumindest zwei Partitionen,
von denen eine vom Typ 2 ist.
7. Das Verfahren nach Anspruch 6, bei dem, wenn der
genannte eine Job ein Paar vom Typ 2 ist, die folgenden
Schritte ausgeführt werden:
(v) Feststellen, ob die Multiplizität des Paares vom
Typ 2 erhöht werden kann; und
(w) wenn die Multiplizität erhöht werden kann, Finden
der kleinsten Multiplizität und Revidieren der
aktuellen Job-Gruppe.
8. Das Verfahren nach Anspruch 7, bei dem, wenn die
Multiplizität des Paares vom Typ 2 nicht erhöht werden kann,
folgende Schritte ausgeführt werden:
(x) Zuweisen des Paares vom Typ 2, so daß dieses eine
Multiplizität P hat; und
(y) Zuweisen jedes der P Jobs an verschiedene
Prozessoren.
9. Das Verfahren nach Anspruch 1, bei dem Schritt (a) durch
eine hierarchische Doppel-Hashing-Technik ausgeführt
wird, unter Einsatz von zwei Hash-Funktionen H&sub1; und H&sub2;,
wobei H&sub2; zur weiteren Unterteilung jeder von H&sub1;
erzeugten Hash-Partition in feinere Partitionen eingesetzt
wird.
10. Das Verfahren nach Anspruch 1, bei dem in Schritt (e)
der Fortgang der genannten Prozessoren in der
Verbindungsoperation überwacht wird, und bei dem, wenn der
Fortgang der Verbindungsoperation unausgewogen wird und
eine vorbestimmte Schwelle überschreitet, die Schritte
(b) bis (d) wiederholt werden.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US07/417,366 US5121494A (en) | 1989-10-05 | 1989-10-05 | Joining two database relations on a common field in a parallel relational database field |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69030228D1 DE69030228D1 (de) | 1997-04-24 |
DE69030228T2 true DE69030228T2 (de) | 1997-09-18 |
Family
ID=23653718
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69030228T Expired - Lifetime DE69030228T2 (de) | 1989-10-05 | 1990-10-04 | Verfahren zur Verbindung zweier Relationen einer Datenbank auf einem gemeinsamen Feld in einem parallelen Datenbanksystem |
Country Status (4)
Country | Link |
---|---|
US (1) | US5121494A (de) |
EP (1) | EP0421408B1 (de) |
JP (1) | JPH07111718B2 (de) |
DE (1) | DE69030228T2 (de) |
Families Citing this family (94)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07104871B2 (ja) * | 1989-08-31 | 1995-11-13 | 三菱電機株式会社 | リレーショナル・データベースにおけるジョイン処理方式 |
JPH03130842A (ja) * | 1989-10-17 | 1991-06-04 | Toshiba Corp | データベースシステムの同時実行制御装置 |
US5241648A (en) * | 1990-02-13 | 1993-08-31 | International Business Machines Corporation | Hybrid technique for joining tables |
US5291583A (en) * | 1990-12-14 | 1994-03-01 | Racal-Datacom, Inc. | Automatic storage of persistent ASN.1 objects in a relational schema |
US5307485A (en) * | 1991-05-31 | 1994-04-26 | International Business Machines Corporation | Method and apparatus for merging sorted lists in a multiprocessor shared memory system |
JPH077422B2 (ja) * | 1991-08-23 | 1995-01-30 | インターナショナル・ビジネス・マシーンズ・コーポレイション | コンピュータ処理データベース・システムにおけるジョインの実行方法及びシステム |
US5345585A (en) * | 1991-12-02 | 1994-09-06 | International Business Machines Corporation | Method for optimizing processing of join queries by determining optimal processing order and assigning optimal join methods to each of the join operations |
JP3526585B2 (ja) * | 1992-03-12 | 2004-05-17 | 株式会社リコー | 分散データベースの質問処理最適化方式 |
US5418854A (en) * | 1992-04-28 | 1995-05-23 | Digital Equipment Corporation | Method and apparatus for protecting the confidentiality of passwords in a distributed data processing system |
JP3824091B2 (ja) * | 1992-10-09 | 2006-09-20 | 富士通株式会社 | リレーショナルデータベースシステム |
JP3202074B2 (ja) * | 1992-10-21 | 2001-08-27 | 富士通株式会社 | 並列ソート方式 |
US5423035A (en) * | 1992-12-23 | 1995-06-06 | Hughes Aircraft Company | Method for evaluating relational database queries with automatic indexing and ordering of join components |
US5473741A (en) * | 1993-08-30 | 1995-12-05 | Graphic Systems Technology, Inc. | Method for determining the time to perform raster image processing |
WO1995009395A1 (en) * | 1993-09-27 | 1995-04-06 | Oracle Corporation | Method and apparatus for parallel processing in a database system |
US5437032A (en) * | 1993-11-04 | 1995-07-25 | International Business Machines Corporation | Task scheduler for a miltiprocessor system |
US5765146A (en) * | 1993-11-04 | 1998-06-09 | International Business Machines Corporation | Method of performing a parallel relational database query in a multiprocessor environment |
US5742806A (en) * | 1994-01-31 | 1998-04-21 | Sun Microsystems, Inc. | Apparatus and method for decomposing database queries for database management system including multiprocessor digital data processing system |
US6009265A (en) * | 1994-02-25 | 1999-12-28 | International Business Machines Corporation | Program product for optimizing parallel processing of database queries |
US5574900A (en) * | 1994-02-25 | 1996-11-12 | International Business Machines Corporation | System and method for optimizing parallel processing of database queries |
US5835755A (en) * | 1994-04-04 | 1998-11-10 | At&T Global Information Solutions Company | Multi-processor computer system for operating parallel client/server database processes |
US5542089A (en) * | 1994-07-26 | 1996-07-30 | International Business Machines Corporation | Method and apparatus for estimating the number of occurrences of frequent values in a data set |
GB9417314D0 (en) * | 1994-08-27 | 1994-10-19 | Int Computers Ltd | Method for performing joins in a database system |
JP3201945B2 (ja) * | 1995-01-10 | 2001-08-27 | インターナショナル・ビジネス・マシーンズ・コーポレーション | データベースのテーブルを比較する方法 |
JP3560690B2 (ja) * | 1995-06-14 | 2004-09-02 | 富士通株式会社 | 並列プロセッサ装置 |
US5860137A (en) * | 1995-07-21 | 1999-01-12 | Emc Corporation | Dynamic load balancing |
WO1997011433A1 (en) * | 1995-09-21 | 1997-03-27 | The Trustees Of Columbia University In The City Of New York | Performing efficient join operations on large tables |
US5666525A (en) * | 1995-09-21 | 1997-09-09 | The Trustees Of Columbia University In The City Of New York | System and method for performing an efficient join operation on large tables with a small main memory |
USRE37965E1 (en) * | 1995-09-27 | 2003-01-07 | International Business Machines Corporation | Method for localizing execution or subqueries and determining collocation of execution of subqueries in a parallel database |
US5745746A (en) * | 1996-06-24 | 1998-04-28 | International Business Machines Corporation | Method for localizing execution of subqueries and determining collocation of execution of subqueries in a parallel database |
US5774692A (en) * | 1995-10-05 | 1998-06-30 | International Business Machines Corporation | Outer quantifiers in object-oriented queries and views of database systems |
US5797136A (en) * | 1995-10-05 | 1998-08-18 | International Business Machines Corporation | Optional quantifiers in relational and object-oriented views of database systems |
US5758345A (en) * | 1995-11-08 | 1998-05-26 | International Business Machines Corporation | Program and method for establishing a physical database layout on a distributed processor system |
US5752072A (en) * | 1996-05-09 | 1998-05-12 | International Business Machines Corporation | Sorting scheme without compare and branch instructions |
US5873074A (en) * | 1997-04-18 | 1999-02-16 | Informix Software, Inc. | Applying distinct hash-join distributions of operators to both even and uneven database records |
US5983215A (en) * | 1997-05-08 | 1999-11-09 | The Trustees Of Columbia University In The City Of New York | System and method for performing joins and self-joins in a database system |
US6704866B1 (en) | 1997-07-11 | 2004-03-09 | Cisco Technology, Inc. | Compression and encryption protocol for controlling data flow in a network |
US6092061A (en) * | 1997-08-15 | 2000-07-18 | International Business Machines Corporation | Data partitioning by co-locating referenced and referencing records |
US5884320A (en) * | 1997-08-20 | 1999-03-16 | International Business Machines Corporation | Method and system for performing proximity joins on high-dimensional data points in parallel |
US6006232A (en) * | 1997-10-21 | 1999-12-21 | At&T Corp. | System and method for multirecord compression in a relational database |
JP3571201B2 (ja) * | 1997-12-12 | 2004-09-29 | 富士通株式会社 | データベース検索装置及びデータベース検索プログラムを記録したコンピュータ読み取り可能な記録媒体 |
US6401188B1 (en) | 1998-02-27 | 2002-06-04 | Cisco Technology, Inc. | Method for selection on a pattern sequence |
US6292822B1 (en) | 1998-05-13 | 2001-09-18 | Microsoft Corporation | Dynamic load balancing among processors in a parallel computer |
US6106575A (en) * | 1998-05-13 | 2000-08-22 | Microsoft Corporation | Nested parallel language preprocessor for converting parallel language programs into sequential code |
WO2000011574A2 (en) * | 1998-08-20 | 2000-03-02 | Equifax, Inc. | System and method for updating a credit information database |
US6226639B1 (en) | 1998-09-22 | 2001-05-01 | International Business Machines Corporation | System and method for hybrid hash join using over-partitioning to respond to database query |
US6601058B2 (en) | 1998-10-05 | 2003-07-29 | Michael Forster | Data exploration system and method |
US6327587B1 (en) | 1998-10-05 | 2001-12-04 | Digital Archaeology, Inc. | Caching optimization with disk and/or memory cache management |
US6253197B1 (en) | 1998-10-06 | 2001-06-26 | International Business Machines Corporation | System and method for hash loops join of data using outer join and early-out join |
US6275987B1 (en) * | 1998-11-05 | 2001-08-14 | International Business Machines Corporation | Adaptive, predictive progress indicator |
US7047232B1 (en) * | 1999-01-13 | 2006-05-16 | Ab Initio Software Corporation | Parallelizing applications of script-driven tools |
US6341346B1 (en) | 1999-02-05 | 2002-01-22 | Cisco Technology, Inc. | Method for comparison between a pattern sequence and a variable length key |
US6640221B1 (en) | 2000-07-10 | 2003-10-28 | Sas Institute Inc. | System and method for configuring, sequencing and viewing joins in a query |
US20020091752A1 (en) * | 2001-01-09 | 2002-07-11 | Firlie Bradley M. | Distributed computing |
US7213025B2 (en) * | 2001-10-16 | 2007-05-01 | Ncr Corporation | Partitioned database system |
US7080072B1 (en) | 2001-11-14 | 2006-07-18 | Ncr Corp. | Row hash match scan in a partitioned database system |
US7035851B1 (en) * | 2001-12-07 | 2006-04-25 | Ncr Corp. | Reorganization of database records using partition merging |
US7120648B2 (en) * | 2002-02-26 | 2006-10-10 | International Business Machines Corporation | System and method for predicting execution time of a database utility command |
US6954748B2 (en) * | 2002-04-25 | 2005-10-11 | International Business Machines Corporation | Remote data access and integration of distributed data sources through data schema and query abstraction |
US7882100B2 (en) * | 2005-01-24 | 2011-02-01 | Sybase, Inc. | Database system with methodology for generating bushy nested loop join trees |
US8589944B2 (en) * | 2005-03-16 | 2013-11-19 | Ricoh Production Print Solutions | Method and system for task mapping to iteratively improve task assignment in a heterogeneous computing system |
JP4793091B2 (ja) * | 2005-05-17 | 2011-10-12 | ブラザー工業株式会社 | インク給送装置及びインクジェット記録装置 |
US7685193B2 (en) * | 2006-04-28 | 2010-03-23 | Kognitio Limited | Database system with multiple processing nodes |
FR2907567B1 (fr) * | 2006-10-23 | 2008-12-26 | Canon Kk | Procede et dispositif de generation de motifs de reference a partir d'un document ecrit en langage de balisage et procedes et dispositifs de codage et de decodage associes. |
US7636712B2 (en) * | 2006-11-14 | 2009-12-22 | Microsoft Corporation | Batching document identifiers for result trimming |
US20080140696A1 (en) * | 2006-12-07 | 2008-06-12 | Pantheon Systems, Inc. | System and method for analyzing data sources to generate metadata |
US8799272B2 (en) | 2007-07-20 | 2014-08-05 | Hewlett-Packard Development Company, L.P. | Data skew insensitive parallel join scheme |
JP4966175B2 (ja) * | 2007-12-04 | 2012-07-04 | 日本電信電話株式会社 | 分散インデックス結合方法及びシステム |
US7945529B2 (en) * | 2007-12-27 | 2011-05-17 | Business Objects, S.A. | Apparatus and method for performing table comparisons |
US8078610B2 (en) * | 2008-03-26 | 2011-12-13 | Teradata Us, Inc. | Optimization technique for dealing with data skew on foreign key joins |
US7941424B2 (en) * | 2008-05-30 | 2011-05-10 | Teradata Us, Inc. | System, method, and computer-readable medium for dynamic detection and management of data skew in parallel join operations |
US8195644B2 (en) * | 2008-10-06 | 2012-06-05 | Teradata Us, Inc. | System, method, and computer-readable medium for optimization of multiple parallel join operations on skewed data |
US9665620B2 (en) | 2010-01-15 | 2017-05-30 | Ab Initio Technology Llc | Managing data queries |
US8930954B2 (en) * | 2010-08-10 | 2015-01-06 | International Business Machines Corporation | Scheduling parallel data tasks |
US9116955B2 (en) | 2011-05-02 | 2015-08-25 | Ab Initio Technology Llc | Managing data queries |
US9600513B2 (en) | 2011-06-09 | 2017-03-21 | International Business Machines Corporation | Database table comparison |
US8868545B2 (en) * | 2011-12-29 | 2014-10-21 | Teradata Us, Inc. | Techniques for optimizing outer joins |
US8825633B2 (en) | 2012-05-15 | 2014-09-02 | Sas Institute Inc. | System, method, and data structure for automatically generating database queries which are data model independent and cardinality independent |
JP6183374B2 (ja) | 2012-10-31 | 2017-08-23 | 日本電気株式会社 | データ処理システム、データ処理方法およびプログラム |
US20140214886A1 (en) | 2013-01-29 | 2014-07-31 | ParElastic Corporation | Adaptive multi-client saas database |
US10585896B2 (en) * | 2013-03-12 | 2020-03-10 | Red Hat, Inc. | Managing data in relational database management system |
US9305074B2 (en) * | 2013-06-19 | 2016-04-05 | Microsoft Technology Licensing, Llc | Skew-aware storage and query execution on distributed database systems |
CA3092699C (en) | 2013-12-06 | 2023-07-25 | Ab Initio Technology Llc | Source code translation |
US9836505B2 (en) | 2014-03-13 | 2017-12-05 | Sybase, Inc. | Star and snowflake join query performance |
US9792328B2 (en) | 2014-03-13 | 2017-10-17 | Sybase, Inc. | Splitting of a join operation to allow parallelization |
US10042876B2 (en) | 2014-09-17 | 2018-08-07 | International Business Machines Corporation | Sort-merge-join on a large architected register file |
US10437819B2 (en) | 2014-11-14 | 2019-10-08 | Ab Initio Technology Llc | Processing queries containing a union-type operation |
US10417281B2 (en) | 2015-02-18 | 2019-09-17 | Ab Initio Technology Llc | Querying a data source on a network |
US10545923B1 (en) * | 2017-12-19 | 2020-01-28 | Teradata Us, Inc. | Reducing skew for database operation processing with randomization |
US11868331B1 (en) | 2018-05-21 | 2024-01-09 | Pattern Computer, Inc. | Systems and methods for aligning big data tables in linear time |
US11157496B2 (en) | 2018-06-01 | 2021-10-26 | International Business Machines Corporation | Predictive data distribution for parallel databases to optimize storage and query performance |
US11163764B2 (en) | 2018-06-01 | 2021-11-02 | International Business Machines Corporation | Predictive data distribution for parallel databases to optimize storage and query performance |
CN109885384B (zh) * | 2018-12-13 | 2023-02-07 | 平安壹钱包电子商务有限公司 | 任务并行度优化方法、装置、计算机设备及存储介质 |
US11093223B2 (en) | 2019-07-18 | 2021-08-17 | Ab Initio Technology Llc | Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods |
US11573823B2 (en) | 2019-11-18 | 2023-02-07 | International Business Machines Corporation | Parallel execution of applications |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS58151664A (ja) * | 1982-03-02 | 1983-09-08 | Fujitsu Ltd | ジヨブ選択方式 |
JP2681269B2 (ja) * | 1986-12-10 | 1997-11-26 | 富士通株式会社 | 並列データ再分配方法及びマルチプロセッサシステム |
JPH01237872A (ja) * | 1988-03-18 | 1989-09-22 | Fujitsu Ltd | 負荷分散処理方式 |
-
1989
- 1989-10-05 US US07/417,366 patent/US5121494A/en not_active Expired - Lifetime
-
1990
- 1990-08-20 JP JP2217257A patent/JPH07111718B2/ja not_active Expired - Lifetime
- 1990-10-04 DE DE69030228T patent/DE69030228T2/de not_active Expired - Lifetime
- 1990-10-04 EP EP90119011A patent/EP0421408B1/de not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP0421408A3 (en) | 1993-04-21 |
US5121494A (en) | 1992-06-09 |
JPH07111718B2 (ja) | 1995-11-29 |
EP0421408A2 (de) | 1991-04-10 |
JPH03126169A (ja) | 1991-05-29 |
EP0421408B1 (de) | 1997-03-19 |
DE69030228D1 (de) | 1997-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69030228T2 (de) | Verfahren zur Verbindung zweier Relationen einer Datenbank auf einem gemeinsamen Feld in einem parallelen Datenbanksystem | |
DE69507020T2 (de) | System zum filtern von prioritätswarteschlangen und betriebsverfahren | |
DE69327716T2 (de) | System und verfahren, um wissen über das typische und aussergewöhnliche aus einer datenbank von vorfallsdaten herauszusuchen. | |
DE69128980T2 (de) | Verfahren zur Optimierung von Rechnerkode | |
DE68926849T2 (de) | Struktur und Verfahren zur Anordnung rekursiv abgeleiteter Daten in einer Datenbank | |
DE69031100T2 (de) | Interprozessor-Datenabhängigkeit minimierendes Übersetzungsverfahren | |
DE69606648T2 (de) | Verfahren und vorrichtung zur ablauffolgen von multiprozessoren mit starker affinität | |
DE69802437T2 (de) | Feinkörniger übereinstimmungsmechanismus für optimistische parallelsteuerung mit verriegelungsgruppen | |
DE3855212T2 (de) | Verfahren zur Berechnung eines transitiven Abschlusses | |
DE69032576T2 (de) | Dynamische Optimierung eines einzelnen relationalen Zugriffs | |
DE69924857T2 (de) | Programm-kode-umwandlung | |
DE69425711T2 (de) | Computerverfahren und -system zur Optimierung von Beta-Bäumen | |
DE69232425T2 (de) | Sortierverfahren in einer verteilten Datenbank und Zugangsverfahren dazu | |
DE69107506T2 (de) | Verfahren und Vorrichtung zur Gleichzeitigkeitssteuerung von gemeinsamen Datenaktualisierungen und Abfragen. | |
DE3781577T2 (de) | Verwaltung der groesse und der anzahl der den prozessen zugeordneten speichersegmente in einer konfiguration fuer mehrfachverarbeitung. | |
DE69625725T2 (de) | Von Multitasking Gebrauch machendes Sortieren | |
DE3852997T2 (de) | Rechnersystem und Verfahren für die Überwachung von nichtstationären Datenstrukturen in einem Rechnersystem. | |
DE69028373T2 (de) | Mehrstufiges Verriegelungssystem und -verfahren | |
DE68927413T2 (de) | Verfahren und Vorrichtung zur Datenbankverarbeitung | |
DE68919041T2 (de) | Vereinigte Variationen in mustergesteuerten, regelbasierten Produktionssystemen für künstliche Intelligenz. | |
DE602004011890T2 (de) | Verfahren zur Neuverteilung von Objekten an Recheneinheiten | |
DE60208778T2 (de) | Datenstruktur für informationssysteme | |
DE69533193T2 (de) | Paralleles verarbeitungssystem zum durchlaufen einer datenbank | |
DE60224432T2 (de) | Dynamische und automatische speicherverwaltung | |
DE19515020A1 (de) | Verfahren und Vorrichtung zum Optimieren von Abfragen mit Gruppieren-nach-Operatoren |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8320 | Willingness to grant licences declared (paragraph 23) | ||
8328 | Change in the person/name/address of the agent |
Representative=s name: DUSCHER, R., DIPL.-PHYS. DR.RER.NAT., PAT.-ANW., 7 |