Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Datenbanken erstellen » Datenbanken in SQL Anywhere erstellen » Hinweise zur Planung » Datentypen für Spalten wählen

 

BLOBs speichern

Ein BLOB ist eine nicht interpretierte Folge von Bytes oder Zeichen, die als Wert in einer Spalte gespeichert wird. Beispiele für BLOBs sind Bild- oder Tondateien. Während BLOBs normalerweise groß sind, können Sie sie in jedem Datentyp für Zeichenfolgen oder binäre Zeichenfolgen wie etwa CHAR, VARCHAR, NCHAR, BINARY, VARBINARY usw. speichern. Wählen Sie den Datentyp und die Länge abhängig vom Inhalt und der Länge der BLOBs, die Sie speichern wollen.

Hinweis

Ein großes Zeichenobjekt (Character Large Object) wird gemeinhin als CLOB bezeichnet, ein großes Binärobjekt (Binary Large Object) als BLOB und die Kombination beider als LOB. In dieser Dokumentation wird nur das Akronym BLOB verwendet.

Wenn Sie eine Spalte zum Speichern von BLOB-Werten erstellen, können Sie einzelne Aspekte der Speicherung steuern. Sie können beispielsweise festlegen, dass BLOBs bis zu einer bestimmten Größe in der Zeile (inline) gespeichert werden, während größere BLOBs außerhalb der Zeile auf Tabellenerweiterungsseiten gespeichert werden. Zusätzlich können Sie festlegen, dass für BLOBs, die außerhalb der Zeile gespeichert werden, die ersten n Byte des BLOBs, die auch als Präfix bezeichnet werden, in der Zeile dupliziert werden sollen. Diese Aspekte der Speicherung werden durch die Einstellungen INLINE und PREFIX gesteuert, die in den Anweisungen CREATE TABLE und ALTER TABLE festgelegt werden. Die Werte, die Sie für diese Einstellungen angeben, können unvorhergesehene Auswirkungen auf die Performance oder die Plattenspeicheranforderungen haben.

Wenn weder INLINE noch PREFIX angegeben sind, oder wenn INLINE USE DEFAULT oder PREFIX USE DEFAULT angegeben ist, werden Standardwerte wie folgt angewendet:

  • Bei Spalten vom Typ Zeichendaten wie CHAR, NCHAR, LONG VARCHAR und XML ist der Standardwert für INLINE 256 und der Standardwert für PREFIX 8.

  • Bei Spalten vom Typ "Binärdaten" wie BINARY, LONG BINARY, VARBINARY, BIT, VARBIT, LONG VARBIT, BIT VARYING und UUID ist der Standardwert für INLINE "256" und der Standardwert für PREFIX "0".

Es wird empfohlen, die Werte für INLINE und PREFIX nicht festzulegen, es sei denn, es gibt bestimmte Anforderungen, die durch die Standardwerte nicht erfüllt werden. Die Standardwerte wurden ausgewählt, um die Performance und den Festplattenspeicherbedarf möglichst gut aneinander anzupassen. Die Performance bei der Zeilenverarbeitung kann sich z.B. verschlechtern, wenn Sie INLINE auf einen großen Wert setzen und alle BLOBs in der Zeile gespeichert werden. Wenn Sie PREFIX zu hoch einstellen, erhöhen Sie den erforderlichen Speicherplatz zum Speichern von BLOBs, da die PREFIX-Daten einen BLOB-Abschnitt duplizieren.

Wenn Sie sich dazu entscheiden, Werte für INLINE oder PREFIX festzulegen, darf die INLINE-Länge die Länge der Spalte nicht überschreiten. Ebenso darf die PREFIX-Länge die INLINE-Länge nicht überschreiten.

Die Präfixdaten für eine komprimierte Spalte werden nicht-komprimiert gespeichert, daher ist keine Dekomprimierung erforderlich, wenn alle Daten, die zur Erfüllung einer Anforderung erforderlich sind, im Präfix gespeichert sind.

Informationen über die Standardwerte für die INLINE- und PREFIX-Klauseln finden Sie unter CREATE TABLE-Anweisung.

BLOBs gemeinsam nutzen

Falls ein BLOB die INLINE-Größe überschreitet und mehr als eine Datenbankseite für die Speicherung benötigt, speichert der Datenbankserver das BLOB so, dass es, falls möglich, durch andere Zeilen in derselben Tabelle referenziert werden kann. Dies wird als gemeinsame Nutzung von BLOBs bezeichnet. Die gemeinsame Nutzung von BLOBs wird intern abgewickelt und soll unnötige Duplizierungen von BLOBs in der Datenbank reduzieren.

BLOBs werden nur dann gemeinsam genutzt, wenn Sie die Werte einer Spalte den Werten einer anderen Spalte gleichsetzen. Zum Beispiel: UPDATE t column1=column2;. Wenn "column2" in diesem Beispiel BLOBs enthält, werden diese in "column1" nicht dupliziert, sondern es werden Zeiger auf die Werte in "column2" benutzt.

Wenn ein BLOB gemeinsam genutzt wird, hält der Datenbankserver fest, wie viele andere Referenzen für dieses BLOB vorhanden sind. Sobald der Datenbankserver feststellt, dass ein BLOB innerhalb einer Tabelle nicht mehr referenziert wird, wird das BLOB entfernt.

Falls ein BLOB von zwei nicht komprimierten Spalten gemeinsam genutzt wird, dann aber eine der Spalten komprimiert wird, wird das BLOB nicht mehr gemeinsam genutzt.