Mapping设计优化技术

来源:互联网 发布:淘宝卖家在哪开通花呗 编辑:程序博客网 时间:2024/04/29 14:20

尽管PowerCenter的应用有多种不同的方式,大多数sessions/mappings能够,下面提到的方法和规则能够对你创建mapping有所帮助 对于优化的普遍建议 1.减少transformations的数量,数据流在各个transformation之间总会有一些消耗。 2.考虑增加transformation的共享内存。比如Session的共享内存(share memory)应该在12MB到40MB之间差不多了 3.一次计算,多次使用 避免再三对同一个结果进行运算或者比较,而应该只计算一次表达式,并设置一个True/False的标志。在表达式里可以使用变量(variable port)计算一值,同一个transformation里面该变量能够被多次使用 4.仅仅连通需要的 4、Only connect what is used. 删除transformation之间不必要的连线,尽量减小数据流动,特别是在Source Qualifier里面,这么做同样有利于维护。如果一个transformation需要再一次连接,最好只把那些必须的字段标示为input和output。 在lookup transformation里面,对于那些不需要用到的字段 既不要设置为input也不要为output,这样能够使transformation看起来比较干净整洁,也能够让它自动产生的SQL语句尽可能的小,从而减小整个缓存的开销,也就提高了性能。 5、观察数据类型Watch the data types. PowerCenter引擎可以自动把转为数据类型。有时候一些转化是我们不需要的。当连线两端的数据类型不一致的时候自动转化就会发生。因此从设计mapping的时候就应该考虑这一问题,避免过多的数据转换。 6、设计的可重用性Facilitate reuse. 从一开始就应该计划好可重用的transformation. 使用变量:包括mapping variable和varialbe port. Variable port可以发挥一些特别的用处,他们可以多次重复使用而只要一次赋值,特别是被用于计算一个复杂的表达式,或者需要多次使用一个取自于非连接方式的lookup调用的时候。 使用mapplet以封装多个可重用的transformation 使用mapplet可以最大限度的利用有限的开发人员,并且能够减小实现类似功能时候所犯的错误。 7、只操作需要运算(move)和转换的数据 Only manipulate data that needs to be moved and transformed. 减少非必要的数据不经改变的在mapping里传递,在mapping中尽量早使用Acitve transformation以达到降低数据量的目的 (例如, 把 filters, aggregators尽可能的靠近source). 使用join的时候选择合适的driving/master table. 记录数少的小表更适合做driving/master table 8、Utilize single-pass reads. 重新设计mapping,一个Source Qualifier对应多个目标表。这种办法能够让服务器只读一次源表。如果针对同一个源表设计了多个的Source Qualifier (比如, 一个用于delete一个用于 update/insert), 服务器将从源表多次读取同一批数据。 去掉或者减少针对字段的存储过程,如果你是使用了字段级别的存储过程,PowerCenter将会针对每一行记录都调用一次存储过程,这将极大的影响性能。 Lookup Transformation优化技巧 1.当数据源很大的时候,并且lookup表在50w行以下的时候,设置为cache方式的lookup,这将明显的提升性能10-20个百分点。 2.一些估算认为不要缓存任何超过50w条记录的表,这仅对标准行长不超过1024字节的情况起作用。如果行长大于1024,那么50w行这个数值将不得不依据增加的行长而减小(例如,2048字节的行大约缓存的行数到25w和30w之间) ,这仅仅是个通用的估算方法,分别以缓存和非缓存方式运行session试试看,即使很大的表缓存的方式通常还是比较快 3.当使用Lookup Table Transformaition的时候,匹配条件中首先放置等于操作符=的条件,能够提高lookup的性能 4.当lookup调用次数超过所有lookup table的10%-20%时候才使用缓存的lookup.如果lookup调用次数过少就不需要缓存那些大表,对于比较小表(少于5000行的)超过5到10次lookup调用就可以使用缓存技术了。 5.对于特别小的值域,可以用decode/IIF函数代替Lookup. 6.如果用了缓存的lookup性能不好,可以修改为非连接方式的,非缓存的lookup. 7.对于特别大的lookup table,可以用动态缓存的方式保留一个永久的缓存文件。当第一次运行的时候把整个表缓存到一个永久文件里面去,打开update else insert选项,服务器就不用去数据库把这张表又读取一次了。 8.反复检查复杂的表达式(没搞懂讲什么) 使用repository reporting和依赖性报告(Dependency Reporting)检查mapping。 减少汇总函数的调用。 对于特定类型的Aggregation可以使用Expression Transformation和一个Update Strategy代替Aggregate Transformation. Operations and Expression Optimizing Tips 1.数字操作比字符串快 2.优化字符型的比较(比如,在比较前用trim去掉空格) 3.操作符比函数快(比如,|| vs CONCAT) 4.优化IIF表达式 5.在lookup里面避免使用date类型的条件。用string类型代替。 6.Test expression timing by replacing with constant. 用常量代替什么? 7.使用平板文件 使用服务器上的平板文件快于该服务器上的数据库 定长的文本文件快于装载分隔符的文件,因为分隔符需要花额外的解析成本。如果处理复杂的tansformation,可以考虑先把文件装载到关系型数据库,这样可以 利用filter过滤和也可以自定义的合适的SELECT语句 8.如果不方便从源数据取得已经排序的数据(例如,WebLogs),可以使用Sorter Advanced Extenal Procedure. 9.用Router分离数据流,从而避免使用多个Filter。 10.为了优化汇总的过程,可以在Aggregator之前使用Sorter或者采用hash-auto keys的分区方式。即使数据源不能排序,也可以使用Sorter Transformation,就可以打开Sorted Ports选项。 11.用Normalizer Transformation可以实现行到列 12. Update strategy会把不符合条件的行保存到一个文件中(bad file)。如果这些记录不是必要的,可以在UPDATE Strategy之前就过滤掉 ,因为保留这些记录需要花费额外的成本。这时候在设置Update strategy的参数为discard rejected rows. 13.当使用Joiner Transformation时候,确保Master的数据量相对较小 14.在装载到数据库的过程中,如果必须要用update覆盖的这种方式,可以在target之前用Lookup transformation取得主键,根据主键的update大大快于没有索引的lookup override。 Suggestions for Using Mapplets Mapplet是一种可重用的元素,它意味着一系列transformation的组合。能够让你重用transformation的逻辑,能够包含你所需要的很多transformation。使用Mapplet Desinger创建maaplet. 1.当你打算在多个maaping中应用标准化转换逻辑的时候,你可以创建一个mapplet。举个例子,如果你有几个事实表需要多个维上的键值,你可以做一个包含一系列Lookup Tranformation得到各个维的键值的mapplet。然后你只需要在每个事实表的mapping里面使用这个mapplet,这样远胜于在每一个mapping里面设计同样的lookup逻辑 2.一旦创建了一个mapplet,你可以为了完成需要的转换逻辑,添加,连接,设置里面的transformation。mapplet保存并应用到mapping里面可以起到它所含所有transformation逻辑的作用。当mapping里面包含一个mapplet,会创建一个实例。所有的mapplet实例都来源于原mapplet.因此任何原mapplet改变都会被这些子实例所继承。当服务器执行session时,它会还原整个mapplet,就好像执行其他sssion一样,依照mapplet的设计数据从一个transformation传递给下一个transformation. 3.一个mapplet可以是主动的(active)的也可以是被动的(passive),依赖于mapplet里面的transformation。主动型mapplet至少包含一个主动型的transformation。被动型的mapplet只能全部是被动型的transformation。这个属性可以在调试错误的mapping使用它节省时间 4.以下的transformation还不支持,不能使用在mapplet里面,包括,COBOL source definitions, normalizer, non-reusable sequence generator, pre- or post-session stored procedures, target definitions, and PowerMart 3.5-style lookup functions. 5.当你只打算使用mapplet的一两个transformation的时候, 不要重用mapplet。这时所有的其他计算过的端口和transformation都被浪费了。 6.对于mapplet来说数据来源是来自于以下两者之一 数据源在mapplet里面:用一个或者多个连接到Source Qualifier上的source definition或者ERP Source Qualifier transformation。当你在mapping当中使用 Mapplet的时候,mapplet作为数据源的提供者,并且成为这个mappling的数据流里面的第一个成员。 数据源在mapplet之外:用一个mapplet Input transformation定义mapplet的输入,当你使用mapplet 的时候,数据在mapplet里面如同mapping数据流的一部分一样。 7.Mapplet的数据输出。创建mapplet output prot,每一个Output transformation的字段并且相连接于mpplet的另外transformation都成为mapplet的输出字段

原创粉丝点击