Der Skyline-Operator ist Gegenstand eines Optimierungsproblems und berechnet das Pareto-Optimum auf Tupeln mit mehreren Dimensionen.

Dieser Operator ist eine von Börzsönyi et al. vorgeschlagene Erweiterung von SQL[1], um Ergebnisse aus einer Datenbank so zu filtern, dass nur solche Tupel erhalten bleiben, die in mehreren Dimensionen nicht schlechter sind als andere. Der Name Skyline stammt von der Ansicht auf Manhattan vom Hudson River aus, wo jene Gebäude zu sehen sind, die von keinem anderen verdeckt werden. Ein Gebäude ist sichtbar, wenn es nicht von einem Gebäude dominiert wird, das höher oder näher am Fluss steht (zwei Dimensionen, Abstand zum Fluss minimiert, Höhe maximiert). Eine weitere Anwendung des Skyline-Operators ist die Auswahl eines Hotels für einen Urlaub. Man möchte ein günstiges Hotel in Strandnähe. Hotels in Strandnähe können jedoch auch teuer sein. In diesem Fall würde der Skyline-Operator nur die Hotels anzeigen, die sowohl beim Preis als auch bei der Entfernung zum Strand nicht schlechter sind als alle anderen Hotels.

Formale Beschreibung Bearbeiten

Der Skyline-Operator gibt Tupel zurück, die von keinem anderen Tupel dominiert werden. Ein Tupel dominiert ein anderes, wenn es in allen Dimensionen mindestens gleich gut und in mindestens einer Dimension besser ist. Formal kann man sich jedes Tupel als einen Vektor   vorstellen.   dominiert   (geschrieben:  ), wenn   in jeder Dimension mindestens so gut wie   und in mindestens einer überlegen ist:[2]

 
Die Dominanz ( ) kann als eine beliebige strikte Ordnung definiert werden, zum Beispiel größer (mit   und  ) oder kleiner (mit   und  ).

Geht man von zwei Dimensionen aus und definiert die Dominanz in beiden Dimensionen als größer, kann man die Skyline in SQL-92 wie folgt berechnen:

WITH tuples(id,i,j) as (values(1,1,1),(1,2,1),(1,1,2))
SELECT * FROM tuples t1
WHERE NOT EXISTS (
  SELECT * FROM tuples t2             -- Wo kein Tupel existiert,
  WHERE t2.i >= t1.i and t2.j >= t1.j -- das in allen Dimensionen gleich gut
    AND (t2.i > t1.i or t2.j > t1.j)  -- und in einer Dimension besser ist.
);

Vorgeschlagene Syntax Bearbeiten

Als Erweiterung von SQL haben Börzsönyi et al.[1] die folgende Syntax für den Skyline-Operator vorgeschlagen:

SELECT ... FROM ... WHERE ...
GROUP BY ... HAVING ...
SKYLINE OF [DISTINCT] d1 [MIN | MAX | DIFF],
                 ..., dm [MIN | MAX | DIFF]
ORDER BY ...

dabei sind d1, ... dm die Dimensionen der Skyline und MIN, MAX und DIFF geben an, ob der jeweilige Wert minimiert, maximiert wird oder schlicht abweichen soll.

Ohne SQL-Erweiterung ist ein Anti-Join mittels not exists notwendig:

SELECT ... FROM (...) q WHERE NOT EXISTS (
  SELECT * FROM (...) p WHERE p.d1 [<= | >=] q.d1 AND ... AND p.dm [<= | >=] q.dm
     AND (p.d1 [< | >] q.d1 OR ... OR p.dm [< | > ] q.dm ))

Implementierung Bearbeiten

Der Skyline-Operator kann ohne Erweiterung in SQL ausgedrückt werden, allerdings gibt einige spezifische Implementierungen.[1] Zum Beispiel gibt es Implementierungen mittels MapReduce[3] oder CUDA.[4] Skyline-Abfragen auf Datenströmen (d. h. kontinuierliche Skyline-Abfragen) wurden im Zusammenhang mit der parallelen Abfrageverarbeitung auf Mehrkernprozessoren untersucht, da sie in Datenstromanalysen und Echtzeitsystemen weit verbreitet sind.[5]

Einzelnachweise Bearbeiten

  1. a b c Stephan Borzsonyi, Donald Kossmann, Konrad Stocker: Proceedings 17th International Conference on Data Engineering. 2001, ISBN 0-7695-1001-9, The Skyline operator, S. 421–430, doi:10.1109/ICDE.2001.914855 (englisch).
  2. Maximilian E. Schüle, Alex Kulikov, Alfons Kemper, Thomas Neumann: New Trends in Databases and Information Systems - ADBIS 2020 Short Papers, Lyon, France, August 25-27, 2020, Proceedings. 2020, ISBN 978-3-03054622-9, ARTful Skyline Computation for In-Memory Database Systems, S. 3–12, doi:10.1007/978-3-030-54623-6_1 (englisch).
  3. Kasper Mullesgaard, Jens Laurits Pedersen, Hua Lu, Yongluan Zhou: Efficient Skyline Computation in MapReduce. In: Proc. 17th International Conference on Extending Database Technology (EDBT). 2014, S. 37–48 (englisch, openproceedings.eu [PDF]).
  4. Kenneth S Bøgh, Ira Assent, Matteo Magnani: Proceedings of the Ninth International Workshop on Data Management on New Hardware. 2013, ISBN 978-1-4503-2196-9, Efficient GPU-based skyline computation, S. 5:1–5:6, doi:10.1145/2485278.2485283 (englisch).
  5. Tiziano De Matteis, Salvatore Di Girolamo, Gabriele Mencagli: Continuous skyline queries on multicore architectures. In: Concurrency and Computation: Practice and Experience. 28. Jahrgang, Nr. 12, 25. August 2016, S. 3503–3522, doi:10.1002/cpe.3866 (englisch, zenodo.org).