Open Source im professionellen Einsatz
Linux-Magazin 08/2010
851

Skript baut Abfrage dynamisch zusammen

Zeile 11 verknüpft die Bedingungen mit »AND«. Zeile 6 hat bereits den Kopf der Abfrage in die Variable »sql« geschrieben, Zeile 18 fügt noch eine »ORDER BY«-Klausel an. Die eigentliche Arbeit erledigt Zeile 19: Sie ruft Public SQL mit der erzeugten Anfrage als ersten Parameter auf. Als zweiten Parameter erwartet die Datenbank-Engine den Namen einer Callback-Funktion (»show_result()«, siehe Listing 5), die sie nach einer erfolgreichen Abfrage mit einem Ergebnis-Array als Parameter aufruft.

Listing 5: Ergebnis
anzeigen

01  var types=["Obst", "Gemüse"];
02  var sizes=["klein", "mittel", "groß",]
03 
04 function show_result(result){
05   var html = "n<table>n<tr><th>Name</th>
06                <th>Obst oder  Gemüse</th>
07                <th>Farbe</th>
08                <th>Geschmack</th>
09                <th>Größe</th></th>";
10   for (line =1; line < result.length; line++) {
11    html+="n<tr>";
12    html+="<td>"+result[line][1]+"</td>";
13    html+="<td>"+types[result[line][2]]+"</td>";
14    html+="<td>"+result[line][3]+"</td>";
15    html+="<td>"+result[line][4]+"</td>";
16    html+="<td>"+sizes[result[line][5]]+"</td>";
17    html+="</tr>";
18   }
19   html+="</table>";
20   document.getElementById('result').
21            innerHTML = html;
22 }

Das von Public SQL gelieferte Ergebnis hat folgenden Aufbau: »result[0][Spalte 0 bis Spalte n]« enthält die Feldnamen, »result[n][Spalte 0 bis Spalte x]« die Daten der n-ten Zeile. »<show_result()« braucht also nur noch über die Array-Elemente ab Index 1 zu iterieren und die Spalten auf die Tabellenzellen zu verteilen. In den Spalten zwei und fünf steht nicht der numerische Wert direkt aus der Datenbank, sondern die entsprechende Langtextform aus den Arrays »types« und »sizes« (Listing 5, Zeilen 1 und 2). Ab Zeile 20 schreibt Javascript den entstanden HTML-Code an die im statischen Grundgerüst vorgesehene Stelle, das »div«-Tag in Listing 1, Zeile 9.

Nützlich mit Einschränkung

Die Beispielanwendung lässt ahnen, welche wertvollen Dienste Public SQL bei der Javascript-Programmierung leisten kann: Für eine aufwändige Suchfunktion muss der Entwickler bloß den passenden SQL-Code verfassen statt aufwändige Abfragen in Javascript zu formulieren. Das Gleiche gilt für interaktive Anwendungen, die zur Laufzeit Daten auswählen, rekombinieren und visualisieren.

Unpraktisch ist allerdings, dass die Bibliothek die Daten an eine Callback-Funktion weiterreicht statt sie als Array oder Objekt zurückzugeben. Nur innerhalb der Callback-Funkion steht das Suchergebnis bereit. Wer versucht das Ergebnisarray an eine globale Variable zu binden, damit es im weiteren Programmablauf zur Verfügung steht, scheitert in der Regel an einer Race-Condition.

Performance

Zwangsläufig kann Public SQL es bei der Abfragegeschwindigkeit nicht mit klassischen Datenbanksystemen aufnehmen. In der Praxis lohnt jedoch ein Blick auf die Gesamtrechnung: Für das Benutzererlebnis ist die Zeit zwischen Klick und der Reaktion im Browser entscheidend. Dafür nehmen Anwender gerne einen einmaligen Ladevorgang von wenigen Sekunden in Kauf.

Datenmengen schnell herunterladen

