Folgende Benutzer bedankten sich beim Autor ewx für den Beitrag:
a-dead-trousers
Das entspricht ja in etwa dem Prinzip des Code Pushdown, das SAP bei HANA propagiert. Und dieses Code Pushdown kann ja m.E. nur dann besser sein wenn mindestens einer der folgenden Punkte erfüllt ist ( vielleicht gibt es ja auch mehr - aber die fallen mir ad hoc ein ), der am Ende eine Nettozeitersparnis bringt weil irgendein Bottleneck umgangen wird.a-dead-trousers hat geschrieben: ↑24.08.2022 15:11Vorteil der manuellen Komprimierung ist sicherlich der verringerte Datentransfer zwischen Applikationsserver und der Datenbank sowie der (initial) kleinere Speicherbedarf auf der Datenbank. Demgegenüber steht der höhere Programmieraufwand zum (de-)komprimieren und die zusätzliche Prozesszeit am Applikationsserver. Zudem könnte es ja sein, dass die Komprimierung auf der Datenbank sogar "effizienter" ist und unterm Strich ein besseres Ergebnis liefert.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
a-dead-trousers
ich sehe das genauso. Ich würde da nur etwas "ausprobieren", wenn ich weiß, dass es nur um einen konkreten Fall geht. Da sollte schon sicher sein, dass sich kein anderer Prozeß oder User an den Daten bedient.ewx hat geschrieben: ↑24.08.2022 15:31ich würde die Komprimierung immer der DB überlassen. Jeder zusätzliche Code birgt Fehlerpotential.
Zudem weißt du hinterher nicht, ob die Daten in einem Feld komprimiert sind oder nicht. Du siehst das erst, wenn du dir den Code der Applikation zum Zugriff auf die Daten anschaust. Das wäre bereits ein Risiko, dass ich nicht eingehen würde.
Folgende Benutzer bedankten sich beim Autor Alpmann für den Beitrag:
a-dead-trousers
Code: Alles auswählen.
REPORT LINE-SIZE 1000.
CLASS lcl_check_zip_db DEFINITION FINAL.
PUBLIC SECTION.
METHODS:
main IMPORTING iv_iterations TYPE i,
create_data IMPORTING iv_lines TYPE i
RETURNING VALUE(rv_data) TYPE string,
save_data IMPORTING iv_zip TYPE abap_bool
iv_data_to_save TYPE string
RETURNING VALUE(rv_compressed_size) TYPE i.
ENDCLASS.
PARAMETERS: iterate TYPE i OBLIGATORY DEFAULT 4.
END-OF-SELECTION.
NEW lcl_check_zip_db( )->main( iterate ).
CLASS lcl_check_zip_db IMPLEMENTATION.
METHOD main.
DATA: lv_lines TYPE i VALUE 1,
lv_data TYPE string,
lv_start TYPE i,
lv_end TYPE i,
lv_runtime_no_compression TYPE i,
lv_runtime_with_compression TYPE i,
lv_compressed_size TYPE i,
lv_diff TYPE i,
lv_ratio TYPE f.
FORMAT COLOR 5 INTENSIFIED OFF.
WRITE:/ 'DB-Type:', sy-dbsys INTENSIFIED ON.
FORMAT COLOR OFF INTENSIFIED ON.
DO iterate TIMES.
* Cleanup DB before each write statement.
DELETE FROM zss_test1 WHERE compressed <> 'Z'. "
COMMIT WORK.
lv_lines = lv_lines * 2.
WRITE:/ 'Lines:', lv_lines COLOR 3.
lv_data = me->create_data( lv_lines ).
WRITE: AT 20 'Datasize:', strlen( lv_data ) COLOR 3.
* Ohne Komprimierung
GET RUN TIME FIELD lv_start.
me->save_data( iv_zip = abap_false iv_data_to_save = lv_data ).
GET RUN TIME FIELD lv_end.
lv_runtime_no_compression = lv_end - lv_start.
WRITE: AT 45 'Runtime no compression in ABAP:', lv_runtime_no_compression COLOR 3.
* Mit Komprimierung
* Cleanup DB before each write statement.
DELETE FROM zss_test1 WHERE compressed <> 'Z'. "
COMMIT WORK.
GET RUN TIME FIELD lv_start.
lv_compressed_size = me->save_data( iv_zip = abap_true iv_data_to_save = lv_data ).
GET RUN TIME FIELD lv_end.
lv_runtime_with_compression = lv_end - lv_start.
WRITE: AT 90 'Runtime with compression in ABAP:', lv_runtime_with_compression COLOR 3,
AT 140 'With compressed size', lv_compressed_size COLOR 3.
lv_diff = lv_runtime_with_compression - lv_runtime_no_compression.
WRITE: AT 175 'Difference', lv_diff COLOR 7.
lv_ratio = lv_runtime_with_compression / lv_runtime_no_compression.
WRITE: AT 200 'Ratio', lv_ratio COLOR 7 EXPONENT 0 DECIMALS 2.
ENDDO.
ENDMETHOD.
METHOD save_data.
DATA: ls_data TYPE zss_test1, " ZSS_TEST1 also name of database
lv_x TYPE xstring.
IF iv_zip = abap_false.
ls_data = VALUE #( compressed = ''
data_s = iv_data_to_save
).
MODIFY zss_test1 FROM @ls_data.
COMMIT WORK.
ELSE.
* Zip first
TRY.
cl_abap_gzip=>compress_text( EXPORTING
text_in = iv_data_to_save " Input Text
IMPORTING
gzip_out = lv_x " Compressed output
gzip_out_len = rv_compressed_size " Output Length
).
CATCH cx_root.
ASSERT 1 = 2.
ENDTRY.
ls_data = VALUE #( compressed = 'X'
data_x = lv_x
).
MODIFY zss_test1 FROM @ls_data.
COMMIT WORK.
ENDIF.
ENDMETHOD.
METHOD create_data.
SELECT *
FROM dd03l
INTO TABLE @DATA(lt_dd03l) UP TO @iv_lines ROWS.
WHILE lines( lt_dd03l ) < iv_lines.
APPEND LINES OF lt_dd03l TO lt_dd03l.
ENDWHILE.
DELETE lt_dd03l FROM iv_lines + 1.
CALL TRANSFORMATION id
SOURCE data = lt_dd03l
RESULT XML rv_data.
ENDMETHOD.
ENDCLASS.
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
ewx • a-dead-trousers
So den großen Unterschied sehe ich eigentlich nicht. Sind halt verschiedene Systeme. Beachte auch, dass die zu übertragende Datenmenge im MSSQL-System etwas größer ist als im HDB-System.a-dead-trousers hat geschrieben: ↑26.08.2022 10:30Die Zeiten von MSSQL sind in deinem Beispiel generell etwas langsamer. Kann das vielleicht an der Hardware oder am Netzwerk liegen? Wie "vergleichbar" sind deine beiden Testsystem in diesen Punkten?
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
a-dead-trousers