有没有办法使用 SAP-RFC 将大结果“分块”成几个较小的部分?
根据这些链接,您似乎需要自己实现分块:-(
我想避免这种情况,我希望有一种方法可以让 SAP-RFC 库进行分块。
用例:
结果是 100k 行。我想获取 1k 行,直到收到所有行。
我想这无关紧要,但我将在我的代码中使用PyRFC。
有没有办法使用 SAP-RFC 将大结果“分块”成几个较小的部分?
根据这些链接,您似乎需要自己实现分块:-(
我想避免这种情况,我希望有一种方法可以让 SAP-RFC 库进行分块。
用例:
结果是 100k 行。我想获取 1k 行,直到收到所有行。
我想这无关紧要,但我将在我的代码中使用PyRFC。
根据这个问题 #60 sap-rfc can't do chunking。您需要进行几个较小的 RFC 调用。
这很可悲。我猜在专有的封闭源代码中有数百个肮脏的本土分块解决方案,它们都一遍又一遍地解决相同的问题。
RFC 库在这里不能做太多事情:它只是发出请求,然后接收来自 R/3 系统的响应。因此,如果 R/3 系统返回 100k 行,则库将接收这 100k 行,如果 R/3 系统返回这些行的一个块,则库将只接收这个块......
为了进行分块(或“分页”),双方(外部程序和被调用的 ABAP 代码)必须以某种方式进行合作。这是通用库无法做到的。
RFC 基本上遵循“请求-响应”模式,如果您想要较小的响应数据,则客户端必须发出多个请求,而服务器必须为每个请求返回“整体数据”的一部分。
编辑:我现在也阅读了您的问题#60,如果您主要关心的是性能,那么也许您最好直接使用 C/C++ NW RFC 库而不是 Python 包装器?
我不熟悉 Python 的工作原理,但如果它与 Java/JNI 有点相似,那么我希望您在内存中总共有两个所有数据的副本:首先 RFC 库从线路接收数据,然后将其存储在 C 堆上,然后一些 C <-> Python 互操作层需要将该数据复制到 Python 虚拟机?!如果是这种情况,您已经可以通过用 C/C++ 编写提取程序来节省 50% 的内存消耗。