聊聊非用户内存的数据共享
1、用户内存
之前介绍了什么是ABAP内存和SAP内存,具体内容可浏览《聊聊SAP内存和ABAP内存》。
对于ABAP和SAP内存,都是在User Session中进行数据的分享传递,但不能实现不同用户间的数据共享

2、非用户内存
对于不同用户间数据共享,则需要使用下列方法
2.1、SHARED MEMORY / BUFFER
两者的区别:
SHARED MEMORY是操作系统提供的一种进程间通信机制。它分配一块物理内存区域,允许多个SAP工作进程访问同一块内存,为SAP实例内的所有工作进程提供共享数据的底层存储空间。
SHARED BUFFER是SAP内核在SHARED MEMORY之上构建的结构化缓存机制,显著提高性能。通过将频繁访问的数据(如ABAP程序、数据库表内容、屏幕定义、日历数据等)缓存在所有工作进程都能快速访问的内存中,避免重复的磁盘读取或重复计算。
SHARED BUFFER是SHARED MEMORY的一部分。如果把SHARED MEMORY比作是操作系统提供的大仓库,SHARED BUFFER就是这个大仓库里SAP规划和管理的多个专用储藏室(缓存区域)。
不过在用法上,两者没有太大区别
SHARED MEMORY
"--------------------@斌将军-------------------- DATA:lt_makt TYPE TABLE OF makt, ls_makt TYPE makt. ls_makt-matnr = '111'. APPEND ls_makt TO lt_makt. EXPORT lt_makt TO SHARED MEMORY indx(aa) ID 'ZMAKT'."抛 IMPORT lt_makt FROM SHARED MEMORY indx(aa) ID 'ZMAKT'."接 DELETE FROM SHARED MEMORY indx(aa) ID 'ZMAKT'."删 "--------------------@斌将军--------------------
SHARED BUFFER
"--------------------@斌将军-------------------- EXPORT lt_makt TO SHARED BUFFER indx(aa) ID 'ZMAKT'. IMPORT lt_makt FROM SHARED BUFFER indx(aa) ID 'ZMAKT'. DELETE FROM SHARED BUFFER indx(aa) ID 'ZMAKT'. "--------------------@斌将军--------------------
甚至还能实现不同客户端之间的传输
比如A程序在300客户端抛数据
"--------------------@斌将军-------------------- DATA:lv_client TYPE mandt VALUE '300'. EXPORT lt_makt TO SHARED MEMORY indx(aa) CLIENT lv_client ID 'ZMAKT'. READ TABLE lt_makt INTO ls_makt INDEX 1. WRITE:'抛'.WRITE:ls_makt-matnr. "--------------------@斌将军--------------------
B程序在500客户端接数据
"--------------------@斌将军-------------------- DATA:lv_client TYPE mandt VALUE '300'. IMPORT lt_makt FROM SHARED MEMORY indx(aa) CLIENT lv_client ID 'ZMAKT'. READ TABLE lt_makt INTO ls_makt INDEX 1. WRITE:'接'.WRITE:ls_makt-matnr. "--------------------@斌将军--------------------
效果如下

2.2、DATABASE
相对于SHARED MEMORY和 SHARED BUFFER共享数据到内存而言,DATABASE是直接将数据持久化到数据库表中。
从层级上来讲:SHARED MEMORY在操作系统层;SHARED BUFFER在SAP应用层;DATABASE在存储层
从性能上来讲:SHARED BUFFER > SHARED MEMORY > DATABASE
使用方法:
"--------------------@斌将军-------------------- DATA:ls_indx TYPE indx. ls_indx-aedat = sy-datum."日期 ls_indx-usera = sy-uname."用户 ls_indx-pgmid = sy-repid."程序名 EXPORT lt_makt TO DATABASE indx(bs) ID 'ZMAKT' FROM ls_indx."抛 IMPORT lt_makt FROM DATABASE indx(bs) ID 'ZMAKT'."接 DELETE FROM DATABASE indx(bs) ID 'ZMAKT'."清空 "--------------------@斌将军--------------------
此处也使用了数据库表indx,(bs)代表区域,ID代表定义关键字

与SHARED BUFFER和SHARED MEMORY 不同的是,DATABASE会在INDX表中新增一条记录,而后者虽然也用到了INDX表,但只是使用了INDX的结构,并不真正存值。

当然,DATABASE也可以跨客户端使用
3、总结
结合这两篇文章可以知道,ABAP内存能共享在同一用户的同一窗口,SAP内存能共享在同一用户不同窗口,SHARED BUFFER / MEMORY和DATABASE能共享在不同用户,不同客户端。
以上就是关于非用户内存进行数据共享的介绍,希望对你有所帮助
定期更文,欢迎关注


浙公网安备 33010602011771号