zoukankan      html  css  js  c++  java
  • 系统设计时关于性能问题处理的几点心得

    【将复杂的运算分解到其它过程】

    此种思想将整个系统的操作看成一个整体,类似于负载均衡。在系统中常见的一个问题是,数据量比较大,对数据的查询统计变得很复杂很缓慢。对于这种问题应该在设计时就进行考虑,建立表的冗余字段或者汇总表存储一些汇总信息,在录入或更新数据时计算冗余字段或汇总表的值。这样将复杂的运算时间分解到了数据录入修改的时间。而一般的录入/修改都是单笔的操作,此时的一点点延时(可能很少很少)对用户的体验是没有什么影响的,而进行查询统计时变成了直接查询表,也会变得很快。

    【将多次查询简化为一次查询】

    将多次查询简化为一次查询,可以减少数据库连接的性能消耗。对于此种思路,我认为可以有三种实现:

    1. 通过视图,将多次查询的结果直接通过一条语句计算查询

        此种方式可能会用到sum,group by等语句,但使用不好,往往是性能变的更差,不建议使用。对于视图最好只是简单的表的关联,不涉及数据的运算。

    2. 使用存储过程或函数

        接收参数,将运算封装在存储过程或函数中,理论上,参数越精确,操作的数据越少,速度也越快。但问题是1.不易维护;2.要能够灵活的查询程序就比较复杂。

    3. 在代码中进行查询或计算

       由于要在代码中进行计算,所以可能很多性能的消耗是在多次连接数据库查询数据上。设计代码结构时需要将多次取数改成有限次的取数,在代码中对数据进行整理,同时对于重复的数据需要使用缓存。

    【通过用户体验减少使用者的影响】

    曾经有一个很慢的查询,用户点击查询按钮后,等了10秒钟,数据才出来,这个时间内屏幕没有任何变化,从心理上感觉,似乎等待了很长时间;

    后来添加了一个滚动的进度条,有个进度条,是可以知道系统并没有死掉仍在运行,但滚动条滚动的速度太快,用户感觉过了很长很长时间数据才出来;

    最后修改了一下滚动条动画,将滚动速度调慢,10秒种的时间滚动条只滚动了两次,数据处理的时间没有变化,但心理上感觉似乎比以前快了很多。

    【使用缓存技术】

    对于经常操作的数据库数据,需要添加查询缓存。可在查询时将查询结果放入缓存,在增删改数据时清空缓存。在ibatis、hibernate等orm框架中都支持缓存,另外OSCache这样的缓存框架也提供了更多的功能。

    【SQL优化】

    我的感觉,如果有好的SQL编写形成,一般是用不到SQL优化的。但有时候一个不好的SQL,优化后可能会得到性能质的提升。

    【设计产品操作方式】

    在产品设计时也要考虑性能的问题,通过分页、将数据分步骤展示等方式,防止将大量的数据直接展现

  • 相关阅读:
    基于UI Automation的自动化测试框架(四)
    如何处理重命名DataSet对象的列名所导致的System.ArgumentException错误
    C# 窗体位置 Show和ShowDialog
    某列不属于表,但是列存在
    c#关于声音和flash的问题
    如何将MAC地址和IP地址绑定在一起?
    C#中经常用来获得路径方法和属性
    [转载]解决多线程中执行CreateHandle()时无法调用值Dispose()
    关于cmd命令收录
    C#中的正则表达式
  • 原文地址:https://www.cnblogs.com/lizhaojun-ops/p/7699425.html
Copyright © 2011-2022 走看看