使用oData将文本文件存储到DB-table

时间:2016-04-20 14:51:35

标签: string compression odata sapui5 abap

我需要在后端表中将一个非常大的字符串存储在一个字符串类型的字段下。

我存储的字符串超过1000万(1千万)字符长度。从后端存储和检索需要很长时间。

我尝试压缩算法,但是无法压缩这么大的字符串。 那么处理这种情况和提高性能的最佳方法是什么。

使用的技术:

  • 前端 - SAP UI5,
  • gateway - oData,
  • 后端 - SAP ABAP。

尝试压缩方法:

https://github.com/tcorral/JSONC
https://github.com/floydpink/lzwCompress.js

上述压缩方法无法解决我的问题。

1 个答案:

答案 0 :(得分:0)

嗯,Marc是正确的,说明转移XLSX肯定比JSON更好/更快。
ABAP JSON工具不是那么丰富,但对于大多数操作来说都是足够的。可以通过内部表和转换完成更多特殊任务。因此,强烈建议您在后端服务器上执行操作(XLSX>> JSON)

后端DB表有什么问题,我支持Chris N将10M字符串插入字符串字段是一个可想而知的最糟糕的想法。在透明表中存储大文件的推荐方法是使用XSTRING type。这是一种用于ABAP的BLOB,它在处理二进制数据方面要快得多。

我已经对我的样本1400万个文件进行了一些SAT性能测试,这就是我得到的。

INSERT 进入XSTRING字段:

enter image description here

INSERT 进入STRING字段:

enter image description here

您可以注意到DB操作的净时间差别很大,不支持STRING。

您的上传代码如下所示:

DATA: len type i,
      lt_content TYPE standard table of tdline,
      ws_store_tab TYPE zstore_tab.

"Upload the file to Internal Table
 call function 'GUI_UPLOAD'
  exporting
   filename                = '/TEMP/FILE.XLSX'
   filetype                = 'BIN'
 importing
   filelength              = len
 tables
   data_tab                = lt_content
.

IF sy-subrc <> 0.
 message 'Unable to upload file' type 'E'.
ENDIF.

"Convert binary itab to xstring
call function 'SCMS_BINARY_TO_XSTRING'
 exporting
  input_length      = len
  FIRST_LINE         = 0
  LAST_LINE          = 0
  importing
  buffer             = zstore_tab-file        "should be of type XSTRING!
 TABLES
  binary_tab        = gt_content
 exceptions
 failed             = 1
 others             = 2
        .
IF sy-subrc <> 0.
 MESSAGE 'Unable to convert binary to xstring' type 'E'.
ENDIF.

INSERT zstore_tab FROM ws_store.

IF sy-subrc IS INITIAL.
 MESSAGE 'Successfully uploaded' type 'S'.
ELSE.
 MESSAGE 'Failed to upload' type 'E'.
ENDIF.

对于已经存在的XLSX多个AS ABAP包装器的解析和操作,示例包括hereherehere

这一切都与后端端优化有关。前端优化 欢迎来自UI5专家(我不属于他们),但SAP的一般建议是将所有大规模操作移至应用程序服务器。