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

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

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

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

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

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

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

    2. 使用存储过程或函数

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

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

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

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

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

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

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

    【使用缓存技术】

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

    【SQL优化】

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

    【设计产品操作方式】

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

  • 相关阅读:
    【转+补充】在OpenCV for Android 2.4.5中使用SURF(nonfree module)
    Delphi StarOffice Framework Beta 1.0 发布
    Angular ngIf相关问题
    angularjs文档下载
    公众号微信支付开发
    公众号第三方平台开发 教程六 代公众号使用JS SDK说明
    公众号第三方平台开发 教程五 代公众号处理消息和事件
    公众号第三方平台开发 教程四 代公众号发起网页授权说明
    公众号第三方平台开发 教程三 微信公众号授权第三方平台
    公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取
  • 原文地址:https://www.cnblogs.com/lizhaojun-ops/p/7699425.html
Copyright © 2011-2022 走看看