版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1439871
Tuesday, February 16, 2016 11:58 AM
这是我的同事Ben发现的,我做ABAP开发这么多年都没留意过,惭愧。
首先我们回顾下大学计算机专业课数据结构中讲的,排序的稳定性。假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
这两天在做change document优化的时候遇到一个ABAP SORT不稳定性带来的问题:
测试发现优化前和优化后,取到的100多条log里面有一条不一样:
优化前:
优化后:
Debug发现优化前的代码里面对每一个opportunity的log,有一个SORT之后再取前26条的逻辑:
问题就出在这个SORT上,发现ABAP里面的SORT是非稳定排序:
同样 SORT KEY的三条数据在排序前的自然顺序:
SORT之后这三条的顺序:
刚好这条opportunity对应的log有27条,这三条log在排序之后在最后,所以ESTAT这条被截掉了,如果是稳定排序的话这条不应该被截掉。
要解决这个问题可以让优化前和优化后的代码都用SORT STABLE,但是SORT STABLE比SORT慢, 而且对于change log来说这个问题造成的不一致是可以接受的,所以暂时不改。