• ecell性能优化取数函数参数(条件)顺序对性能的影响


    难度等级3

    取数函数定义时,将使用同一个数据源的所有函数的条件数据项和条件顺序一致,并且返回值合并方式必须一致、排序方式必须一致,这样可以提高明细数据项的计算速度

    如:函数a的条件是 身份证号和产品编号,函数b是 产品编号和身份证号,这样它们将得不到优化
    如果调整函数b的条件顺序也为:身份证号和产品编号,那么他们会被系统批处理


    下面会详细解释为什么会这样。不想看解释的,只要执行这条指导思想就可以了

    先介绍4个概念
    1.cell函数的执行机制,cell函数(不论是取数函数还是内置函数)都只有在参数所引用的单元格的值改变时,函数才触发。
    2.当表单中的一个取数函数需要执行时,会先在web缓存中搜索是否已经缓存了计算结果。如果没有就需要请求服务器做计算,这样速度就比从web缓存拿要慢的多了。
    3.取数函数分组,为了提高本地缓存命中率,我们设计了一个执行策略--当一个取数函数请求后台执行时,如果有与它参数一致的其他函数,那么这些函数将一同执行,并将结果缓存在web端。
    4.取数函数分组策略:使用同一个数据源,并且条件数据项和条件顺序一致,并且返回值合并方式必须一致、排序方式必须一致

    在实际环境中,在很短的时间内会触发大量取数函数的情况只有一个----填充明细时,明细中的分组越少,执行速度会比分组多时的要快

    下面给出几句sql,用于查看取数函数分组与取数函数定义之间的关系
    取数函数的个数:SELECT * FROM UserFunctions where formid = (select id from formlist where formname = 'xxx')
    取数函数分组情况(如果分组的函数只有一个,将不会保存到fungroups表中):SELECT * FROM FunGroups where formid = (select id from formlist where formname = 'xxx') order by formid


    取数函数分组的数量等于下面两个sql的结果相加
    SELECT count(*) FROM UserFunctions where formid = (select id from formlist where formname = 'xxx')and id not in (SELECT id FROM FunGroups where formid = (select id from formlist where formname = 'LINK'))
    SELECT count(distinct groupname) FROM FunGroups where formid = (select id from formlist where formname = 'xxx')

  • 相关阅读:
    幂等性
    merge效率
    云化
    流量、带宽、速度、码率
    缓存一致性与可见性
    kernel32.dll 这个系统模块
    C#ModBus Tcp
    Spring MVC-集成(Integration)-集成LOG4J示例(转载实践)
    Spring MVC-集成(Integration)-生成PDF示例(转载实践)
    Spring MVC-集成(Integration)-生成Excel示例(转载实践)
  • 原文地址:https://www.cnblogs.com/martian6125/p/9631170.html
Copyright © 2020-2023  润新知