Drei Implementierungen der relationalen Algebra in Clojure

Werbung
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?
Herunterladen