簡體   English   中英

運行時類型服務 (RTTS) 是否使用數據庫來獲取數據描述?

[英]Do Runtime Type Services (RTTS) use database to get data descriptions?

describe_by_dataget_ddic_field_listget_componentscl_abap_typedescr和類似的)這樣的方法是從數據庫中檢索數據還是在應用程序服務器上生成?

我查看了這些類,所有一些方法(可能填充緩存)似乎都以非標准方式( METHOD ... BY KERNEL MODULE ... )提取數據,而其他方法則從緩存中提取數據。 我想知道如果它沒有被緩存它是如何被拉出來的。

谷歌也沒有給我任何關於這個話題的具體信息。

一些上下文,以防細節變得相關

我一直在研究為一些通用類實現動態選擇子句生成(以替換 S/4HANA 中基於列的處理的星號,並希望減少 DB 的壓力)。

由於這些類中的大多數將數據檢索到字典類型結構中,我想我可以使用運行時類型服務 (RTTS) 的類型描述來獲取字段列表並根據目標結構動態生成選擇子句。

在大多數情況下,我可以通過實現靜態變量(並且每個會話只處理一次)來解決性能損失(如果有的話),但是我遇到過類似的情況,其中靜態變量不是一個選項(處理是在未知的類型),我不得不放棄這個想法,因為我不確定如果調用這些方法會如何影響峰值性能,假設每個會話 30 次。

編輯(只是一段代碼,以避免進一步混淆導致沒有實質內容的居高臨下的評論):

lo_struct ?= cl_abap_structdescr=>describe_by_data( header ).
ct_components = lo_struct->get_components( ).
"Loop through ct_components appending names to lv_select_clause

lv_select_clause = get_header_fields( is_target_structure = header ).
select single (lv_select_clause)
  from rbkp
  where gjahr = @iv_gjahr
    and belnr = @iv_belnr
  into corresponding fields of @header.

我不能確定最新的 ABAP 版本,但是 ABAP 字典的東西(數據字典的又名“DDIC”)源自數據庫表 DDNTT 和 DDNTF(也稱為“nametab”,其元素稱為“數據庫運行時”對象”)在激活 DDIC 對象(表等,這些表是 DD02L、DD03L,如@icbytes 所說,等等)期間填充。

當它們被查詢時,它們也被傳輸並持久化在每個應用服務器內存中。 此內存稱為名稱表緩沖區 當緩沖區已滿時,最新的數據將替換最舊的數據。

不知道性能,但毫無疑問,與您之后執行的 SELECT 相比,它可以忽略不計。

還有一件事,關於 RTTS,總是使用 GET_* 方法而不是 CREATE_* 方法,因為它們更快(它們的行為略有不同,但通常只有有經驗的開發人員可能需要使用后者)。

如果你願意,你可以添加另一層內存,但我想這樣做不值得(花費更多的開發人員時間 + 消耗更多的內存,而沒有大的性能改進)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM