Tag-Archive for » Datenbank «

NoSQL – Nicht nur SQL

Der Begriff NoSQL wird meist falsch interpretiert. NoSQL steht nicht für “kein SQL” (no SQL), sondern für “nicht nur SQL” (not only SQL). Damit soll das Ziel dieser neuen Techniken verdeutlicht werden: Es geht darum, die Schwächen der SQL-Systeme  mit ihrem riesigen Overhead durch differenzierte Vorgehensweisen zu überwinden. Die Diskussion läuft erst seit 2009, bis dato galten SQL-Systeme als der unbestrittene Standard bei Webanwendungen.

Die ersten NoSQL-Systeme kamen von großen Internetdiensten wie zum Beispiel Google mit BigTable, das bei Google Maps, Google Earth, YouTube und Blogger eingesetzt wird und als HBase frei verfügbar ist. Das Netzwerk Facebook entwickelte dafür Cassandra, das ebenfalls frei verfügbar ist. Auch Twitter will jetzt auf Cassandra umstellen, um mehr Tweats pro Zeiteinheit ausliefern zu können. Dazu kommen noch Open Source Projekte wie Couch DB, Hypertable oder MongoDB.

Die meisten NoSQL-Datenbanken haben eine HTTP-basierende Schnittstelle nach dem REST-Konzept (Representational State Transfer) zum Zugriff auf ihre Inhalte realisiert. Statt der üblichen Befehle in der Datenbankabfragesprache SQL werden die Befehle Get, Put, Post und Delete benutzt.

Datenbanksicherung mit phpMyAdmin

Statische Internetseiten lassen sich ja recht einfach sichern. Man kann zum Beispiel alle Dateien vom Rootverzeichnis abwärts per FTP auf seinen PC übertragen und hat eine Sicherungskopie der gesamten Präsenz. Und da statische Seiten sich selten ändern, braucht man den Vorgang auch nicht häufig wiederholen und hat trotzdem immer eine Sicherung des aktuellen Standes.

Das gleiche Verfahren eignet sich auch für dynamische Internetseiten, die einen Teil ihrer Inhalte aus einer Datenbank beziehen. Die statischen Anteile sichert man auf die schon für statische Seiten beschriebene Art und Weise.

Allerdings braucht man auch ein Verfahren, um die Datenbank so zu sichern, dass man sie jederzeit wieder neu aus dem Nichts aufbauen kann. Da hilft das Tool phpMyAdmin, das fast jeder Hoster seinen Rootserver- oder VServer-Kunden zur Verfügung stellt. Man kann  phpMyAdmin aber auch selbst mit wenig Aufwand nachinstallieren, das Programm kostet nichts.

Um eine Sicherungskopie der Datenbank zu erzeugen, wählen Sie den Menüpunkt „Exportieren“. Hier werden verschiedene Formate für den Export angeboten, neben SQL auch CSV und XML und weitere. SQL ist am besten geeignet, denn dabei werden alle informationen der Datenban und ihrer Tabellen mit gesichert, so dass man aus der SQL-Sicherung die komplette Datenbank wieder neu erzeugen kann.

Wenn irgendwann einmal die Rücksicherung der Datenbank nötig ist, braucht man nur die SQL-Datei ausführen und die Datenbank wird komplett mit allen Tabellen und Datensätzen wieder hergestellt.

Halbautomatik für Datenbankabfragen

Je mehr Felder eine Tabelle hat, umso umständlicher wird die Auswertung der Abfrage nach der üblichen Methode. Die sieht normalerweise so aus:

<?

$result = mysql_query(“SELECT * FROM meinetabelle“);

While ($row = mysql_fetch_array($result)) {

// Hier beginnt die Wertzuweisung

$field1 = $row[“field1”];

$field2 = $row[“field2”];

$field3 = $row[“field3”];

$field4 = $row[“field4”];

$field5 = $row[“field5”];

// Hier beginnt die Ausgabe

echo $field1.”, ”. $field2.”, ”. $field3.”, ”. $field4.”, ”. $field5.” <br />“;

}

