当前位置: 首页 > article >正文

Linux——网络(5)

一、sqlite3性能测试

1. 程序效率测试

    时间相关接口:

    int gettimeofday(struct timeval*tv, struct timezone *tz);
    功能:得到从1970年1月1日0时0分0秒到现在的秒数
               精度到微妙
    参数:
               tv:获取到的秒数
     struct timeval {
               time_t      tv_sec;     /* seconds */             秒
        suseconds_t tv_usec;    /* microseconds */     微妙    1s=1000000us
                            };

               tz:关于时区
      struct timezone {
          int tz_minuteswest;     /* minutes west of Greenwich */  格林威治向西的分钟数
                   int tz_dsttime;     /* type of DST correction */         夏令时修正的类型
                                };
    返回值:
                成功:0
                失败:-1       

        可以利用该函数来计算一个程序的运行时间,只需在程序前后调用该函数,并且后来的函数时间减去开始的函数时间就可以。注意单位的转变。

    普通插入
    insert 19660 : time : 32s
    开启事务机制
    insert 19660 : time : 0.155288s
    关闭写同步
    //insert 19660 : time : 0.150166s
    执行准备
    insert 19660 : time : 0.026s

二、提高SQLite数据插入效率

    1. 开启事务机制

        所谓”事务“就是指一组SQL命令,这些命令要么一起执行,要么都不被执行。在SQLite中,每调用一次sqlite3_exec()函数,
        就会隐式地开启了一个事务,如果插入一条数据,就调用该函数一次,事务就会被反复地开启、关闭,会增大IO量。
        如果在插入数据前显式开启事务,插入后再一起提交,则会大大提高IO效率,进而加数据快插入速度。      
        eg:
            开启事务
            BEGIN;
            将事务的修改保存到数据库中
            COMMIT;
        sqlite3_exec(db,"begin;",NULL,NULL,NULL);  
        sqlite3_exec(db,"commit;",NULL,NULL,NULL);  

    2. 关闭写同步

        synchronous Pragma 获取或设置当前磁盘的同步模式,该模式控制积极的 SQLite 如何将数据写入物理存储。
        在SQLite中,数据库配置的参数都由编译指示(pragma)来实现的,而其中synchronous选项有三种可选状态,
        full、normal、off。
        full写入速度最慢,但保证数据是安全的,不受断电、系统崩溃等影响;
        而off可以加速数据库的一些操作,但如果系统崩溃或断电,则数据库可能会损毁。
        关闭写同步
        PRAGMA synchronous = OFF;

    3.执行准备(事先将SQL语句编译好,执行时提高速度)

        SQLite执行SQL语句的时候,有两种方式:
        一种是使用sqlite3_exec(),该函数直接调用包含SQL语句的字符串;
        另一种方法就是“执行准备”(类似于存储过程)操作,即先将SQL语句编译好,然后再一步一步(或一行一行)地执行。
        如果采用前者的话,就算开起了事务,SQLite仍然要对循环中每一句SQL语句进行“词法分析”和“语法分析”,
        这对于同时插入大量数据的操作来说,简直就是浪费时间
        
        1.sqlite3_prepare_v2() 创建sqlite3_stmt语句对象
        2.sqlite3_bind_*()         绑定参数值到sqlite3_stmt
        3.sqlite3_step()            运行sql语句,可以是一次,也可以是循环执行
        4.sqlite3_reset()           重置sqlite3_stmt对象
        5.sqlite3_finalize()        销毁sqlite3_stmt对象
        代替sqlite3_exec()函数
        
        int sqlite3_prepare_v2(
            sqlite3 *db,                    //数据库连接对象
            const char *zSql,           //要编译的 SQL 语句
            int nByte,                       //要编译的 SQL 语句的长度,如果是-1,则自动计算其长度
            sqlite3_stmt **ppStmt,  //编译后的 SQLite3 语句对象
            const char **pzTail        //未编译部分的指针
        );

        功能:

                该函数将 SQL 语句编译成 SQLite 虚拟机指令,并将编译后的 SQLite3 语句对象存储在                  ppStmt 指向的指针中,以备执行。
        如果 pzTail 不是 NULL,则该指针将指向 SQL 语句中未编译部分的起始位置。
        返回值:
                成功,则返回 SQLITE_OK。
                失败,则返回一个错误代码。

        int sqlite3_bind_text(
          sqlite3_stmt*,      // SQLite3 语句对象
          int,                       // 值占位符的索引,从 1 开始
          const char*,        // 文本值的指针
          int,                      // 文本值的长度,如果是-1,则自动计算其长度
          void(*)(void*)     // 当值变成不需要时要调用的析构函数
        );
        功能:将文本值绑定到 SQLite3 语句对象中的值占位符上。
        
        int sqlite3_step(sqlite3_stmt *pStmt);
        功能:重置sqlite3_stmt对象
        参数:
                   pStmt:prepare语句编译出的sql语句实例


        int sqlite3_finalize(sqlite3_stmt *pStmt) 
        功能:销毁sqlite3_stmt对象


http://www.kler.cn/a/291920.html

相关文章:

  • 快排和归并
  • C++builder中的人工智能(27):如何将 GPT-3 API 集成到 C++ 中
  • 《生成式 AI》课程 第3講 CODE TASK 任务3:自定义任务的机器人
  • 职场汇报技巧:选择合适的汇报形式与提供数据依据
  • 【第三课】Rust变量与数据类型(二)
  • 数据结构(初阶4)---循环队列详解
  • 9.3 k8s介绍
  • 【高等代数笔记】(14-17)N阶行列式
  • Spring启动流程
  • 【C-实践】一对一的网络通信(tcp+select)
  • 在Python中,文本查找和替换的常用操作
  • 鸿蒙(API 12 Beta6版)【ArkGraphics 3D场景搭建以及管理】方舟3D图形
  • 如何打造基于Java SpringBoot和Vue的医院门诊智能预约平台?四步实现高效就医流程,整合MySQL数据库,优化用户体验。
  • 【实战篇】Mcu配置
  • 【js】数组去重
  • Day-04-QFile打开文件的两种方式
  • 计算机毕业设计 | SpringBoot+vue问卷调查系统 社会调研平台(附源码)
  • 【个人思考】 Java为什么解释执行时不直接解释源码?
  • 前端基础面试题·第二篇——CSS(其一)
  • 阶段二 - 小程序反编译及调试
  • 哪款宠物空气净化器能更好的清理浮毛?希喂、352、IAM测评分享
  • MATLAB绘图基础4:MATLAB函数
  • WEB服务器-Tomcat
  • PhpStorm中配置调试功能
  • golang学习笔记02——gin框架及基本原理
  • 【生日视频制作】星空木屋霓虹灯爱心形照片AE模板修改文字软件生成器教程特效素材【AE模板】