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.mzph.cn/web/52027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是视频缓存服务器,它有哪些作用?

视频缓存服务器通常拥有大容量的存储空间和高速的读写能力,它通过缓存(即临时存储)用户经常访问的视频内容,来优化内容的分发过程。这种服务器通常部署在网络中的关键位置,如靠近用户接入点的位置,以降低用户访问视频内容时的网络…

维信小程序禁止截屏/录屏

一、维信小程序禁止截屏/录屏 //录屏截屏,禁用wx.setVisualEffectOnCapture({visualEffect:hidden});wx.setVisualEffectOnCapture(Object object) 测试安卓手机: 用户截屏,被禁用 用户录屏,录制的是空白内容/黑色内容的视频。 二、微信小…

鸿蒙系统为什么能安装安卓的APP

鸿蒙系统能够安装安卓的APP,主要得益于其设计理念和技术实现上的几个关键点: 一、设计理念 鸿蒙系统的设计初衷并非完全取代安卓系统,而是与其共存,并建立一个更加广泛的软件生态圈。这一理念体现在鸿蒙系统对安卓应用的兼容性上…

浙大数据结构:01-复杂度2 Maximum Subsequence Sum

数据结构MOOC PTA习题 01-复杂度2 Maximum Subsequence Sum #include <iostream> using namespace std; const int M 100005; int a[M]; int main() {int k;cin >> k;int f 1;for (int i 0; i < k; i){cin >> a[i];if (a[i] > 0)//如果出现大于0则…

【HuggingFace Transformers】OpenAIGPTModel源码解析

OpenAIGPTModel源码解析 1. GPT 介绍2. OpenAIGPTModel类 源码解析 说到ChatGPT&#xff0c;大家可能都使用过吧。2022年&#xff0c;ChatGPT的推出引发了广泛的关注和讨论。这款对话生成模型不仅具备了强大的语言理解和生成能力&#xff0c;还能进行非常自然的对话&#xff0c…

1.初识ChatGPT:AI聊天机器人的革命(1/10)

引言 在当今的数字化世界中&#xff0c;人工智能&#xff08;AI&#xff09;正以其独特的方式重塑我们的生活和工作。其中&#xff0c;AI聊天机器人作为人机交互的前沿技术&#xff0c;已经成为企业与客户沟通、提供个性化服务的重要工具。这些机器人通过模拟人类的对话方式&a…

二、MMRotate旋转框目标检测训练DOTA数据集(模型推理与部署,保存推理结果为xml文件并构建镜像)

在上一篇文章中介绍了MMRotate的概述、安装和训练Dota数据集全流程,由于文章篇幅限制还剩下一部分模型的推理和部署环节没有写,为避免后续对这部分工作的遗忘,决定还是补充上这部分的笔记,仅作记录,如有不足之处还请指出! 一、模型推理测试 1.1单张图片推理测试 可以首…

DataSet和DataTable的关系

C#中的DataTable 在C#中&#xff0c;DataTable 是 System.Data 命名空间下的一个类&#xff0c;它是 DataSet 的一个组件&#xff0c;用于存储表格形式的数据。DataTable 可以独立于数据库使用&#xff0c;也可以与数据库表相关联&#xff0c;用于数据的读取、更新、插入和删除…

LeetCode 热题100-17 缺失的第一个正数

缺失的第一个正数 给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,0] 输出&#xff1a;3 解释&#xff1a;范围 [1,…

OpenCV绘图函数(13)绘制多边形函数函数polylines()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 画几条多边形曲线 函数原型 void cv::polylines (InputOutputArray img,InputArrayOfArrays pts,bool isClosed,const Scalar & color…

【高等代数笔记】(18)N阶行列式

2. N阶行列式 2.12 行列式按k行&#xff08;列&#xff09;展开 【拉普拉斯定理】 n n n阶矩阵 A ( a i j ) \boldsymbol{A}(a_{ij}) A(aij​)&#xff0c;取定第 i 1 , i 2 , . . . , i k i_{1},i_{2},...,i_{k} i1​,i2​,...,ik​行&#xff08;其中 i 1 < i 2 < .…

将x减到零的最小操作数问题

欢迎跳转我的主页&#xff1a;羑悻的小杀马特-CSDN博客 目录 一题目简述&#xff1a; 二题目思路&#xff1a; 三解答代码&#xff1a; 一题目简述&#xff1a; leetcode题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二题目思路&#xff1a; 首先这道题…

STM32(F103ZET6)第十九课:FreeRtos的移植和使用

目录 需求一、FreeRtos简介二、移植FreeRtos1.复制代码2.内存空间分配和内核相关接口3.FreeRtosConfig4.添加到工程中三、任务块操作1.任务四种状态2.创建任务过程 需求 1.将FreeRtos&#xff08;嵌入式实时操作系统&#xff09;移植到STM32中。 2.在该系统中实现任务的创建、…

git 更改分支名称

1. 本地分支重命名&#xff08;还未推送到远程&#xff09; 1、修改当前分支名称 git branch -m 新分支名称2、修改其他分支名称 git branch -m 旧分支名称 新分支名称2. 远程分支重命名&#xff08;已推送远程&#xff09; 1&#xff09;重新命名远程分支对应的本地分支 …

86、pod部署策略

一、集群的调度 集群的调度&#xff1a; 怎么把pod部署到节点的方法。 1.1、调度的过程&#xff1a; scheduler是集群的调度器&#xff0c;主要任务就是把pod部署到节点上。 1.2、自动调度&#xff1a; 1、公平&#xff0c;保证每个可用的节点都可以部署pod 2、资源的高…

【生日视频制作】黑板写文字美女跳舞2版AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程黑板写文字美女跳舞2版AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板替换工程 怎么如何做的【生日视频制作】黑板写文字美女跳舞2版AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件 下载AE模板 把AE模板导…

有向无环图的关联矩阵及其矩阵乘积的含义

有向无环图的关联矩阵及其矩阵乘积的含义 引言关联矩阵的定义矩阵乘积 B B T BB^T BBT的含义伪代码示例C代码示例结论引言 在计算机科学和数学中,有向无环图(Directed Acyclic Graph, DAG)是一种常见的数据结构,广泛应用于各种算法中,如拓扑排序、动态规划等。在有向无环…

10、Django Admin修改标题

admin from django.contrib import admin from .models import Category, Origin, Hero, Villain # 添加以下代码 admin.site.site_header "系统管理" admin.site.site_title "管理员界面" admin.site.index_title "欢迎来到这里&#xff…

网络模型及协议介绍

一.OSI七层模型 OSI Open System Interconnect 开放系统互连模型 以前不同厂家所生产的网络设备的标准是不同的&#xff0c;所以为了统一生产规范就制定了OSI这个生产模型。 作用&#xff1a;降低网络进行数据通信复杂度 这个模型的作用第一降低数据通信的复杂度&#xff…

QT cmake vscode 构建流程

采用基于QT creater方式实现&#xff1a; 1. Qt Creator——创建项目——Qt Widgets Application——CMake——Desktop Qt 6.8.0 MSVC2022 64bit——接下来全默认 关键点是选择CMake和构建套件这里用windows的MSVC。 2. 用vscode打开&#xff0c;即可。 可以配置一个调试任务…