gelöst DB-Feld vom String -> autom. Komprimierung?


Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV

Moderatoren: Jan, Steff

gelöst DB-Feld vom String -> autom. Komprimierung?

Beitragvon ewx » 15.09.2014, 16:12

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
ewx
Top Expert
 
Beiträge: 3776
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 310 mal

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

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

Beitragvon a-dead-trousers » 15.09.2014, 17:21

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3089
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

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

Beitragvon a-dead-trousers » 15.09.2014, 17:24

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.07
Basis: 7.40
a-dead-trousers
Top Expert
 
Beiträge: 3089
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

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

Beitragvon ewx » 16.09.2014, 08:09

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
ewx
Top Expert
 
Beiträge: 3776
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 310 mal

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

Beitragvon a-dead-trousers » 16.09.2014, 22:37

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
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.07
Basis: 7.40

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
ewx
a-dead-trousers
Top Expert
 
Beiträge: 3089
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

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

Beitragvon black_adept » 16.09.2014, 23:23

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.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Für diese Nachricht hat black_adept einen Dank bekommen :
ewx
black_adept
Top Expert
 
Beiträge: 3100
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 525 mal
Ich bin: Freiberufler/in

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

Beitragvon Frank Dittrich » 17.09.2014, 07:53

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

Für diese Nachricht hat Frank Dittrich einen Dank bekommen :
ewx
Frank Dittrich
Expert
 
Beiträge: 674
Registriert: 03.12.2002, 15:33
Dank erhalten: 16 mal

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

Beitragvon ewx » 17.09.2014, 12:53

Danke für eure Anmerkungen!
Das hilft mir sehr weiter!
Gruß enno
ewx
Top Expert
 
Beiträge: 3776
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 310 mal

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

Beitragvon kortmand » 10.01.2018, 20:57

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?
kortmand
ForumUser
 
Beiträge: 1
Registriert: 09.01.2018, 14:31
Dank erhalten: 0 mal
Ich bin: Entwickler/in


Zurück zu ABAP® Core

  Aktuelle Beiträge   
Scope items
Gestern von SAP_ENTWICKLER 0 Antw.
Favoriten-Menü in selbst programmierter Werthilfe
Gestern von ralf.wenzel 6 Antw.
gelöst Erweitern Matchcode KREDA/M_KREDA /LFA1)
Gestern von deejey 7 Antw.
BAPI_CHARACT_CHANGE (Änderung Klassifizierung)
vor 2 Tagen von sap_inchen 0 Antw.
Query SQVI - Benutzergruppe wechseln
vor 16 Stunden von wreichelt 7 Antw.

  Ähnliche Beiträge beta
Vergleich STRING <> CHAR Feld (Unicode-Problem?)
04.04.2007, 12:02 von TWP 2 Antw.
autom. Anlegen von Massnahmen bei QM-Meldung
08.11.2005, 10:17 von Andibugger 1 Antw.
Autom. Reorg SOST-Einträge
30.11.2006, 13:30 von alex1 0 Antw.
SAP SolMan autom. Anlage von Konfigurationselementen
16.03.2010, 09:21 von OnkelSAP 0 Antw.
Autom. Gen. und Verschiebung einer Excel-Tab ins SAPOffice
10.05.2004, 17:17 von Gast 3 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder