当前分类:python>>正文

django优化:随机获取相关文章五篇

来源:互联网   时间:2022年7月24日   编辑

做web开发不仅仅只是考虑逻辑的实现,还要考虑效率、方法之类的。

比如随机获取相关的五篇文章这样的一个简单功能。

我早期是用的post.objects.all(),从数据库中获取全部文章,然后再用random.choice()方法从所有的文章中随机选出五篇,这样的方式看着没什么问题,也可以实现相应的功能,但是在真正使用的时候,就会出现大问题。

什么大问题?

就是在数据量比较大的时候,比如10万甚至100万数据库的时候,如果先post.objects.all()获取全部文章再来选五篇,不仅数据库查询慢,而且在做判断的时候占用大量的内存,导致网站卡顿甚至打不开。

今天优化了一下,按下面这种方式来写:

def related(postid):    
    related_post = []
    post = Posts.objects.get(id=postid)
    catename = post.catename
    count = Posts.objects.filter(catename=catename).count()
    if count > 5:
        i = 0
        while i < 5:
            i += 1
            postid=random.randint(1,count)
            k1 =Posts.objects.filter(id=postid).exists()
            if k1:
                k1=Posts.objects.get(id=postid)
                related_post.append(k1)
        return list(set(related_post))#去除重复
    else:
        return Posts.objects.filter(catename=catename)

 

这段代码的意思是什么?

不是要随机五篇文章吗?

我先随机生成五个数,然后,再到数据库中按id获取五篇文章,我们只要挨个判定对应id是否存在就就行了。这样子也是随机获取五篇文章,最多也就查询数据10次左右。显然,使用这个方式,数据库的读取量就大大大大地减少了啦。

如果你有更好的办法,欢迎指教。

[猜你喜欢]

标签: django优化