jQuery & CouchDB Wohin geht die Zukunft der Web Entwicklung? Gerhard Hipfinger [email_address]
Agenda Was ist jQuery Was ist CouchDB Was kann man damit anstellen
Was ist jQuery JavaScript Bibliothek basierend auf CSS Selektoren Drängt sich nicht im globalen JavaScript Namespace auf Arbeitet ausgezeichnet mit anderen Bibliotheken zusammen Hervorragende API (nicht invasiv) Alle wichtigen Browser werden unterstützt!
Los gehts... jQuery('div#footer') jQuery('div.article > p') jQuery('li:first-child') $('a[href ^ =“mailto:“]') $ ist ein Shortcut für jQuery – sehr praktisch
Eine Selektion liefert Collections $('div.section')  … liefert eine Collection Mit den Collections kann weitergearbeitet werden $('div.section').size()  … liefert die Anzahl der gefundenen Elemente $('div.section').each(function(div) { // hier kann div manipuliert werden })
Arbeiten mit Collections Es gibt eine Vielzahl an Methoden die mit Collections arbeiten Die meisten werden automatisch auf jedes Element einer Collection angewendet $('div.section').addClass(„highlight“)
$('img.logo').attr('src', 'images/logo.png')
$('tr.even').css('background-color','red')
Zugriff auf DOM Attribute Manche Methoden wirken auf das erste gefundene Element var h = $('div.section').height();
var src = $('img.logo').attr('src');
var html = $('div.footer').html();
DOM Navigation jQuery bietet einige Methoden um im DOM Baum zu navigieren $('div.section').next()
$('div.section').prev()
$('div.section').prev('a')
$('div.section').parent()
$('div.section').parents()
jQuery Event Handling jQuery bietet Browser unabhängiges Eventhandling $('a').click( function(event) { $(this).css({backgroundColor:'red'}); event.preventDefault(); });
jQuery = unobtrusive $(document).ready(function() { alert('Dokument wurde geladen!'); }); Dadurch wird Funktionalität von der Struktur getrennt! Grundlage von „Degrading Gracefully“ Grundlegende Funktionalität steht auch ohne JS zur Verfügung
Wenn JavaScript aktiv -> dann werden die netten Effekte auf ausgeführt
AJAX mit jQuery jQuery bietet ausgezeichneten AJAX Support $('div#footer').load('some/footer.html'); Es gibt auch noch komplexere Möglichkeiten $.get(url, params, callback) $.post(url, params, callback) $.getJSON(url, params, callback) $.getScript(url, callback)
jQuery kann noch so viel mehr Alleine mit jQuery könnte man ganze Vorträge füllen Das grundlegendsten Funktionen haben wir aber vorgestellt Natürlich gibt es noch sehr viele Effekte (CSS Animation) Weiteres gibt’s unter http://jquery.com/ (offizielle Seite) Jetzt einmal die CouchDB Grundlagen
CouchDB ist … ein Apache Projekt (Top Level und Open Source) eine dokument-orientierte Datenbank Schema frei extrem gut skalierbar in Erlang geschrieben (kommt aus dem Telekom Bereich)
CouchDB Dokumente Eine beliebig strukturierte Datenmenge Testfall, Requirement, Ticket, Blogeintrag,… Hat nicht zwangsläufig eine bestimmte Struktur Besteht aus einer Menge Attributen Java Entwickler stellen sich am Besten eine Map darunter vor In früheren Versionen als XML Daten abgelegt Jetzt: JSON kompakt
portabel
leicht aus beliebigen Sprachen erzeugbar
Datenbank? Aber wo sind die Tabellen und Spalten? -> es gibt keine Es werden einfach Dokumente gespeichert Dokumente unterliegen keinen Schema Einschränkungen
Das ist doch keine Datenbank... Doch! Erfüllt ACID Kriterien
Multi-Version Concurrency Control (MVCC)
Verteilte Datenspeicherung

jQuery & CouchDB - Die zukünftige Webentwicklung?

  • 1.
    jQuery & CouchDBWohin geht die Zukunft der Web Entwicklung? Gerhard Hipfinger [email_address]
  • 2.
    Agenda Was istjQuery Was ist CouchDB Was kann man damit anstellen
  • 3.
    Was ist jQueryJavaScript Bibliothek basierend auf CSS Selektoren Drängt sich nicht im globalen JavaScript Namespace auf Arbeitet ausgezeichnet mit anderen Bibliotheken zusammen Hervorragende API (nicht invasiv) Alle wichtigen Browser werden unterstützt!
  • 4.
    Los gehts... jQuery('div#footer')jQuery('div.article > p') jQuery('li:first-child') $('a[href ^ =“mailto:“]') $ ist ein Shortcut für jQuery – sehr praktisch
  • 5.
    Eine Selektion liefertCollections $('div.section') … liefert eine Collection Mit den Collections kann weitergearbeitet werden $('div.section').size() … liefert die Anzahl der gefundenen Elemente $('div.section').each(function(div) { // hier kann div manipuliert werden })
  • 6.
    Arbeiten mit CollectionsEs gibt eine Vielzahl an Methoden die mit Collections arbeiten Die meisten werden automatisch auf jedes Element einer Collection angewendet $('div.section').addClass(„highlight“)
  • 7.
  • 8.
  • 9.
    Zugriff auf DOMAttribute Manche Methoden wirken auf das erste gefundene Element var h = $('div.section').height();
  • 10.
    var src =$('img.logo').attr('src');
  • 11.
    var html =$('div.footer').html();
  • 12.
    DOM Navigation jQuerybietet einige Methoden um im DOM Baum zu navigieren $('div.section').next()
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
    jQuery Event HandlingjQuery bietet Browser unabhängiges Eventhandling $('a').click( function(event) { $(this).css({backgroundColor:'red'}); event.preventDefault(); });
  • 18.
    jQuery = unobtrusive$(document).ready(function() { alert('Dokument wurde geladen!'); }); Dadurch wird Funktionalität von der Struktur getrennt! Grundlage von „Degrading Gracefully“ Grundlegende Funktionalität steht auch ohne JS zur Verfügung
  • 19.
    Wenn JavaScript aktiv-> dann werden die netten Effekte auf ausgeführt
  • 20.
    AJAX mit jQueryjQuery bietet ausgezeichneten AJAX Support $('div#footer').load('some/footer.html'); Es gibt auch noch komplexere Möglichkeiten $.get(url, params, callback) $.post(url, params, callback) $.getJSON(url, params, callback) $.getScript(url, callback)
  • 21.
    jQuery kann nochso viel mehr Alleine mit jQuery könnte man ganze Vorträge füllen Das grundlegendsten Funktionen haben wir aber vorgestellt Natürlich gibt es noch sehr viele Effekte (CSS Animation) Weiteres gibt’s unter http://jquery.com/ (offizielle Seite) Jetzt einmal die CouchDB Grundlagen
  • 22.
    CouchDB ist …ein Apache Projekt (Top Level und Open Source) eine dokument-orientierte Datenbank Schema frei extrem gut skalierbar in Erlang geschrieben (kommt aus dem Telekom Bereich)
  • 23.
    CouchDB Dokumente Einebeliebig strukturierte Datenmenge Testfall, Requirement, Ticket, Blogeintrag,… Hat nicht zwangsläufig eine bestimmte Struktur Besteht aus einer Menge Attributen Java Entwickler stellen sich am Besten eine Map darunter vor In früheren Versionen als XML Daten abgelegt Jetzt: JSON kompakt
  • 24.
  • 25.
    leicht aus beliebigenSprachen erzeugbar
  • 26.
    Datenbank? Aber wosind die Tabellen und Spalten? -> es gibt keine Es werden einfach Dokumente gespeichert Dokumente unterliegen keinen Schema Einschränkungen
  • 27.
    Das ist dochkeine Datenbank... Doch! Erfüllt ACID Kriterien
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
    Try this withyour RDBMS :) Sie ist halt nicht relational!
  • 33.
    Zugriff auf DokumenteAlle Zugriffe erfolgen über eine REST API Erstellen HTTP POST /testfall/
  • 34.
    Lesen HTTP GET/testfall/T001
  • 35.
    Ersetzen HTTP PUT/testfall/T001
  • 36.
    Löschen HTTP DELETE/testfall/T001 Durch die Verwendung von HTTP können auch Proxies verwendet werden -> ausgezeichnete Skalierbarkeit!
  • 37.
    Views Mit Viewskann auf den Datenbestand (Dokumente) zugegriffen werden Map/Reduce Algorithmus Abfragesprache ist JavaScript Weiter wollen wir an dieser Stelle gar nicht gehen (sonst wäre das alleine ein eigener Vortrag)
  • 38.
    Map Werden überJavaScript definiert function(doc) { if (doc.status == "accept") { emit(null, doc); } } Mit emit() werden Daten in das Ergebnis gespielt Format: emit(key, result)
  • 39.
    Map function(doc) {if (doc.status == "accept") { emit(doc.subject, {author: doc.author, description: doc.description}); } } Hier wird nur ein Teil des Dokuments (ein Testfall) als Ergebnis erzeugt: subject ist der key, author und description sind Teil des Ergebnisdokuments
  • 40.
    Reduce Mit Reducekönnen Berechnungen basierend auf Ergebnissen ausgeführt werden Ein komplettes Beispiel
  • 41.
    Beispiel { "_id": "monkeys-are-awesome" , "_rev" : "1534115156" , "type" : "article" , "title" : "Monkeys are awesome" , "posted_at" : "2008-09-14T20:45:14Z" , "tags" : [ "monkeys" , "awesome" ], "status" : "Live" , "author_id" : "gerhard.hipfinger@openforce.com" , "updated_at" : "2008-09-14T21:23:59Z" , "body" : "The article body would go here..." }
  • 42.
    Map function (doc ) { if ( doc.type == 'article' ) { for ( i in doc.tags ) { emit ( doc.tags[i], 1 ) ; } } } Ergebnis ( "awesome" , 1 ), ( "monkeys" , 1 )
  • 43.
    Reduce function (tag, counts ) { var sum = 0; for ( var i=0; i < counts.length; i++ ) { sum += counts[i]; } return sum; }
  • 44.
    Ergebnis { &quot;rows&quot;:[ { &quot;key&quot; : &quot;awesome&quot; , &quot;value&quot; :1}, { &quot;key&quot; : &quot;monkeys&quot; , &quot;value&quot; :1}, ... ]} Wooohhh!
  • 45.
    Abfragen sind DokumenteDie Abfragen selbst sind wieder Dokumente! { &quot;tags&quot; : { &quot;map&quot; : &quot;function(doc) { if(doc.type == 'article') { for(var i in doc.tags) { emit(doc.tags[i], 1); }}}&quot; , &quot;reduce&quot; : &quot;function(tag, counts) { var sum = 0; for(var i = 0; i < counts.length; i++) { sum += counts[i]; }; return sum; }&quot; } }
  • 46.
    CouchDB Ausblick Clusterof unreliable commodity Hardware (also Cloud ready)
  • 47.
  • 48.
    Vom Konzept herals verteiltes System geplant (skalierbar)
  • 49.
    Verwaltung von riesigerDatenmengen (Multi-TByte Bereich) – viele Anwendungen im Bereich Logfile Analyse
  • 50.
    jQuery & CouchDBim Einsatz DEMO 3 Zeilen jQuery!
  • 51.
    Gerhard Hipfinger [email_address]openForce Information Technology GesmbH Dresdner Str. 108 / 3. Stock / Top 11 1200 Wien TEL +43 1 3191775 FAX +43 1 3191775-20 www.openforce.com Das wars :)