记一次django queryset的缓存优化

本文讲述了在面临大量数据时,如何发现并优化Django中QuerySet的缓存问题。作者发现Django 1.4版本未使用数据库连接池,并且在多次get或filter操作时会重复发起SQL查询。为解决这个问题,作者提出了自定义cache_filter和cache_get方法,利用缓存避免重复查询,从而提高性能。
摘要由CSDN通过智能技术生成

缘起

看着我们单表记录快7000万行,突破亿行已经指日可待了,于是打算数据库分表,对应用层相对透明的做法就是引入数据库中间件,业界虽然有一些方案,比如阿里,360的,但大部分都是java或c的,最后看向了https://github.com/flike/kingshard,这是golang写的,代码质量还是挺高的,对我的胃口,于是先把kingshard当做代理用起来,发现了以前一直没有发现的问题。

django竟然没有数据库连接池

用kingshard做proxy后发现,连接到kingshard的socket状态都是time_wait,只有kingshard到mysql是一直establish的,这让我很好奇,怀疑django没有使用数据库连接池(当然我们用的django版本比较老,是1.4的)。查询了一下的确是这样,貌似只有1.6版本以后才提供CONN_MAX_AGE这个参数。具体可以参考http://www.huochai.mobi/p/d/752667/?share_tid=85a118bfb04b&fmid=0

django 在queryset里面再次get(filter)会再次发起sql查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值