In 1 bis 2 Sekunden lässt sich über einen durchschnittlichen DSL-Anschluss gut 1 MByte an Daten herunterladen, das sind oft schon einige 10 000 Datensätze. Wenn nun die Latenz der Netzverbindung (besonders im mobilen Internet), des Webservers, seiner Anwendung und der dahinterstehenden Datenbank größer ist als die lokal ausgeführter Anwendungen in Javascript, reagieren sie für den Anwender fließender als die Online-Variante. Die jeweiligen Grenzen unterliegen jedoch vielen Parametern und Konfigurationen.

In einem typischen Testaufbau durchsuchte Public SQL eine exemplarisch ausgewählte vierspaltige Tabelle mit gut 15 000 EU-Förderprojekten in etwa 20 Sekunden. Entwickler sollten berücksichtigen, dass der dynamische Aufbau der HTML-Tabelle selbst einen Großteil der Zeit in Anspruch nimmt.

Unempfindlich für komplexe Suchanfragen

Joins oder komplexere Anfragen hatten in Tests kaum Auswirkungen auf die Antwortzeiten. Dennoch müssen sich Entwickler darauf einstellen, dass bei den beschriebenen Größenordnungen der Browser nachfragt, ob Javascript so viel Rechenzeit verbrauchen soll - bei PTF-Dateien mit vielen Datenelementen weigerte sich Firefox sogar neue Objekte anzulegen.

Die Zahl der möglichen Datensätze ist begrenzt: Bei Tabellen über 10 000 Einträgen liefert die Mozilla-Engine den Fehler »Too many constructor Elements« (siehe Kasten "Performance"), der Internet Explorer schafft etwas mehr. Bei Abfragen aus Tabellen dieser Größe mit einer Ergebnismenge von nicht mehr als rund 100 Datensätzen reagiert der Browser noch ohne spürbare Verzögerung.

Infos

[1] Public SQL: [http://www.publicsql.org]

[2] Beispielanwendung des Artikels:[ftp://ftp.linux-magazin/pub/listings/magazin/2010/08/publicsql]

[3] Dokumentation: [http://www.publicsql.org/dokumentation.htm]

Der Autor

Peter Kreußel hat zahlreiche Artikel für das Linux-Magazin verfasst. Er arbeitet als freier Autor und Webenwickler. Sein besonderes Interesse gilt semantischen Technologien und Cross-Media-Publishing.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Browser-Turbo

    Die Ajax-Technologie reichert dröge Webapplikationen mit dynamischen Elementen an. Das gelingt bereits so gut, dass Benutzer sie auf dem Desktop kaum noch von anderen Programmen unterscheiden. Ein kleines Perl-Skript demonstriert die Technik.

  • Meteor

    Javascript sowohl im Browser als auch auf dem Server: Das Webframework Meteor verspricht Anwendungen aus einem Guss, die sich dank vieler fertiger Pakete rasch programmieren lassen.

  • E-Commerce-APIs

    Gutgehende Onlineshops sind selten und das Ergebnis langer Arbeit. Wer gerade erst beginnt Waren zu verticken, tut gut daran, bei einem großen Shoppingportal unterzuschlüpfen. Über APIs lassen sich eigene Warenwirtschafts- oder Buchhaltungsprogramme anbinden.

  • React

    Vom Unternehmen Facebook kommt das quelloffene Javascript-Framework React, das Weboberflächen geschickt mit Datenschätzen verknüpft. Insbesondere die Renderfunktion macht sich dabei nützlich.

  • HTML-5-DRM

    Im Rahmen von HTML 5 erhalten Webbrowser die Fähigkeit, Inhalte zu verschlüsseln. Das Sicherheitsfeature hat sich nun zum Politikum entwickelt, denn die Anbieter von digitalen Inhalten möchten es für Digital Rights Management (DRM) verwenden. Hier ein freier Blick auf die Technik.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.