【问题标题】:Storing a Deep/Nested Structure存储深层/嵌套结构
【发布时间】:2014-06-19 09:09:50
【问题描述】:

SAP 相当明智地禁止您在数据库表中包含深层结构。然而,对于一个新项目,我有一个深度嵌套的结构,我想持久存储。这个结构包括另外十几个结构,每个结构都可能进一步嵌套。这种结构基本上是给定业务合作伙伴的数十个标准 SAP 表中包含的数据的快照。我目前没有预见到构建这个结构、用数据填充它并以 XML 的方式发送它的问题。

但是,我不知道应该如何将整个交易保存到数据库中。由于我不能将这种嵌套的混乱转储到单个表中,因此我必须基本上重新创建 Z 表中的每个基础表关系。由于这看起来工作量太大,除了繁琐且容易出错之外,我正在寻找一种替代解决方案来存储这些数据。

我在其他编程语言中遇到过这种情况,我只需将整个对象的数据转储存储为 XML、平面文件或任何格式 du jour。然后可以在查询表并重建对象并将其加载到内存时加载此数据转储。这是 ABAP 开发的有效方法吗?是否有用于(反)构造通用嵌套结构的现有类或函数模块,还是我必须从头开始编写自己的逻辑?或者有没有我想念的替代品?

【问题讨论】:

  • ABAP 确实支持将表序列化为 XML XStrings。您需要做的就是将生成的 XStrings 存储在一个表中(因为 XStrings 本身是扁平的)。

标签: xml abap opensql lob


【解决方案1】:

这是一个常见的要求,有几种方法可以实现。最常用的方法有这些:

  • 您可以将整个数据结构转换为 XML,或者更确切地说是asXML,它是以 XML 格式序列化的 ABAP 数据。这相当简单,只需将CALL TRANSFORMATION 与名为id 的内置转换一起使用。这样做的缺点是 XML 可能非常冗长 - 这很容易将您的数据集炸毁 2-4 倍 (YMMV)。

  • 您可以使用所谓的data cluster。这以二进制格式存储数据,也可以通过内部未记录的 ABAP 压缩算法进行压缩。这是一个关于执行时间和存储大小的有效过程,但它的缺点是如果不使用 ABAP 语句进行解压缩,则无法读取数据。虽然您总是可以转储一些 XML 文件以供进一步调查,但数据集群的内部存储格式几乎难以辨认。

【讨论】: