Smart und Simple Large Objects

Smart und Simple Large Objects

  • Large Object ist der Oberbegriff für Smart oder Simple Large Objects
  • Smart Large Object ist der Oberbegriff für Objekte vom Datentyp BLOB oder CLOB
  • Simple Large Object ist der Oberbegriff für Objekte vom Datentyp BYTE oder TEXT.
  • Blobspaces speichern Simple Large Objects
  • Smart-Blobspaces speichern Smart Large Objects
  • Datentyp BLOB

Blobs

speichern maximal 4*2^40 Bytes, das sind 4 Terabyte. Für Smart Large Objects gibt es die unten stehenden Operationen zum Einfügen, Auslesen und Kopieren:

  • FILETOBLOB
  • LOTOFILE
  • LOCOPY

BLOBs werden geladen mit den folgenden Funktionen bzw. Dienstprogrammen:

  • FILETOBLOB
  • SQL-Befehl LOAD
  • Dienstprogramme dbload und onload
  • Hostvariable ifx_lo_t in ESQL/C-Programmen

Datentyp CLOB

Der Datentyp CLOB speichert nur Textdaten. Unter „Text“ fallen dabei auch HTML, XML, Postscript, SGML (und damit auch TeX).
Das unter „BLOB“ gesagte gilt ebenfalls für CLOB.

Datentyp BYTE

Anlegen einer Tabelle mit Smart Large Objects

Die folgende Tabelle enthält eine Spalte mit Smart Large Objects:

create table tab1 (nr serial,name char(20), bild BLOB );

Bei SBs läßt sich allerdings noch genauer festlegen, wo und wie der BLOB gespeichert wird, z.B. mit der Klausel „PUT“.

Die PUT-Klausel für SBs

Tabelle mit „Log“-Modus erstellen:

CREATE TABLE tab1 
(nr SERIAL,name CHAR(20), bild BLOB )
	PUT bild IN (sb1) (LOG)

In diesem Falle wird der BLOB “bild” in den SB-Space “sb1” gespeichert und Logging ist eingeschaltet.

Tabelle umschalten auf Nolog


alter table tab1 put bild in (sb1) (no log) -> beachte das Blank zwischen “no” und “log”

Definition der Extent size

CREATE TABLE tab1 
(nr SERIAL,name CHAR(20), bild BLOB )
	PUT bild IN (sb1) (EXTENT SIZE 20)

Die Extent Size wird in KB angegeben und auf ein Vielfaches der SBspace-Pagesize aufgerundet. Das bedeutet: Jede Spalte einer Tabelle, die den Datentyp BLOB oder CLOB hat, hat innerhalb des Smart Blobspaces ihre eigene Pagesize!!! Zumindest könnte sie das haben. Allerdings wird die Extent Size bei fehlender Angabe vom Server selbst errechnet. Will man beispielsweise ein Smart Large Object der größe 120 KB speichern, so errechnet der Server den größtmöglichen Extent, den er im entsprechenden Chunk freimachen kann (also im optimalen Falle 120 KB).

Empfehlung: Nur in Ausnahmefällen explizite Angabe verwenden.

Erstellen eines SBspaces

Smart Blobspace Pagesize ist nicht konfigurierbar

Im Gegensatz zur BLOBPAGE ist die Größe der Page in einem Smart Blobspace identisch mit der Server-Page Size und kann auch nachträglich nicht mehr geändert werden.

Parameter in der ONCONFIG

SBSPACENAME

Dies ist der Default-Dbspace für Smart Large Objects, wenn man beim CREATE TABLE keine PUT Anweisung mit angibt.
Mit onspaces Erstellen eines SBspaces:

In der ONCONFIG ist der Default-SBspace gespeichert:

SBSPACENAME    xs300         	#       Default smartblob space name - this is where blobs
#       go if no sbspace is specified when the smartblob is
#       created. It is also used by some datablades as
#       the location to put their smartblobs.
SYSSBSPACENAME  xs300        	#       Default smartblob space for use by the Informix
#       Server. This is used primarily for Informix Server
#       system  statistics collection.

Hierarchie der Speicher-Eigenschaften

