3.4.4 数据存取和缓存
2025年08月10日
3.4.4 数据存取和缓存
尽管大的处理器和多线程处理技术已被广泛采用,但是数据仓库的瓶颈依然主要存在于数据的抽取过程,因为BW往往要进行大量的数据操作,如写入大量数据到数据库中。如果对数据库进行频繁的读取操作,则数据库的整体性能将会有所降低,从而导致数据抽取过程的延长。
示例:数据库的访问次数,语句如下。
上述语句是一个在很多项目或很多系统中都能经常看到的一段代码,实际上这样的代码对系统的性能是一种伤害,即使目前看起来系统运行良好,但是随着系统数据量的逐渐增大,或下一次系统迁移的出现,性能问题最终将会暴露无遗。
更好的方法在3.4.1节中已经举例说明,那就是使用内表的方式一次性地从数据库中将需要的数据读取到缓存中,然后通过访问内表而不是数据库的方式得到需要的数据。
在3.4.1节的示例中使用了语句IF l_t_costcneter[]IS INITIAL,这是因为数据通常会被划分为好多个独立的数据包,每个独立的数据包又是单独执行的,因此不能准确地知道全局变量在执行的时候是否被填充了,所以在执行一个新的数据包的处理时最好先行进行判断,查看是否临时缓存已经被填充了,这样就减少了对数据库的访问次数,从而提高了性能。如果数据包被进行并行处理,则这样的语句就不能带来处理性能上的提升了,因为每次单独处理之前,缓存l_t_costcneter[]都是空的。