Spatial Join

Werbung
Spatial Join
Berechnung des Spatial Joins/Join Operation
• aufgeteilt in zwei Schritte:
• Filter Step
• Refinement Step
• Filter Step:
• Minimum Bounding Rectangle (mbb)
• Plane Sweep Algorithmus
• Ergebnis: Kandidatenmenge
• Refinement Step:
• Entfernung der mbbs und vergleich der eigentlichen
Objekte
Spatial Join
Sweep Algorithmen
• Plane-Sweep-Technik verbreitetes Verfahren um den Schnitt
zwischen Objekten zu bestimmen
• Um das Rechteck-Schnitt Problem zu lösen, betrachtet man
zunächst das Segment-Schnitt Problem
• Gegeben:
Menge horizontaler und vertikaler Streifen
• Gesucht:
alle Paare sich schneidender Segmente
• Vertikale Gerade, genannt Sweep- Linie, wird von links
nach rechts durch die Ebene geschoben. Dabei wird der
Schnitt der Geraden mit der Objektmenge beobachtet
Spatial Join
Sweep Algorithmen
• Alle aktuell die Sweep-Linie schneidenden Elemente werden
im Speicher gehalten
Y-Achse
Vertikales
Segment
Sweepline
X-Achse
Spatial Join
Sweep Algorithmen
• Speichere alle Paare, sich schneidende Segmente, in einer
Ergebnismenge ab
Spatial Join
Rechteckschnitt-Problem
• Drei mögliche Lagen der überlappenden Rechtecke
1.
3.
2.
Spatial Join
Rechteckschnitt-Problem
1.
2.
• Mittels Segmentschnitt-Problem können die Fälle 1 und 2
gelöst werden
Spatial Join
Rechteckschnitt-Problem
3.
• Kann gelöst werden, indem in jedem Rechteck ein innerer
Punkt ausgewählt wird
• ist ein Punkt in einem anderen Rechteck enthalten, dann
überschneiden sich auch die Rechtecke
Spatial Join
Rechteckschnitt-Problem
• ist ein Punkt in einem anderen Rechteck enthalten, dann
überschneiden sich auch die Rechtecke
• Ergebnis ist Reduktion auf das Punkteinschlußproblem
• Gesucht sind alle Punkte, die links und rechts sowie oben
und unten von Segmenten eingeschlossen sind
• Zwei Schritte:
• Ergebnisbildung entlang der x-Achse
• Überprüfung entlang der y-Achse
Spatial Join
Rechteckschnitt-Problem
Spatial Join
Partition Based Spatial Merge Join
• Annahme:
• R und S sind die Eingaben des Joins
• Eingaben sind Folge von Tupeln
• jedes Tupel hat räumliches Attribut, welches im Join
benutzt wird
• jedes Tupel hat eindeutigen Identifizierer
OID des Tupels
Spatial Join
Partition Based Spatial Merge Join
• Filter Step:
• Einlesen aller Tupel der ersten Relation R
• Key-Pointer Element bestehend aus OID und mbb
RKP
• RKP als temporäre Relation auf der Festplatte
speichern
• Identisch für Eingabe S
• Ziel: mbbs in RKP finden, die mit einem beliebigen
mbb aus SKP in Beziehung stehen
• Planesweep Algorithmuen bestimmen alle mbbs aus RKP
und SKP die überlappen und fügen sie der Ergebnismenge
hinzu
Spatial Join
Partition Based Spatial Merge Join
• Filter Step:
• für passende Paare wird die OID Information herausgezogen und das OID-Paar wird zur Ausgabe dieses
Schrittes hinzugefügt
Spatial Join
Partition Based Spatial Merge Join
• Filter Step:
Sweepline
Ergebnismenge
Spatial Join
Partition Based Spatial Merge Join
• Filter Step:
• Partitionen bilden, falls RKP und SKP nicht vollständig
in den Speicher passen
R1KP, R2KP... RPKP
S1KP, S2KP... SPKP
Universum
Partitionen
Spatial Join
Partition Based Spatial Merge Join
• Filter Step:
• Partitionen werden so gebildet, dass für jedes Schlüsselelement in einer Partition RiKP alle Schlüsselelemente
aus SKP, die ein überlappendes mbb besitzen, in der
zugehörigen SiKP Partition vorhanden sind
• Größe der einzelnen Partitionen so gewählt, dass für
jedes i RiKP und SiKP simultan, komplett in den
Speicher passen
• Um Partitionen zu bilden, wird Partitionierungsfunktion
gebildet
Spatial Join
Partition Based Spatial Merge Join
• Filter Step:
• Partitionierungsfunktion:
• Algorithmus bestimmt das Universum der Eingabe
• Unterteilung des Universums in P Bereiche
• Anwendung der räumlichen Partitionierungsfunktion
auf das mbb eines Schlüsselelementes
Spatial Join
Partition Based Spatial Merge Join
• Das Key-Pointer Element wird dann in jeder überlappten
Partition eingefügt
Partition 1
Partition 2
Partition 3
Partition 4
• Bestimmung der Anzahl der benötigten Partitionen:
 (|| R ||  || S ||) * Size Key  ptr 
