前段时间由于项目要求,需要在Django 1.4.3版本上实现跟MySQL数据库的长连接,因为是刚开始接触Django框架,对Django的源码也不是很熟,只能参考着网上的解决方案来一点点摸索,在此记录下解决过程中发现的一些问题和心得吧!
百度“Django 数据库长连接”主要能搜到三种解决方案,我参考这三种解决方案来实现的时候,发现都不能很好的解决Django跟MySQL数据库的长连接问题,不知道是我对这些解决方案理解有误,还是真的存在问题?在此列出我对这三种解决方案认为不合理的地方和我最终的解决方案吧!
网上方案一:
不关闭Django每次request中创建的DB connection,具体实现方案请参考:握瑜的专栏-Django实现数据库长连接
这种方案我测试的时候发现connection确实实现了长连接,但每次Django request的时候都会创建一个connection,其实下次request使用的connection是没有复用上次request的connection的,而是使用新创建的connection,随着request的增多,connection会越来越多,最终达到数据库连接的上限,这样实现的长连接就没有多大意义了。
网上方案二:
自己实现连接池管理,具体实现方案请参考:懒人居-让Django支持数据库长连接(可以提高不少性能哦)
这种方案我没有详细的看他实现的代码,大概了解应该是自己编码实现了一个类似pool来管理connection,我就直接按照上面的方案和源码拷贝到我的项目里测试了下,发现有报错,具体什么错误我没有详细推敲!各位大神可以尝试下!
网上方案三:
使用第三方pool来管理connection,具体实现方案请参考: