A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Mr.TR 中级黑马   /  2019-2-18 20:53  /  953 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

      由于项目的需要,学习了Django框架,Django框架的MTV很清晰,通过MTV能够很好地了解Django框架的内部机理。但是在使用过程中发现了一个严重的问题,就是当有大量IO(写数据库操作)的时候,系统处理超级慢(10万条数据用来进行机器学习花了大概三天)。
      当然效率低的这个问题最早的时候我个人认为这大概是由于Django框架封装性会导致这些问题,于是我就彻底抛弃了Django框架的封装的一些函数的使用(像save、delete等函数调用一次就会写一次数据库),回到了传统的方式:exec(sql)   -->   commit()    ,这种方式当有大量数据库操作的时候,最后之需要commit一次很大地提高了程序的运行效率,大概几十倍的水平,虽然使用这种方式解决了部分问题,但是想想看很多的网站都是使用的Django框架的,应该存在某些解决方式。
     经过查资料,发现Django已经很好地解决这个问题,Django ORM模式提供事务处理类:transaction。Django默认的事务处理方式是改动就提交,每执行一次就立即提交,这就会花费大量的时间用于IO。Django也支持一种所有工作都完成后才提交事务这种方式,这种方式就会在将很多写数据操作一次提交提高了程序的运行效率。它们定义的方式如下所示:
1、这种方式是Django的默认方式,每当函数里面执行一次save或者delete等,就会提交一次,很慢。
@transaction.autocommit
def function():
    ……
2、通过在函数前面加上这句,只会commit一次,程序效率提高很多。
@transaction.commit_on_success
def function():
    ……




(文章转载自 https://blog.csdn.net/wangleishushu/article/details/76285279)


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马