Alle Eigenschaften, die in der PUT-Klausel des CREATE TABLE Statements vorkommen, können beim Erstellen des Smart Blobspaces global vorgegeben werden (oder stehen sogar in der ONCONFIG). Die Wertigkeit der Eigenschaften geht in der üblichen Weise aus der folgenden Tablle hervor:

Database server storage characteristics (system defaults)

Sbspace storage characteristics
(assigned when the sbspace is created with the onspaces utility or
when you change the sbspace with onspaces -ch)

Column-level storage characteristics
(assigned when the table is created with the CREATE TABLE
statement or when you change the table with the ALTER TABLE statement)

User-specified storage characteristics
(assigned when the smart large object is created with a DataBlade API
mi_lo_create function or ESQL/C ifx_lo_create function)

Einfügen und Lesen von Large Object Spalten

Speichern eines BLOBs

insert into tab1 values (0, "Schiff", FILETOBLOB ('/home/f995440/k00563.jpg', 'server'));

Selektieren eines Smartblobs:


select nr, name, LOTOFILE (bild, '/home/f995440/'  , 'client') from tab1   

Der ausgelesene Smartblob wird im Verzeichnis /home/f995440 gespeichert:

nr            1
name          Schiff
(expression)  /home/f995440/.254925627
................

Gibt man noch einen Dateinamen an, so wird dieser vor den Punkt gestellt:

select nr, name, lotofile (bild, '/home/f995440/bild'  , 'client')
        from tab1

ergibt folgenden Output:

nr            1
name          Schiff
(expression)  /home/f995440/bild.0000000041dd314b

Die Anzahl der angehängten Zeichen an dem Dateinamen kann man begrenzen durch Angabe von Meazeichen.
Z.B. ergibt

select nr, name, lotofile (bild, '/home/f995440/bild??'  , 'client')
        from tab1
        where nr = 1

nr            1
name          Schiff
(expression)  /home/f995440/bild4b

Es werden also genau 2 Zeichen angehängt.

Beispielscripte

Script zur statistischen Auswertung der Blob-Zugriffe

************************************************************************ 
IDS: Check Blob Usage Easily on HP and Linux 
************************************************************************ 
This package allows for easier control of BLOB usage and will ease the datablade installation 
process.  It is currently available on Linux Red Hat Enterprise 3.0 and HP-UX 11i.  (NOTE: If you 
would like this package on Solaris, AIX or WIN XP, please contact your Premium Support Manager.) 

The free datablade module SBLOB Info 1.5 was created by Jean T. Anderson 
and described in the following article : 
  
http://www-128.ibm.com/developerworks/db2/zones/informix/library/techart... 

This package provides shell scripts to automatically generate reports for all BLOB columns 
available in one or more databases and install the module. Two binaries are included: Red Hat 
Enterprise AS3, and HP-UX 11i. 

Please note the following limitations : 
- Binaries were only built and tested on Linux Kernel 2.4.21 & HP-UX 11i. 
- This package has been tested with IDS 9.40 and IDS 10.00; it should also work with IDS 9.30. 
- CLOB columns size can not be computed. 

How to Install: 

1) Login to informix account & cd $INFORMIXDIR/extend 
2) Uncompress the package -> Package-SBINFO_v1-US.tar   
3) Run installation script -> ./install_SBLOB.sh DB1 [DB2 .. DB3] 

How to generate reports : 
If you don't have one database with BLOB column : 
Run test script -> ./test_SBLOB.sh 
If you have one database with BLOB column : 
Run report script -> ./report_SBLOB.sh 

Example of output from the test script  ./test_SBLOB.sh: 

This script does the following: 
- Create one database with one SBSPACE 
- Register SBLOB module 
- Generate reports about BLOB usage for the testsblobinfo database 

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
CAPTCHA
Diese Frage dient dazu festzustellen, ob Sie ein Mensch sind und um automatisierte SPAM-Beiträge zu verhindern.
1 + 0 =
Lösen Sie dieses einfache mathematische Problem und geben Sie das Ergebnis ein. Für 1 + 3 geben Sie z.B. 4 ein.