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 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
XiHongShi20162 天前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
爱吃苹果的日记本2 天前
离散数学第六课
学习·离散数学
AI职业加油站2 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
奇思妙想聪明勤奋的小羊2 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
霍霍的袁2 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
彧azz2 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
我爱cope2 天前
【操作系统 | 计算机硬件:CPU、内存与 I/O 如何支撑操作系统?】
学习·操作系统