?>

Die Wertzuweisung aus dem Abfrageergebnis lässt sich aber auch automatisieren. Das Script sieht dann so aus:

<?

$result = mysql_query(“SELECT * FROM meinetabelle“);

While ($row = mysql_fetch_array($result)) {

// Hier beginnt die Wertzuweisung

$j = mysql_num_fields ($result);

for ($i=0; $i < $j; $i++) {

$k = mysql_field_name ($result, $i);

$$k = $row[$k];

}

// Hier beginnt die Ausgabe

echo $field1.”, ”. $field2.”, ”. $field3.”, ”. $field4.”, ”. $field5.” <br />“;

}

?>

In $k steht dabei jeweils der Feldname. Mit dem Konstrukt $$k = mysql_field_name($result, $i); wird nicht der Variable selbst, sondern ihrem Inhalt, also dem jeweiligen Feldnamen der Wert zugeordnet.

Schon bei diesem Beispiel mit 5 Feldern in der Datenbank sieht man, dass mit der Automatik eine Zeile weniger zu schreiben ist als mit der Standardmethode. Für jedes weitere Datenfeld in der Tabelle kommt bei der Standardmethode eine Zeile Code dazu, während die automatische Methode mit beliebig vielen Feldern arbeitet, ohne dass man noch eine Zeile Code dazuschreiben muss.

Der Unicode-Zeichensatz UTF8 in Datenbanken und Internetseiten

Das Internet kann von jedem Ort in der Welt benutzt werden. Wenn dabei die Inhalte aus einer Datenbank kommen, kann schnell mal aus „Mit freundlichen Grüßen“  die kryptische Formulierung „Mit freundlichen GrÃ?Ã?en“ werden. Der Grund liegt im verwendeten Zeichensatz.

Ein Zeichensatz legt fest, welches Zeichen durch einen bestimmten binären Code angezeigt wird. Mit den 8-Bit-Codes können maximal 256 Zeichen unterschieden werden. Ein anderer Zeichensatz führt dazu, dass die gleichen 8 Bits dann ein anderes Zeichen darstellen, das können auch nicht darstellbare Steuerzeichen sein.

Wenn die Datenbank Ihrer Internetanwendung zum Beispiel für den in Deutschland häufig verwendeten westeuropäischen Zeichensatz ISO 8859-1 eingerichtet ist (auch als Latin-1 bezeichnet) und Sie Ihre Lösung auch in Griechisch anbieten möchten, haben Sie ein Problem, denn der ISO 8859-1-Zeichensatz unterstützt das griechische Alphabet nicht.

Hier hilft dann der  der Unicode-Zeichensatz UTF-8, mit dem man seine Internetseiten, Programme und Daten bei neuen Anwendungen immer versehen sollte, denn damit kann man alle Sprachzeichen abbilden. Das ist möglich, weil bei UTF-8 jedem Unicode-Zeichen eine ganze Bytekette von variabler Länge bis maximal vier Bytes (also 32 Bit)zugeordnet werden kann.

Bei Internetseiten wird der Unicode-Zeichensatz mit folgendem Meta-Tag festgelegt:

<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ >

Es kann aber passieren, dass ein Server trotz dieses Tags in den HTML-Seiten weiterhin zum Beispiel den westeuropäischen Zeichensatz ISO-8859-1 ausliefert. Bei einem Apache Webserver ist das meist durch einen Eintrag wie

AddType “text/html; charset=ISO-8859-1″ html

in der Konfigurationsdatei http.conf des Internetservers verursacht. Wenn Sie diesen Eintrag in

AddType “text/html; charset=UTF-8″ html

abändern und Apache neu starten, werden die Seiten mit dem Unicode-Zeichensatz UTF-8 ausgeliefert.