DB-Feld vom String -> autom. Komprimierung?

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

DB-Feld vom String -> autom. Komprimierung?

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Hallo!
Ab einem bestimmten Release ist es möglich, ein Datenbankfeld vom Typ "String" zu verwenden. Diesen möchte ich gerne verwenden, um eine XML-Dokument zu speichern.
Ich frage mich nun, ob eine moderne Datenbank so schlau ist, diesen Text-String zu komprimieren?
Welche DB kann das? Welche evtl. nicht?
Muss man das extra einstellen? Wenn ja: Global oder für bestimmte Tabellen?
Die Hilfe sagt, dass der Zugriff auf lange Strings langsamer ist, da die Daten nicht direkt in der DB gespeichert werden. Sie schweigt sich allerdings zur (möglichen) Komprimierung aus.

Danke für jeden Hinweis!

Gruß Enno

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: DB-Feld vom String -> autom. Komprimierung?

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
pfuuu...
Soweit ich weiß werden Texte "intern" als (B)LOB abgelegt und in der eigentlichen Tabelle nur der Link darauf gespeichert. Dasselbe gilt auch für Byte-Folgen (RAWSTRING)
Ob Oracle hier automatisch komprimiert kann ich echt nicht sagen. Einträge in "Normale" Tabellen in SAP/Oracle werden meines Wissens nach einiger Zeit (Profilparameter?) komprimiert. Das ist aber auch von der Gesamtgröße der Tabelle abhängig.

Auf die schnelle hab ich da was zu PostgreSQL ausgegraben:
http://stackoverflow.com/questions/3801 ... postgresql
Demnach ist es bei dieser DB zum Beispiel automtisch aktiv.

Hier ein paar Worte zu Oracle:
http://www.oracle.com/technetwork/artic ... 84075.html
Die erkennt sogar "gleiche" Texte.

Gesucht hab ich mit Google und "<dbname> compressing blob" :wink:

Interessant für mich war vorallem der Hinweis, dass in PostgreSQL die Text auch in der Tabellenzeile selbst gepeichert werden können und nicht im (B)LOB landen.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: DB-Feld vom String -> autom. Komprimierung?

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Ich persönlich hab schon für einige Projekte eine XML-Ablage implementiert und die Daten manuell komprimiert:
XML/Daten mit Transformation in einen XSTRING
XSTRING mit CL_ABAP_GZIP in XSTRING(komprimiert)
Den XSTRING(komprimiert) in die DB

Ist nicht mal sonderlich aufwendig: Drei Befehle; wenn man "sparsam" mit dem Workarea umgeht, sogar nur zwei Befehle.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: DB-Feld vom String -> autom. Komprimierung?

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Danke adt für deine Infos!
Ich habe auch Infos gefunden, dass man z.B. komplette Tabellen komprimieren kann.
Der Umweg über ZIP ist natürlich möglich aber eben eher Blödsinn, wenn die DB bereits eine eigene Optimierung verwendet.
Ist es von Bedeutung, dass du die Transformation in einen Xstring gemacht hast? Ist der platzsparender als ein "normaler String"?
Gruß enno

Re: DB-Feld vom String -> autom. Komprimierung?

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Tja, dass Ergebnis von GZIP ist nun mal ein XSTRING also spare ich mir somit eine zweite Variable vom Type STRING.
Die Methoden der GZIP-Klasse "akzeptieren" sowohl beim Importing als auch beim Exporting dieselbe Variable (per Value)

Werd mal unseren DB-Spezialisten fragen wie man die "Optimierung" einstellen kann.

Ich könnte mir aber vorstellen, dass das Komprimieren im Programm "besser" ist als auf der Datenbank:
- Weniger Daten die zwischen den Systemen (bei DB auf einem eigenen Server) serialisiert werden müssen
- Weniger Daten in den Archive-Logs
- Weniger Arbeit für die Datenbank, die ja meist das "Bottleneck" in einer SAP-Umgebung ist

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ewx

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: DB-Feld vom String -> autom. Komprimierung?

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
Hallo Enno,

habe gerade mit einem Testprogramm geschaut und sy-abcde 24 mal mit sich selbst verkettet und so einen ca. 430MB großen String erhalten und den auf eine neu angelegte Tabelle geschoben. Danach mit der DB02 diese Tabelle analysieren lassen und die DB02 sagt, dass die DB angeblich ebendiese 430MB Platz jetzt reserviert hat.
Spricht nicht für eine DB-immanente Komprimierung.
Dass die Daten leicht reduzierbar sind habe ich mit einem trivialen EXPORT TO DATA BUFFER geschaut - ist nicht so gut wie gzip aber es war nachher nur ca. 1MB Verbrauch.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
ewx

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: DB-Feld vom String -> autom. Komprimierung?

Beitrag von Frank Dittrich (Expert / 674 / 0 / 15 ) »
Hallo Enno,

ich würde ein XML-Dokument keinesfalls in einem Feld vom Typ STRING speichern.
XML ist ein Datenstrom, dessen Kodierung (utf-8 / iso-8859-1 / ... ) im Header angegeben wird. Und welche Kodierung gerade verwendet wird, hängt ggf. auch von den darin enthaltenen Zeichen ab.
Das in einem Feld vom Typ STRING abzulegen gibt nur Ärger. Nimm ein Feld vom Typ RAWSTRING, damit kannst du dann einfach im Binärmodus eine Datei erzeugen, die valides XML enthält.
Auch im Debuger gibt es eine Option, sich einen RAWSTING als XML-STream anzeigen zu lassen.
Und wenn Du komprimieren willst, dann nimm intern trotzdem erst mal ein Feld vom Typ XSTRING, das Du dann mit EXPORT ... TO DATA BUFFER ... COMPRESSION ON ins Zielfeld exportierst.

Frank

Folgende Benutzer bedankten sich beim Autor Frank Dittrich für den Beitrag:
ewx


Re: DB-Feld vom String -> autom. Komprimierung?

Beitrag von ewx (Top Expert / 4784 / 294 / 628 ) »
Danke für eure Anmerkungen!
Das hilft mir sehr weiter!
Gruß enno

Re: DB-Feld vom String -> autom. Komprimierung?

Beitrag von kortmand (ForumUser / 2 / 0 / 0 ) »
Würdet ihr das heute in nem Classic R3 noch so machen, wenn ihr bereits wüsstet, dass ihr das nächstes Jahr in ne Hana umziehen müsst?

Seite 1 von 1

Vergleichbare Themen

11
Antw.
24697
Views
Feld bzw. String auslesen
von robin1at » 08.06.2006 08:07 • Verfasst in ABAP® für Anfänger
2
Antw.
4427
Views
Vergleich STRING <> CHAR Feld (Unicode-Problem?)
von ST22 » 04.04.2007 09:17 • Verfasst in ABAP® Core
1
Antw.
4104
Views
autom. TA Erstellung
von Desc » 10.08.2007 15:15 • Verfasst in Material Management & Produktionsplanung
1
Antw.
1125
Views
autom. E-Mailversand mit Foto
von Stahle71 » 16.12.2015 14:56 • Verfasst in ABAP® für Anfänger
2
Antw.
1063
Views
autom. Anmeldung mit Kennwort
von ulli952 » 09.05.2006 10:22 • Verfasst in Basis

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 4 Tagen von Lucyalison 1 / 71
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 111
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 141