P

M


Spatial Join
Partition Based Spatial Merge Join
• dieser Ansatz kann zu sehr unterschiedlichen Verteilungen
der mbbs führen
• besser: Universum in NT-Teile zerlegen, wobei NT  P
• Teile werden von links oben nach rechts unten von 0 bis
NT - 1 nummeriert
Spatial Join
Partition Based Spatial Merge Join
• nun sortiert man diese Teile den einzelnen P Partitionen zu,
wozu man beispielsweise Hashing benutzt
• Um diese Partitionierung auf mbbs anzuwenden, muss man alle
• Teile, die mit dem mbb überlappen bestimmen und die dazugehörigen key-pointer Elemente in die dazugehörigen Partitionen
einfügen
• Überlappt ein ein mbb mit Teilen von mehreren Partitionen,
so wird sein key-pointer natürlich in allen Partitionen eingefügt
Spatial Join
Partition Based Spatial Merge Join
• Aufteilung mit
3 Partitionen und
12 Teilen
• man erreicht eine bessere Verteilung der mbbs, woraus
allerdings auch ein erhöhter Speicherverbrauch resultiert
Spatial Join
Partition Based Spatial Merge Join
• Refinement Step:
• Einlesen der Ergebnismenge des Filter Steps
• Ergebnis: Relation, deren Tupel die Form <OIDR,OIDS>
haben, sodass die mbbs aller Paare sich überlappen
• Sortierung der OID Paare
• OIDR als Primärschlüssel
• OIDS als Sekundärschlüssel
• Während der Sortierung werden auch die Duplikate
eliminiert
• Es werden so viele R Tupel zusammen mit dem dazugehörigen Array von <OIDR,OIDS> Paaren von der Festplatte gelesen, wie in den Speicher passen
Spatial Join
Partition Based Spatial Merge Join
• Refinement Step:
• Danach leitet man die Pointer um, damit sie auf die
eigentlichen Tupel zeigen und macht dann dasselbe mit
den dazugehörigen Tupeln aus S und vergleicht dann die
eigentlichen Tupel auf Überschneidung
Spatial Join
Scalable Sweeping Based Spatial Join
• Algorithmus, welcher auf dem PBSM basiert
• auch hier wird die Eingabe in einzelne Partitionen aufgeteilt;
der Partitionierungsschritt wird allerdings nur ausgeführt,
wenn er wirklich benötigt wird
• Partitionen werden nur entlang einer Achse ausgerichtet
• benötigt wird lediglich die Sweep-Struktur, nicht die Daten
im Hauptspeicher
• bei einer Datengröße von N beträgt die Sweep Struktur nur
noch O( N)
Spatial Join
Scalable Sweeping Based Spatial Join
• das bietet gute Overall-Performance und dennoch Worst-Case
Effizienz
• der eigentliche Algorithmus wird in zwei Schritten ausgeführt:
• Eindimensionaler Fall: Finde alle Überschneidungen
zwischen zwei Sätzen von
Intervallen; die Daten werden
anhand einer Achse vejoint
• Zweidimensionaler Fall: ausgehend vom Ergebnis des
eindimensionalen Falles werden
die Daten anhand der zweiten
Achse überprüft
Spatial Join
Scalable Sweeping Based Spatial Join
• Eindimensionaler Fall: Intervall Join
X-Achse
• jedes Intervall p  R oder p  S ist definiert durch untere
Schranke pmin und obere Schranke pmax
• Problem: alle Überschneidungen zwischen einem Intervall in
R und und einem in S zu finden
Spatial Join
Scalable Sweeping Based Spatial Join
• Eindimensionaler Fall: Intervall Join
• Annahme: Intervalle p aus R und S sortiert nach ihren
unteren Schranken in einer Liste L
• dazu sind O(n logm n) Schritte erforderlich
• O(n+t) I/O Operationen für den restlichen Algorithmus
Spatial Join
Scalable Sweeping Based Spatial Join
• Algorithmus Intervall Join:
1) Durchsuche die Liste anhand der aufsteigenden unteren Schranken und
erhalte dabei zwei, Anfangs leere, Listen LR und LS mit „aktiven“
Intervallen aus R und S. Um es genauer zu sagen, mache mit jedem
Intervall p in L folgendes:
a) Wenn p  R, dann füge p zu LR hinzu und suche durch die ganze Liste LS
Wenn ein Intervall s in LS sich mit p überschneidet, dann gib die
Überschneidung aus und behalte s in LS, sonst lösche s aus LS
b) Wenn p  S, dann füge p zu LS hinzu und suche durch die ganze Liste LR
Wenn ein Intervall r in LR sich mit p überschneidet, dann gib die
Überschneidung aus und behalte r in LR, sonst lösche r aus LR
Spatial Join
Scalable Sweeping Based Spatial Join
• Zweidimensionaler Fall: Rechteck-Join
• jedes Rechteck wird durch eine untere Schranke auf der
x-Achse und auf der y-Achse definiert, sowie durch eine
obere Schranke sowohl auf der x, als auch auf der y-Achse
• Rechtecke anhand ihrer unteren Schranken in Liste L sortiert
Spatial Join
Scalable Sweeping Based Spatial Join
• Algorithmus Rechteck Join:
1) Partitioniere den zweidimensionalen Raum in k vertikale Streifen, so dass
in jedem Streifen max. 2N/k Rechtecke anfangen oder aufhören, für ein
noch zu bestimmendes k
2) Ein Rechteck wird als klein bezeichnet, wenn es komplett in einem
einzigen Streifen enthalten ist. Sonst wird es als groß bezeichnet. Teile
jedes große Rechteck in exakt 3 Teile, zwei Endstücke im ersten und
letzten Streifen der Überschneidung und ein Mittelstück dazwischen.
Dieses Mittelstück wird an die Anzahl der Streifen angepaßt, also bei
allen eingefügt. Das Problem wird in zwei Schritten gelöst:
a) Zuerst berechne alle Überschneidungen zwischen einem Mittelstück
aus R und einem Mittelstück aus S und alle Überschneidungen zwischen
einem Mittelstück aus R und einem kleinen Rechteck aus S oder einem
Mittelstück aus S und einem kleinen Stück aus R
Spatial Join
Scalable Sweeping Based Spatial Join
2a) Durchsuche die Liste L in aufsteigender Reihenfolge nach unteren
Schranken. Für jedes Intervall p in L tue folgendes:
1. Wenn p  P und p ist komplett enthalten in einem Streifen i, dann
füge p in Lr i,i ein. Durchsuche jede Liste LS h,j mit h<i<j, berechne
die Überschneidungen und lösche jedes Element der Liste, das nicht
mit p überlappt. Schreibe p auf die Festplatte um sie später in den
rekursiven Suchproblemen benutzen zu können
2. Wenn p  R und p ist groß und die Mittelstücke bestehen aus den
den Streifen i, i+1,...j dann füge p in Lr i-1,j+1 ein. Durchsuche dann
die ganzen Listen LS i´,j,´ mit i<j´ und j>i´, berechne die Überschneidungen und lösche jedes Element einer Liste, das nicht mit p
überlappt. Speichere die Endstücke von p auf der Festplatte um sie
später in den entsprechenden Subproblemen einsetzen zu können
Spatial Join
Scalable Sweeping Based Spatial Join
2a) Durchsuche die Liste L in aufsteigender Reihenfolge nach unteren
Schranken. Für jedes Intervall p in L tue folgendes:
3. Wenn p  R und p ist klein, dann führe 1. aus und vertausche die
Rollen von R und S
4. Wenn p  R und p ist groß, dann führe 2. aus und vertausche die
Rollen von R und S
2b) In jedem Streifen berechne rekursiv alle Überschneidungen zwischen einem
Endstück oder kleinem Rechteck aus R und einem Endstück oder kleinen
Rechteck aus S
Spatial Join
Scalable Sweeping Based Spatial Join
• man geht anhand der unteren Schranken vor und berechnet
rekursiv die Überschneidungen; für Mittelstücke geht dies
besonders einfach, da sie den kompletten Streifen abdecken
• daß sich in diesem Streifen alle Rechtecke,
ob klein oder groß, mit dem obersten Überschneiden, ist offensichtlich
Spatial Join
Scalable Sweeping Based Spatial Join
• daß sich in diesem Streifen alle Rechtecke,
ob klein oder groß, mit dem obersten Überschneiden, ist offensichtlich
• kompliziert wird es für Endstücke oder
kleine Rechtecke; diese könne sich
überschneiden, müssen es aber nicht
Spatial Join
Spatial Join/Algorithmen
• Partition Based Spatial-Merge Join
• Scalable Sweeping-Based Spatial Join
Spatial Join
Sweep Algorithmen
• Plane-Sweep-Technik verbreitetes Verfahren um den Schnitt
zwischen Objekten zu bestimmen
• Ablauf:
• mbbs gemäß ihrer minimalen Koordinaten
bezüglich einer Dimension sortieren
• Lauflinie wird über den Datenraum bewegt, die
senkrecht auf der Achse steht, bezüglich der sortiert
wurde
Spatial Join
Join Operation
• Algorithmus:
• Sweeplinie läuft durch den relevanten Teilraum von R2
• trifft Sweeplinie auf untere Kante eines Rechteckes r
(OE r P) merkt man sich das r
• aktive Rechtecke aus Q, deren obere Kanten bereits
überschritten sind werden gelöscht
• Vergleich der Intervalle der verbliebenen Rechtecke aus
Q mit dem Intervall von r
• das betreffende Rechteck aus Q schneidet sich mit r
wenn es zu einem nicht leeren Schnitt kommt
Spatial Join
Join Operation
• Algorithmus:
• Datenstruktur muß folgende Methoden unterstützen:
• Insert(D,r) Rechteck r in D speichern
• Delete(D,y) Alle Rechtecke r aus D löschen, für
die gilt rymax < y
• Query(D,r) gebe alle die Rechtecke aus D zurück,
deren Intervalle mit dem von r einen
nicht leeren Schnitt haben
Spatial Join
Partition Based Spatial Merge Join
• Refinement Step:
Part. 1
Part. 2
Spatial Join
Scalable Sweeping Based Spatial Join
• Man bestimmt also die Kandidaten, die man später noch
genauer betrachten müßte, da sie für eine Überlappung in
Frage kommen
Spatial Join
Plane-Sweep und das Gesetz der Quadratwurzel
• Großer Einfluß von Plane-Sweep Algorithmus auf die Effizienz
von Spatial Join Operationen
• benötigter Speicher bestimmt durch die maximale Anzahl
Rechtecke, die von einer einzelnen, horizontalen Linie
geschnitten werden
• diese Anzahl = maximale Überlappung
• i.d.R ist maximale Überlappung << als die Summe der
Rechtecke
• bei einer Datengröße von N ist die Datengröße der maximal
überlappenden Rechtecke von irgendeiner Linie gleich O( N)
• Der SSSJ besteht aus einer Kombination von dem theoretisch
optimalen Rechteck Join mit einer effizienten Plane.Sweep
Technik
Spatial Join
Plane-Sweep und das Gesetz der Quadratwurzel
• SSSJ führt eine anfängliche Sortierung durch und versucht
dann direkt den Plane-Sweep durchzuführen
• der vertikale Partitionierungsschritt wird nur benutzt, wenn
die Sweep Struktur nicht in den Speicher passt.
• Arten von Plane-Sweep Algorithmen:
• Tree_Sweep
• List_Sweep
• Striped_Sweep und PBSM-Algorithmus
• Forward_Sweep
GIS-Seminar Wintersemester 01/02
Spatial
Join
Vortrag: Carsten Breuer
Spatial Join
Spatial Join
• wichtigste Join- Operation in einem GIS
• paarweise Verknüpfung zweier Mengen von geometrischen
Objekten deren räumliche Merkmale eine räumliche
Aussage erfüllen
• verschiedenen Typen räumlicher Aussagen
• bedeutendste Varianten:
• Intersection Join
• Overlap Join
Spatial Join
Spatial Join
• Einsatzmöglichkeiten: alle Arten von Anfragen und Operationen,
die geometrische Daten miteinander in Verbindung setzen
• Grundlage für die effiziente Ausführung des Map Overlays
• kann dazu dienen, aus mehreren Geo- Objekten ein neues Ob-
jekt zu generieren oder um räumliche Abhängigkeiten zwischen
Geo- Objekten festzustellen
• das Join- Prädikat und die betroffenen Attribute sind geometri-
schen Typs (Bsp. für Attributstypen: Streckenzüge, Flüsse,..)
Spatial Join
Spatial Join/ Beispiel 1
• gegeben: Relationen Städte und Wälder
• die Anfrage „finde alle Wälder, die in einer Stadt liegen“ ist
ein möglicher Spatial Join auf den Relationen Wälder und
Städte mit dem Prädikat „liegt in“
• liegt ein Wald „w“ in einer Stadt „s“, so wäre das Paar (w,s)
in der Ergebnismenge des Spatial Joins
Spatial Join
Spatial Join/ Beispiel 2
• Kombination zweier Karten mit verschiedenen Typen von Ob-
jekten
• Kombination einer Nutzungskarte mit einer Niederschlagskarte
• Anfrage „finde alle Waldgebiete mit mindestens 20 Litern
durchschnittlichem Regenfall pro Monat“
Spatial Join
Berechnung des Spatial Joins
zwei Schritte:
• Filter Step
• Refinement Step
Filter Step:
• Minimum Bounding Box (mbb)
• Plane Sweep Algorithmus
• Ergebnis: Kandidatenmenge
Refinement Step:
• Entfernung der mbbs und Vergleich der eigentlichen
Objekte
Spatial Join
Strategien und Algorithmen für Spatial Joins
• Lineare Strukturen
jede Beziehung mit einer linearen Struktur indiziert
z-geordnete Bäume
• R-Bäume
synchronisiertes Durchgehen beider Bäume
• Einzel-Index
indizierte Nested Loop Methode
• Kein Index
vereinfachte Hash-Join Methode
Spatial Join
z-geordneter Spatial Join
Voraussetzung: beide Beziehungen sind z-geordnet
z-geordneter Baum als Index
Blätter von jedem Baum: Liste L von Einträgen der Form
[z,oid]
die Zellen von einer Zerlegung müssen nicht unbedingt
minimal sein
die Beziehungen teilen sich den gleichen Raum
Zelle mit dem key z ist in einer mit dem key z´
enthalten (oder ist gleich), wenn z´ ein Präfix von z ist und
wenn z´  z
Spatial Join
z-geordneter Spatial Join
Algorithmus
• Verbinden der Listen L1/L2 der Eingaben die sich auf
die beiden Relationen beziehen
• Paar von Eingaben von den beiden Listen sind
Kandidaten für den Verfeinerungsschritt, wenn ein
key ein Präfix des anderen ist
• Vor dem Verfeinerungsschritt: Kandidatengruppen
von Objekt ids müssen sortiert werden um Duplikate
zu entfernen
Spatial Join
z-geordneter Spatial Join
Algorithmus
A
Beispiel
z´= scc(z)
B
zA
D
E
F
C
z axis
ssc(zA)
G
H
I
Wenn z = 30 dann ist z´= 3033333 (angenommene Tiefe
von 7 für Zerlegung)
Kandidatengruppen: (A,D), (A,E), (A,F), (B,E), (B,F),
(C,H) und (C,I)
zwei Stacks erforderlich
Spatial Join
z-geordneter Spatial Join
Algorithmus
scannen der beiden Listen
Sweeping einer vertikalen Linie entlang der z-Achse
zwei mögliche Ereignisse:
• Eingabe Ereignisse
• Ausgabe Ereignisse
Spatial Join
z-geordneter Spatial Join
Beispiel:
A
C
B
zA
D
E
ssc(zA)
F
G
z axis
H
I
Schritt 1:
• Eingabe von A
• current1 = B
• S1 = {A}
• current2 = D
• S2 = {}
A
C
B
zA
D
E
ssc(zA)
F
G
z axis
H
I
Spatial Join
z-geordneter Spatial Join
Schritt 2:
• Eingabe von D
• current1 = B
• S1 = {A}
• current2 = E
• S2 = {D}
A
C
D
E
ssc(zA)
F
G
z axis
H
I
A
Schritt 3:
• Ausgabe von D
• current1 = B
• S1 = {A}
• current2 = E
• S2 = {}
B
zA
C
B
zA
D
E
ssc(zA)
F
G
z axis
H
I
Spatial Join
z-geordneter Spatial Join
Schritt 4:
• Eingabe von B
• current1 = C
• S1 = {B,A}
• current2 = E
• S2 = {}
A
C
D
Schritt 5:
• Eingabe von E
• current1 = C
• S1 = {B,A}
• current2 = F
• S2 = {E}
B
zA
E
ssc(zA)
F
G
z axis
H
I
A
C
B
zA
D
E
ssc(zA)
F
G
z axis
H
I
Spatial Join
z-geordneter Spatial Join
Schritt 6:
• Eingabe von F
• current1 = C
• S1 = {B,A}
• current2 = G
• S2 = {F,E}
A
C
D
Schritt 7:
• Ausgabe von B
• current1 = C
• S1 = {A}
• current2 = G
• S2 = {F,E}
B
zA
E
ssc(zA)
F
G
z axis
H
I
A
C
B
zA
D
E
ssc(zA)
F
G
z axis
H
I
Spatial Join
z-geordneter Spatial Join
A
Schritt 8:
• Ausgabe von A
• current1 = C
• S1 = {}
• current2 = G
• S2 = {F,E}
Weitere Schritte analog
C
B
zA
D
E
ssc(zA)
F
G
z axis
H
I
Spatial Join
z-geordneter Spatial Join
Algorithmus Zordering Join
begin
•
result: Set of pairs of ids, initially empty
while not (eof(L1) and empty (S1) and eof(L2) and empty (S2))
begin
event = MIN (CURRENT(L1), SCC(top(S1)),
CURRENT(L2), SCC(top(S2)))
if (event = CURRENT(L1))then //left bound of a rectangle
Entry (L1,S1)
else if (event = SCC(top(S1)))then //right bound of a rectangle
result += EXIT (S1,S2)
else if (event = CURRENT(L2))then //left bound of a rectangle
ENTRY (L2, S2)
else if (event = SCC(top(S2)))then //right bound of a rectangle
result += EXIT (S2,S1);
end while
sort result; remove duplicates;
return result
end
es werden der Reihe nach
die Ereignisse verarbeitet,
die sich aus den Listen L1/L2
bzw. von den Säulen S1 und
S2 ergeben
Spatial Join
z-geordneter Spatial Join
• jedes z-geordnete Blatt eines Baumes nur einmal gelesen
• Zahl der I/O´s: n1 + n2 +k
• Voraussetzung: jeder Stack wird im Hauptspeicher gehalten
• Worst Case: Algorithmus-Komplexität quadratisch zur
Eingabegröße
• In allen Fällen ist eine Eliminierung der Duplikate erforderlich
Spatial Join
Verbinden zweier R-Bäume
• Algorithmus, bei dem beide Relationen entweder mit einem
R-Baum, einem R* Baum oder jeder anderen Variante
indiziert sind
• Minimierung der I/O und CPU-Kosten
• drei Varianten des Algorithmus
Spatial Join
Verbinden zweier R-Bäume
Algorithmen
• der einfachste benutzt eine Tiefensuche
• Anfang an den beiden Wurzeln
• bei jedem Schritt wird ein Knoten N1 eines Baumes mit einem
Knoten N2 des anderen Baumes verglichen
• Berechnung der Gruppen von überlappenden Eingaben (e1,e2)
• wenn das Blatt-Level erreicht ist, sind die Paare von
Objekt ids gefunden
Spatial Join
Verbinden zweier R-Bäume
Algorithmus
begin
result: set of pairs of ids, initially empty
for all e1 in N1 do
for all e2 in N2 such that e1.mbb  e2.mbb  0 do
if (the leaf level is reached) then
result += {(e1,e2)}
else
N´1 = READPAGE (e1.pageID); N´2 = READPAGE (e2.pageID);
result += STT (N´1,N´2)
end if
end for
end for
return result
end
Spatial Join
Verbinden zweier R-Bäume
• hohe CPU Kosten
• CPU Kosten abhängig von
der Hardware
von der Seitengröße
• Schwächen des Algorithmus:
Nested Loop über den Eingaben von den Knoten
Blindtest jeder Kandidatengruppe
Spatial Join
Verbinden zweier R-Bäume
1. Optimierung:
• Beschränken des Suchraumes
• Beobachtung: die mbbs der Knoten N1 und N2 decken
nicht den gleichen Raum ab
Spatial Join
Verbinden zweier R-Bäume
I
I = N1.mbb  N2.mbb
N1
N2
Ausschluß aller Eingaben außerhalb von I
Spatial Join
Verbinden zweier R-Bäume
I
N1
N2
1. Schritt: Scannen der Knoten
Markierung der Kandidateneingaben
2. Schritt: Verarbeiten der Kandidateneingaben durch Nested Loop Algorithmus
Spatial Join
Verbinden zweier R-Bäume
2. Optimierung:
• Plane-Sweep Technik
Spatial Join
Verbinden zweier R-Bäume
Beispiel eines simplen plane-sweep für einen Rechteck-Schnitt
b2
r
b3
b1
l1
l2
b4
Spatial Join
Verbinden zweier R-Bäume
Beispiel eines simplen plane-sweep für einen Rechteck-Schnitt
b2
r
l1
b1
b4
b3
l2
• Gegeben: zwei Sätze von Rechtecken
• Gesucht: Schnitt zwischen einem roten und blauen Rechteck
Spatial Join
Verbinden zweier R-Bäume
Beispiel eines simplen plane-sweep für einen Rechteck-Schnitt
b2
r
b3
b1
l1
l2
b4
Spatial Join
Verbinden zweier R-Bäume
Algorithmus
begin
result: set of pairs of ids, initially empty
pos1 = 1, pos2 = 1// current positions in N1 and N2
Sort the entries e in N1 and N2 on e.mbb.xmin
while (pos1  |N1| and pos2  |N2|) do
begin
if (N1[pos1].mbb.xmin < N2[pos2].mbb.xmin) then
e = N1[pos1]; p´ = pos2; e´ = N2[p´]
while (e´.mbb.xmin e.mbb.xmax) do
begin
if (e.mbb  e´.mbb  0) then result += {(e.oid, e´.oid)}
p´ = p´ + 1; e´ = N2[p´]
end do
pos1 = pos1 + 1// next entry in N1
else
Do as before, permuting the roles of entries of N1 and N2
end if
end while
return result
end
Spatial Join
Verbinden zweier R-Bäume
• Mischung von Plane-Sweep und Nested Loop Techniken
• Im Gegensatz zum Nested Loop Algorithmus begrenzt die
Sweep-Linie die Anzahl von Rechtecken, die gegeneinander getestet
werden müssen
• Algorithmus ist sowohl einfach als auch effizient
• erheblicher Leistungsgewinn
Spatial Join
Räumlicher Hash Verbund
• Alternative zum externen Plane-Sweep Algorithmus
• Anwendung des Hash-Join-Algorithmus für
räumliche Daten
• wenn kein räumlicher Index für die zusammenzuführenden
Beziehungen existiert
• Hauptziel: ausgewogene Verteilung der Daten zwischen
Buckets am Ende des Prozesses
Spatial Join
Räumlicher Hash Verbund
Beispiel 1:
B
A
O
D
C
• Hash-Funktion teilt den Suchraum in vier Buckets auf
• jeder Bucket wird als Rechteck dargestellt
Bucket Ausdehnung
• Rechteck r allen Buckets zugewiesen, deren Ausdehnung r
schneiden
Spatial Join
Räumlicher Hash Verbund
D
Beispiel 2:
B
A
O
C
• jedes Rechteck wird genau einem Bucket zugewiesen
• Ausdehnung ist so, daß alle zugewiesenen Rechtecke
eingeschlossen werden
Spatial Join
Räumlicher Hash Verbund
Algorithmus für den Overlap Spatial Join
Schritt 1: anfängliches Teilen von R
jedes Rechteck einem Bucket zuteilen
Ausdehnung eines Buckets = mbb all seiner Rechtecke
Anforderungen an die Teilung
ungefähr gleiche Anzahl Rechtecke in jedem Bucket
jeder Bucket sollte in den Hauptspeicher passen
Überlappen von Bucket Ausdehnungen minimal
D
Ziel:
B
A
O
C
Spatial Join
Räumlicher Hash Verbund
Algorithmus für den Overlap Spatial Join
Schritt 2: zweites Teilen
• jedes Rechteck aus S einem Bucket der R-Teilung zuteilen
dessen Ausdehnung es überlappt
• dieser Schritt führt zu einzelnen überflüssigen Zuteilungen
B
A
O
D
C
• Verteilung von S ganz sich ganz anders darstellen als die von R
• Anzahl von Rechtecken aus S in einem Bucket variablel
Spatial Join
Räumlicher Hash Verbund
Algorithmus für den Overlap Spatial Join
Schritt 3: Verbundphase
• Gegeben: zwei Gruppen von Buckets
• Ziel: jeder Bucket BR muß mit einem Bucket BS zusammengelegt
werden
• Ein Bucket muß in den Hauptspeicher passen
• Ergebnisse enthalten keine Duplikate
Spatial Join
Räumlicher Hash Verbund
Beispiel:
• Teilung der Datengruppe
Vier Buckets mit
überlappenden Ausdehnungen
D
A
C
11
2
1
5
4
7 B
Inhalt der Buckets:
A = {1, 14, 10}
B = {2, 4, 7, 11}
C = {3, 8, 9}
D = {5, 6, 12, 13}
B
10
14 A
6
D
13
3
9
C
12
8
Spatial Join
Räumlicher Hash Verbund
Beispiel:
b
• Teilung der zweiten Datengruppe
e
d
c
f
Mit den Bucket Ausdehnungen
des ersten Datensatzes:
A´ = {c, d }
B´ = {a, b, d, g }
C´ = {e, g, h }
D´ = {a, e }
a
g
h
a
b
D
B
d
c
A
f
e
g
h
C
Spatial Join
Räumlicher Hash Verbund
Beispiel:
• zu verbindende Gruppen von Buckets:
• [A, A´], [B, B´], [C, C´], [D, D´]
• Verbund von einem Paar von Buckets:
Suche nach Gruppen von überlappenden Rechtecken
Herunterladen