Transcript
Drei Implementierungen der relationalen Algebra in Clojure Sören Gutzeit Fachbereich MNI
Gliederung ●
Relationale Algebra und Clojure
●
Auf Basis von Clojure Maps ○
●
Binary associated table Algebra ○
●
Vorlage: Bader und Incanter
Vorlage: Martin Kersten
Transrelational Model ○
Vorlage: Chris Date
Relationale Algebra und Clojure
Anforderungen der relationalen Algebra Relation und RelVar Warum Clojure?
Anforderung der relationalen Algebra ●
Relation != Tabelle ○ ○
Ein Tupel ist in der Relation, oder nicht. Keine vorgeschriebene Reihenfolge.
●
Eine Relation ist ein Wert.
●
(Hauptspeicher-orientiert)
Anforderung der relationalen Algebra ●
Operationen ○ ○ ○ ○ ○ ○ ○
●
Mengenoperationen Umbenennen Projektion Restriktion Verbundsoperation Gruppierung Aggregatfunktionen
Relation als Ergebnis. ○
Ausnahme: Aggregatfunktionen
int x = 5 Typ - Variable - Wert
Relation und RelVar ●
Eine Relation ist ein Wert. ○ ○
●
Relation werden nicht verändert. Durch Operationen entstehen neue/andere Werte.
Eine RelVar ist eine Variable. ○
RelVars können Relationen halten.
Warum Clojure? ●
Wunderschöne Sprache.
●
Immutable Data Stuctures ○ ○ ○
●
(fast) alles ist ein Wert. Werte werden nicht verändert. Operationen erstellen neue Werte.
refs ○ ○
Variablen in Clojure. Durch Transaktionen veränderbar.
Clojure Maps Basis (hashRel)
Vorlage: Bader und Incanter Datentyp Verwendung von clojure.set
Vorlage: Bader und Incanter ●
Core.relational ○ ○ ○
●
Masterthesis von Markus Bader, MNI, 2014. Darstellung von Tupeln durch Vektoren. umfangreiche Operationenmenge.
Dataset ○ ○ ○ ○
Incanter, R-like Statistik und Grafik Plattform. Darstellung von Tupeln durch Maps. mäßige Operatonsmenge. sehr performante Mengenoperationen.
xrel und clojure.set ●
Datenformat auch xrel genannt.
●
Einige Mengenoperstoren darauf ausgelegt. ○
index.
(clojure.set/index p #{ :gender })
Index Beispiel
Verbundoperator ●
Klassische Doppelschleife. ○ ○
●
Äußere und Innere Schleife für n*m Vergleiche. Sehr aufwendig.
Verwendung von index und HashMaps. ○ ○
Indizierung einer Relation mit n Tupeln plus m Hash-Aufrufe. Sehr effizient.
Demo 1
Binary associated table Algebra
Vorlage: Kersten Vertikale Fragmentierung Höhere und niedere Algebra
Binary associated table ●
Kurzform BAT Algebra.
●
Martin Kersten, Centrum Wiskunde & Informatica Amsterdam, 1970.
●
Spalten / Attribute -orientiert. ○
Vertikale Fragmentierung.
Vertikale Fragmentierung
Vertikale Fragmentierung ●
Teilung der Relation in BATs. ○
●
Jedes Attribute eine Tabelle.
Objekt-IDs als Fixpunkte. ○
jedes Tupel eine eindeutige oID.
BAT in Clojure ●
Menge statt Multimenge. ○
●
Binary Unit ~ BAT-Tupel. ○
●
Duplikate in BATs.
Bestehend aus :head und :tail.
Grundlegend alle Datentypen als Wert erlaubt. ○
Auch BATs.
Demo 2
BAT Algebra ●
Algebra bezogen auf Binäre Tabellen. ○ ○
●
Operationen im kleinen. Blick auf das Wesentliche.
Algebra niederer Stufe. ○
Übersetzung in höher Algebra
Operatoren
Vergleich SQL - BAT
Demo 3
Verbund-Operationen ●
Spielen (wie gesehen) eine große Rolle.
●
Freie Wahl der Vergleichsoperationen. ○
●
Konzept wie in hashRel auf Gleichheit ausgelegt. ○
●
=, !=, <, >=, ... , (fn[x] true)
wird dafür auch verwendet.
Für andere Vergleichsoperationen: Doppelschleife mit index. ○
minimiert Vergleiche.
100 Vergleiche
9 Vergleiche
Transrelational Model
Vorlage: Chris Date Trennung von Werten und Struktur
Transrelational Model ●
Kurzform TR.
●
Vorlage: Chris Date ○
●
Ursprung Stephen A. Tarin, US Patent, 1999
Trennung von Wert und Struktur in einer Relation
S#
SNAME
STATUS
CITY
1 S4
Clark
20
London
2 S5
Adams
30
Athens
3 S2
Jones
10
Paris
4 S1
Smith
20
London
5 S3
Blake
30
Paris
S#
SNAME
STATUS
CITY
1 S4
Clark
20
London
2 S5
Adams
30
Athens
3 S2
Jones
10
Paris
4 S1
Smith
20
London
5 S3
Blake
30
Paris
Original
S#
SNAME
STATUS
CITY
1 S1
Adams
10
Athens
2 S2
Blake
20
London
3 S3
Clark
20
London
4 S4
Jones
30
Paris
5 S5
Smith
30
Paris
Sortierte Werte
S#
SNAME
STATUS
CITY
1 S1
Adams
10
Athens
2 S2
Blake
20
3 S3
Clark
4 S4 5 S5
SNAME
STATUS
CITY
1 5
4
4
5
London
2 4
5
2
4
20
London
3 2
2
3
1
Jones
30
Paris
4 3
1
1
2
Smith
30
Paris
5 1
3
5
3
Field Value Table (FVT)
S#
Record Reconstruction Table (RRT)
S#
SNAME
STATUS
CITY
S#
1 S1
1 5
2
2
3
20
3
STATUS
CITY
3
1
4
4 5
London
SNAME
Smith Field Value Table (FVT)
5
3
Record Reconstruction Table (RRT)
Transrelational Model ●
Traversieren durch beide Tabellen. ○
●
ZigZag-Algorithmus
Tupel von beliebigen Punkt rekonstruierbar. ○
geschlossener Kreis.
●
“Schnelles Suchen, aufwendiges Schreiben.”
●
Duplikate schwer zu identifizieren.
●
Viel Spielraum für Optimierungen.
S#
SNAME
STATUS
CITY
1 S1
Adams
10
Athens
2 S2
Blake
20
London
3 S3
Clark
20
London
4 S4
Jones
30
Paris
5 S5
Smith
30
Paris S#
Optimierung: Konservierte Spalten
SNAME
STATUS
CITY
1 S1
Adams
10
Athens
2 S2
Blake
20
London
3 S3
Clark
30
Paris
4 S4
Jones
5 S5
Smith
S#
SNAME
STATU S
CITY
1 S1
Adams [1:1]
10 [1:1]
Athens [1:1]
2 S2
Blake [2:2]
20 [2:3]
London [2:3]
3 S3
Clark [3:3]
30 [4:5]
Paris [4:5]
4 S4
Jones [4:4]
S5
Smith [5:5]
5
Optimierung: Konservierte Spalten
S#
SNAME
STATUS
CITY
1 5
1∎4
1∎4
1∎5
2 4
2∎5
2∎2
2∎4
3 2
3∎2
2∎3
2∎1
4 3
4∎1
3∎1
3∎2
5 1
5∎3
3∎5
3∎3
Demo 4
Operationen ●
TR Basis. ○
●
Relationale Algebra. ○
●
Lesen, Einfügen, Löschen, Bearbeiten.
Projektion, Restriktion, Mengenoperationen.
Problem: Restriktion mit mehrfachen Bedingungen. ○ ○
Sehr aufwendige Implementierung. Optimierung der Operation.
Prädikat: (= S# “S3”)
S#
SNAME
STATUS
CITY
1 S1
Adams
10
Athens
2 S2
Blake
20
3 S3
Clark
4 S4 5 S5
SNAME
STATUS
CITY
1 5
4
4
5
London
2 4
5
2
4
20
London
3 2
2
3
1
Jones
30
Paris
4 3
1
1
2
Smith
30
Paris
5 1
3
5
3
Field Value Table (FVT)
Restriktion-Beispiel 1
S#
Record Reconstuction Table (RRT)
Prädikat: (and (>= STATUS 20) (or (= CITY “LONDON”) (= NAME “ADAM” ))) S#
SNAME
STATUS
CITY
1 S1
Adams
10
Athens
2 S2
Blake
20
3 S3
Clark
4 S4 5 S5
SNAME
STATUS
CITY
1 5
4
4
5
London
2 4
5
2
4
20
London
3 2
2
3
1
Jones
30
Paris
4 3
1
1
2
Smith
30
Paris
5 1
3
5
3
Field Value Table (FVT)
Restriktion-Beispiel 2
S#
Record Reconstuction Table (RRT)
Restriktion-Lösungsansätze (and
(intersection
( > :status 10)
( > :status 10)
(or
(union (<= :status 30)
(<= :status 30)
(= :city London)))
(= :city London)))
Restriktion-Lösungsansätze (intersection
(intersection
( > :status 10)
(area-search > :status 10)
(union
(union
(<= :status 30)
(area-search <= :status 30)
(= :city London)))
(point-search :city London)))
Demo 5
Fazit
Fazit ●
HashRel ○ ○ ○
●
BAT ○ ○
●
Einfaches Konzept. Unterstützung durch Clojure-Mechaniken. wenig weitere Optimierungsmöglichkeiten. Operieren im kleinen. Viel Optimierungsmöglichkeiten. ■ Oberschicht für höhere Algebra. ■ Auch für größere Verwendung.
TR ○ ○ ○
Komplexes Konzept. ■ umfangreiche Operationen. Viel Optimierungsmöglichkeiten. ■ siehe Restriktion. Von große Datenmengen auf kleine schließen
Vielen Dank für Ihre Aufmerksamkeit! https://github.com/seegy/more.relational
Fragen?