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

“Python小屋”编程比赛正式开始

中国大学MOOC“Python程序设计基础”第5次开课

推荐图书:

《Python程序设计基础(第2版)》,ISBN:9787302490562,董付国,清华大学出版社,第20次印刷,清华大学出版社2019、2020年度畅销图书,山东省高等教育优秀教材,山东省普通高等教育一流教材,山东省一流本科课程“Python应用开发”(线上线下混合)、山东省一流本科课程“Python程序设计基础”(线上)配套教材,在中国大学MOOC和智慧树网有配套慕课

c4effcb0697af198f13197174ed0dab1.png

图书详情:d90cd057b3e606bfb43d5e0c9ce017b6.png

配套资源:用书教师可以免费获取教学大纲、教案、课件、源码、习题答案、慕课、在线练习与考试系统。

非计算机专业《Python程序设计基础》教学参考大纲

《Python程序设计基础(第2版)》习题答案

《Python程序设计基础(第2版)》第13章习题答案

中国大学MOOC“Python程序设计基础”免费学习地址

==============

问题描述:

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

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

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

演示代码(后台发送消息“20211212”可以下载源码):

7f6df73ae56e92703fb745a30e21ac68.png

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

82499a7df9306c4420b39562ca596045.png

其实还有第5种方式,能提高速度至少50倍,甚至更多,能够真正满足工业级的高并发应用要求,要不要分享呢?

温馨提示:

关注微信公众号“Python小屋”,在公众号后台发送消息“大事记”可以查看董付国老师与Python有关的重要事件;发送消息“教材”可以查看董付国老师出版的Python系列教材(已累计印刷超过140次)的适用专业详情;发送消息“历史文章”可以查看董付国老师推送的超过1000篇原创技术文章;发送消息“会议”或“培训”可以查看近期董付国老师的培训安排;发送消息“微课”可以查看董付国老师免费分享的超过600节Python微课视频;发送消息“课件”可以查看董付国老师免费分享的Python教学资源;发送消息“小屋刷题”可以下载“Python小屋刷题神器”,免费练习2048道客观题和419道编程题,题库持续更新;发送消息“编程比赛”了解Python小屋编程大赛详情。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dongfuguo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值