zoukankan      html  css  js  c++  java
  • 记一次在获取mysql数据库结果集时的优化

    【背景】

            该项目是用C++实现的一个处于数据库和应用服务之间的分库分表路由服务的组件。

    • 层次结构

    • 主要功能

    1)与数据库维持长连接

    2)根据不同分库分表规则选择sql路由,为上游提供透明的sql查询服务and定制化接口

    3)sql执行的检查,防sql注入、防全表扫描等

    • 问题

            在对服务性能进行评估时发现,当压力不断增加时,sql执行耗时并没有太大变化,反而是获取sql执行结果集and将结果集转json格式耗时越来越大。

    【猜想】

    • 获取mysql结果集部分时使用的api效率问题,从getXXX(column_name)换成getXXX(index)

    官方文档介绍通过属性名访问更清晰,但通过index访问效率更高。

     

    • 使用的jsoncpp库实现的转json效率太低

    解析和生成JSON的耗时(越低越好):(图片来自于Milo Yip的知乎回答:https://www.zhihu.com/question/23654513)

    可以看到jsoncpp耗时为171ms,而rapidjson耗时为13ms,只有不到jsoncpp的1/10

    【压测】

    环境:

    并发128连接

    结果:

      case1:优化前 case2:采用index方式获取结果值 case3:优化取结果逻辑 case4:用rapidjson替换jsoncpp
    总耗时(ms) 164 102 49.3 2.8
    获取结果集耗时(ms) 73 27 8.1 1.6
    转json耗时(ms) 65 47 40.7 0.8

    【效果】

    三个接口a、b、c在优化后的效果对比,如下:

     

    【结论】

            rapidjson相对于jsoncpp,单纯从转换的性能上来说,确实提升了很多。

  • 相关阅读:
    Infopath Notify 弹出提示信息
    window.showModalDialog 返回值
    【转】获得正文内容中的所有img标签的图片路径
    Json Datable Convert
    Sharepoint 列表 附件 小功能
    Surgey 权限更改
    SQL 触发器用于IP记录转换
    Caml语句 查询分配给当前用户及当前组
    jquery 1.3.2 auto referenced when new web application in VSTS2010(DEV10)
    TFS diff/merge configuration
  • 原文地址:https://www.cnblogs.com/taoxinrui/p/6398969.html
Copyright © 2011-2022 走看看