SQLite的入门级项目学习记录(四)

性能评估和测试

规划项目

**1、框架选择:**前端交互和线程控制用pyside,SQLite作为数据库支持。

**2、预估数据量:**每秒10个数据,每个月约26000000(26M)条。

3、压力测试: 首先用python脚本创建一个数据库,数据库中只有一个表,表中只有一列,共有26M条数据,每个数据的内容是当前系统时间的字符串,str(datetime.now()),这样可以大致模拟一个月的数据量。然后,用脚本操作数据库,增加新的数据条目,测试如果每个月生成数据库文件,是否能满足系统的速度要求(每秒10个数据)。

运行以下的脚本创建数据库文件:

python 复制代码
import sqlite3
from datetime import datetime


def store_data(conn, cursor, data):
    try:
        cursor.execute('BEGIN TRANSACTION')
        cursor.executemany('INSERT INTO measurements (data) VALUES (?)', data)
        conn.commit()
    except Exception as e:
        print(f"An error occurred: {e}")


# 创建数据库连接和游标
db_file = 'createDatas.db'
conn = sqlite3.connect(db_file)
cursor = conn.cursor()

# 创建表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS measurements (
        data TEXT NOT NULL
    )
''')

conn.commit()

# 存储数据
j = 0
x = 0
data = []
while x < 26000000:
    while j < 10000:
        data.append((str(datetime.now()),))
        j += 1
    store_data(conn, cursor, data)
    cursor.execute('SELECT COUNT(*) FROM measurements')
    x = cursor.fetchone()[0]

    j = 0
    data = []
    print(x)
# 关闭连接和游标
cursor.close()
conn.close()

压力测试:

python 复制代码
import sqlite3
from datetime import datetime
from time import time


def store_data(conn, cursor, data):
    try:
        cursor.execute('BEGIN TRANSACTION')
        cursor.executemany('INSERT INTO measurements (data) VALUES (?)', data)
        conn.commit()
    except Exception as e:
        print(f"An error occurred: {e}")


# 创建数据库连接和游标
db_file = 'createDatas.db'
conn = sqlite3.connect(db_file)
cursor = conn.cursor()
x = 0
j = 0
# 创建一个100个元素的数据组
data = []
while j < 100:
    data.append((str(datetime.now()),))
    j += 1
while x < 100:
    time1 = time()
    store_data(conn, cursor, data)
    time2 = time()
    print(time2 - time1)
    x += 1
# 关闭连接和游标
cursor.close()
conn.close()

运行结果:

python 复制代码
0.03693747520446777
0.036476850509643555
0.03375363349914551
0.03529238700866699
0.03457474708557129
0.03527641296386719
0.03363299369812012
0.03394293785095215
0.03500247001647949
0.03366684913635254
0.03717041015625
0.03408193588256836
0.035376787185668945
0.13425254821777344
0.03524899482727051
0.034047603607177734

看得出,即使是拥有2600W条数据的表中增加100条数据,耗时也仅为30ms左右。

然后,我将脚本修改一下,把每次写入的条数改为10和1000,耗时变化不大。

再将表的起始条数改为100条测试,耗时变化也不大。

这也就可以得出结论,本项目,每个月量的数据库,SQLite是完全可以满足写入速度要求的(即使每秒写一次也有足够的裕量)。

相关推荐
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码2 天前
嵌入式学习路线
学习
毛小茛2 天前
计算机系统概论——校验码
学习
babe小鑫2 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms2 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下2 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。2 天前
2026.2.25监控学习
学习
im_AMBER2 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J2 天前
从“Hello World“ 开始 C++
c语言·c++·学习