首页 > 系统相关 >Linux——网络(5)

Linux——网络(5)

时间:2024-09-04 23:20:45浏览次数:10  
标签:语句 int Linux 网络 stmt 编译 SQL sqlite3

一、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对象

标签:语句,int,Linux,网络,stmt,编译,SQL,sqlite3
From: https://blog.csdn.net/qq_63574400/article/details/141906742

相关文章

  • 【Linux】理解Linux中的软链接与硬链接
    文章目录理解Linux中的软链接与硬链接1.什么是硬链接?示例:2.什么是软链接?示例:3.软链接与硬链接的对比4.何时使用软链接与硬链接?理解Linux中的软链接与硬链接在Linux文件系统中,软链接(SymbolicLink)和硬链接(HardLink)是两个非常重要的概念,它们允许多个文件名指......
  • 【Linux】深入理解Linux文件系统中的inode
    文章目录深入理解Linux文件系统中的inode1.什么是inode?2.inode的结构示例:3.inode的工作原理4.inode与文件系统的关系5.inode的实际应用6.总结深入理解Linux文件系统中的inode在Linux文件系统中,inode是一个核心概念,它在文件的管理和操作中起着至关重要的作......
  • 网络编程day01(IP地址、Socket、端口号)
    目录【1】IP地址1》基本概念IP地址 NAT设备(网络地址转换)DHCP服务器(动态主机配置协议)2》网络号/主机号(二级划分) 3》IP地址分类 特殊地址4》子网掩码5》三级划分【2】socket1》socket发展2》socket介绍3》为什么需要socket?4》socket类型【3】端口号 【1】......
  • .NET 网络唤醒
    本文介绍下电脑设备关机的情况下如何通过网络唤醒设备,之前电源S状态 计算机Power电源状态-唐宋元明清2188-博客园(cnblogs.com) 有介绍过远程唤醒设备,后面这俩天了解多了点所以单独加个随笔设备关机的情况下,使用网络唤醒的前提条件:1.被唤醒设备需要支持这WakeOnLine首......
  • Linux内核如何通过内存回收和压缩机制来管理物理内存
    大家好,今天给大家介绍Linux内核如何通过内存回收和压缩机制来管理物理内存,文章末尾附有分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!可进群免费领取。Linux内核通过一系列复杂的内存回收和压缩机制来有效管理物理内存,确保系统能够在不同负载......
  • 嵌入式linux就业前景怎么样?
    嵌入式Linux的就业前景在当前科技快速发展的背景下显得尤为广阔和乐观。以下是对嵌入式Linux就业前景的详细分析:一、行业背景与需求增长技术普及与应用广泛:嵌入式Linux作为一种操作系统,广泛应用于各种嵌入式设备中,如智能手机、智能家居、工业自动化等领域。随着物联网技术的......
  • 海外合规|新加坡网络安全认证计划简介(三)-Cyber Trust
    一、认证简介:     Cyber Trust标志是针对数字化业务运营更为广泛的组织的网络安全认证。该标志针对的是规模较大或数字化程度较高的组织,因为这些组织可能具有更高的风险水平,需要他们投资专业知识和资源来管理和保护其IT基础设施和系统。CyberTrust标志采用基......
  • 网络编程----网络基础ip地址
    一丶IP地址1.基本概念1. IP地址是Internet中主机的标识2. Internet中的主机要与别的机器通信必须具有一个IP地址3. IP地址为32位(IPv4)或者128位(IPv6)        NAT:公网转私网、私网转公网4. IPV4表示形式:常用点分十进制形式,如202.38.64.10,最后都会转换为一......
  • 基于GA遗传优化的离散交通网络双层规划模型设计matlab仿真
    1.程序功能描述基于GA遗传优化的离散交通网络双层规划模型设计.优化输出路段1和路段2的收费情况收敛过程。2.测试软件版本以及运行结果展示MATLAB2022a版本运行   3.核心程序whilegen<MAXGEN;rng(gen)genP1=0.9;P2=1-P1;......
  • 网络编程--python
    网络编程1、介绍(一)、概述网络编程也叫套接字编程,Socket编程,就是用来实现网络互联的不同计算机上运行的程序间可以进行数据交互(二)、三要素IP地址:设备(电脑,手机,IPad,耳机…)在网络中的唯一标识.端口号:程序在设备上的唯一标识.协议:通信(传输)......