您当前的位置:首页 > 计算机 > 编程开发 > Python

Python高并发应用场景下四种写入SQLite数据库的速度比较

时间:01-09来源:作者:点击数:

问题描述:

从技术上讲,使用连接对象或游标对象的executemany()方法一次性把多条记录写入SQLite数据库后提交事务,减少数据库文件打开和关闭以及事务提交次数,从而提高整体速度,应优先考虑使用这种方式。

但在某些应用场景下,确实需要写入一条数据之后立即提交事务进行持久化。如果是多用户并发场景,为了避免冲突,应该使用锁来控制用户轮流写入,这样的话并发变为串行就必然会影响整体速度。

为了解决这个问题,可以尝试通过其他技术减少数据库文件打开和关闭的次数,或者利用SQLite数据库自身的事务管理技术来提高速度。那么具体性能提升效果如何呢,下面的代码对四种方式进行了比较,分别为:1)传统技术,多线程通过竞争锁轮流进入临界区,然后连接数据库、写入数据、提交事务并断开数据库连接;2)多线程通过竞争锁轮流进入临界区,然后连接数据库、写入数据、断开数据库连接,利用SQLite数据库自身提供的事务管理机制,用户不显式提交事务;3)多线程共用一个连接对象,每个线程竞争进入临界区然后写入数据并提交事务整个程序中只打开和连接一次数据库,所有线程全部使用完成之后再断开数据库连接,多个线程写入数据时该连接始终保持有效;4)多线程共用一个连接对象,每个线程竞争进入临界区然后写入数据但不显式提交事务,利用SQLite数据库自身的事务管理机制,整个程序中只连接一次数据库,全部使用完成之后再断开数据库连接,多个线程写入数据时该连接始终保持有效。

演示代码(下载源码):

7f6df73ae56e92703fb745a30e21ac68.png

几次运行结果(时间单位为秒):

82499a7df9306c4420b39562ca596045.png
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门