Datenbanksysteme, die den neuen Anforderungen an nicht-rationale, verteilte und horizontal skalierbare Datenbanken nachkommt.
http://nosql-database.org/
Schlagwort: Datenbank
Rekursive SQL-Abfragen
Am Ende Jahres 2009 stand ich vor der Problematik, dass meine Applikation mit mehr als 3000 Benutzern und mehreren Terra-Byte an Daten immer mehr an Performance verlor.
Besonders die Administratoren bedanken sich, bei Aufrufzeiten von über einer Minute für jeden Seitenwechsel, beim System.
So begann ich erstmal die in Java geschriebenen objektorientierten, rekursiven Methoden Schritt für Schritt aufzulösen.
Der Ist-Wert vor dem Umbau lag bei bis zu 870 SQL-Anfragen pro Seitenaufbau, nach dem Umbau lang er konstant bei 5 Aufrufen und einer Performanceoptimierung von circa 700%.
Dabei kam mit besonders die Verwendung von rekursiven SQL-Abfragen auf der Datenbank entgegen, um die in Ordner gruppierten Objekte hierachisch auflösen zu können.
Voraussetzung:
DIRECTORY-Table: DIRECTORY_ID, PARENT_ID
LEVEL eine Integer oder Long Variable zur Beendigung des SQL im Fehlerfall infinite LOOP
Rekursive SQL-Abfrage:
with r (groupid,groupparentid, level) AS ( — feste Syntax: erstes Ergebnis wird in der temporären Tabelle r vorgehalten wirdselect dto.DIRECTORY_ID, dto.PARENT_ID, 1 AS level from DIRECTORY-Table dto where PARENT_ID IN ( ‚1‘,’2′,’3′) — mit der ersten SQL-Anfrage, die die Tabelle r fülltUNION ALL — feste SQL Ausdruck für die Rekursionselect dt. DIRECTORY_ID,dt.PARENT_ID,r.level +1 from DIRECTORY-Table dt,r where dt.PARENT_ID = r.groupid and r.groupid IS NOT NULL and r.level <= LEVEL — zweite SQL-Abfrage mit der Rekursivebedingung und der Verwendung des Ergebnis des ersten SQL-Statements)select * from DIRECTORY-Table g,r where g.GROUP_ID = r.groupid) — letzendliches SELECT-Statement für das zurückzugebende Ergebnis
[Quellen]
http://www.mayeruli.de/db2/rekursives-sql.html
http://www.thomas.teufl.eu/blog/2007/09/27/t-sql-rekursive-abfragen/
http://www.orafaq.com/node/1879