Datenbanken

Werbung
Kurz & Gut
Datenbanken
von Mustafa Zengin
Neben der Anfrage an die Datenbank mit GET,
können Datensätze durch PUT, POST und DELETE
hinzugefügt, verändert oder entfernt werden.
Aufgrund von möglichen Einschränkungen in der
Länge der URI’s bei der GET-Methode, die je nach
eingesetztem
Server
begrenzt
ist,
werden
üblicherweise Anfragen die länger als 255 Bytes
sind mit der POST-Methode durchgeführt.
1 Einführung Datenbanken sind in der Lage große Mengen an
Informationen zu halten. Diese im Internet
zugänglich zu machen ist eines der wesentlichen
Herausforderungen. Das Ziel ist, die Datenbank so
unkompliziert und in wenigen Schritten wie möglich
erreichbar zu machen. Durch die Einheitliche
Schnittstelle von REST ist dem Entwickler
überlassen wie eine Datenbank im Backend realisiert
wird. Es existieren grundsätzlich zwei voneinander
unterschiedliche Ansätze der Umsetzung von
Datenbanken: die SQL Basierte Relationale
Datenbank und die NoSQL Variante.
Datenbank Relationale DB NoSQL Dokumenten Basiert Key-­‐Value Basiert 2 Hauptteil Server
Client
HTTP
WS
Spaltenorientiert Abbildung 2 Datenbank Klassifizierung
Relationale Datenbank
HTTP /
Connector
Der erste Schritt für jedes RESTful System ist es zu
entscheiden, welche Ressourcen zu Verfügung stehen
sollen. Das ermöglicht URI’s als Query Anfragen zu
benutzen, wie es im Web üblich ist. Für die
Relationalen Modelle sind es die Tabellen
(Relationen) und die Datensätze (Tupels), die eine
URI Anfrage ausmachen. Diese können als
Ressourcen dargestellt werden, wobei die TabellenRessourcen die Links zu den Tupels bereitstellen.
Die Anfragen können Filter, Sortierung, Anzahl an
Ergebnissen und Joins beinhalten.
DB
Abbildung 1
Eine Datenbank ist nicht immer von vorn herein
RESTful, kann aber für diesen Zweck durch ein
Webservice modelliert werden (Abbildung 1). Die
gängigsten Datenbanken haben wohl definierte
Connectoren
um
für
Programmiersprachen
zugänglich zu sein. Daran kann RESTful ansetzen.
Durch die für RESTful definierten Schnittstellen sind
die Möglichkeiten begrenzt, im Vergleich mit Query
Kombinationen wie in einer Relationalen DB,
miteinander kombinierte Daten für das Web zu
Verfügung zu stellen. Software wie phpMyAdmin
sind für Benutzer ausgerichtet, die aber nicht die
Einschränkungen für die Architektur von REST
einhalten. Einige Datenbanken wie SQLREST und
REST-SQL bieten die Fähigkeit direkt im Web
verfügbar zu sein. Das Problem liegt in der
Unterstützung der Anfrage Möglichkeiten die durch
eine Auflistung in einer Tabelle beschränkt wird.
Beispiel URI Syntax für eine Query:
http://example.com/musikdb/songs/12
http://{Anbieter}/{Datenbank}/{Tabelle}({id})
Ein etwas komplexere URI mit ein Join:
.../{Datenbank}/{Tabelle1}/{Tabelle2}
Vorausgesetzt, es ist eine Fremdschlüssel- Beziehung
zwischen den Tabellen in der Datenbank Schema
deklariert.
Beispiel Ausgabe für http://example.com/musikdb/:
<Musikdb>
<Saenger href=“http://example.com/musik/seanger“>Saenger</Saenger>
<Album href=“http://example.com/musik/Album“> Album </Album>
<Songs href=“http://example.com/musik/songs“>Songs</Songs>
</Musikdb>
1
http://www.se.uni-hannover.de
Stand: 04.01.2012
2
Kurz & Gut: Datenbanken
von Mustafa Zengin
NoSQL (Not only SQL)
Ausführen:
EntityManagerFactory emf =
Persistence.createEntityManagerFactory(„dbEinstel
lung“);
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Die NoSQL Datenbanken verfolgen einen nichtrelationalen Ansatz. Dieser wiederum klassifiziert
sich nach weiteren Eigenschaften (Abbildung 2). Bei
einigen NoSQL Datenbanken wie CouchDB, HBase
und Riak ist in der Data Management Layer bereits
REST integriert und der Zugriffe auf die Daten
werden über REST-Methoden geregelt (Abbildung3). Jede NoSQL Datenbank hat in seinem Gebiet
gewisse Eigenschaften, mitunter das sie schemafrei
sein kann.
Saenger saenger = new Saenger();
saenger.setName(„Max Muster“);
em.persist(saenger);
em.getTransaction().commit();
em.close();
@Entity
Spezifiziert eine Klasse als Entity
@Table
Definiert den Tabellennamen für die
Entity
@Id
Spezifiziert den Primärschlüssel
@GeneratedValue
Generiert automatisch ein Wert, z.B.
für Primärschlüssel
@Column
Spezifiziert Daten zu einem Feld wie
maximale länge, nullable, unique etc.
@ManyToMany
Definiert N:N Relationen
@ManyToOne
Definiert N:1 Relationen
@OneToMany
Definiert 1:N Relationen
JPA Standard
@OneToOne
Definiert 1:1 Relationen
Java Persistent API ist eine Java-Schnittstelle mit
deren Hilfe Objekte vereinfacht in Datenbanken
übertragen werden. So können auch Datenbanken
genutzt werden die ursprünglich nicht für
Objektorientierte Datenstruktur vorgesehen war. Die
Zuweisung und Abhängigkeit an die Datenbank
geschieht über Annotationen (Tabelle 1).
@Embedded
Auf Klassendeklaration welche eine
Entität als Attribut implementiert
@Embeddable
Referenzierte Attribut
Server
Client
HTTP
Data Management
Layer
DB
Abbildung 3
Tabelle 1
JPQL
Java Persistence Query Language ist eine mächtige
Abfragesprache mit der Joins, Aggregationsfunktion,
Gruppierung, Sortierung und Subqueries möglich
sind. Standardabfragesprache für JPA.
@Entity
public class Saenger {
private int id;
private String name;
public Saenger() { } // Vorgabe
public Saenger(int id, String name) {
this.id = id; this.name= name;
}
@Id
@GeneratedValue
public int getId(){ return this.id; }
Literatur: [1] „Kris Zyp, NoSQL Architecture“, 2010, Online; 14.12.2011
http://www.sitepen.com/blog/2010/05/11/nosql-architecture/
[2] „CouchDB“, 1. Auflage, Galileo Press 2011.
[3] „HTTP Database Connector (HDBC): RESTful Acces to Relational
Databasses“, 2010, Online; 15.12.2011 http://dret.net/netdret/docs/wildewww2010-restful-sql.pdf
[4] „Die Java Persistence API „ 2007, Online; 19.12.2011
http://www.sigs.de/publications/js/2007/02/ghadir_pagop_JS_02_07.pdf
public String getName() { return this.name; }
public void setName(String name) {
this.name = name
}
}
2
http://www.se.uni-hannover.de
Stand: 04.01.2012
Herunterladen