zoukankan      html  css  js  c++  java
  • django shell ipython 模型层优化(关联对象) 懒加载和预加载 +长链接

    懒加载

    存在于外键和多对多关系
    不检索关联对象的数据
    调用关联对象会再次查询数据库


    问题根源


    查看django orm的数据加载,两次. 查询user,查询menu

    第一次查询 用户表  第二次查询 app表

    cmd:python manage.py shell #进入shell调试 或者ipython
    from authorization.models import User
    users=User.objects.all()
    print(users.query) #打印sql语句 ,第一次查询user
    
    user=users[0]
    user_menu=user.menu.all()
    print(user_menu.query)  #第二次查询menu

      

    预加载的方法


    预加载单个关联对象--select_related
    !!!预加载多个关联对象--prefetch_related

    性能对比:测试时 预加载快了三倍左右


    # 懒加载
    def lazy_load():
      for user in User.objects.all():
      print(user.menu.all())

    # 预加载
    def pre_load():
      for user in User.objects.prefetch_related('menu'):
      print(user.menu.all())

    长链接

    尽少的链接次数,集中查询

    因为创建和关闭链接的时间和单词查询的时间类似,一开一关大大浪费性能

    避免负优化:

      使用CONN_MAX_AGE配置限制DB连接寿命

      CONN_MAX_AGE默认值是0

      每个DB连接的寿命保持到该次请求结束

      不建议开发模式下使用CONN_MAX_AGE

    部署线程数 一定要小于 数据库最大连接数

    django-debug-toolbar

    https://www.cnblogs.com/liwenzhou/p/9245507.html

     

  • 相关阅读:
    [ Pytorch ] torch.squeeze() 和torch.unsqueeze()的用法
    莫烦
    毕业设计 Makefile 编写
    Manjaro搭建无密访问samba服务器
    GEC6818交叉开发环境搭建拟稿
    彻底删除windows残留启动引导
    Cmd Markdown 编辑阅读器
    Hi3519v101 SDK安装及升级
    Linux 修改SWAP分区后导致开机问题
    Linux 安装搭建 tftpd 服务器
  • 原文地址:https://www.cnblogs.com/du-jun/p/10555094.html
Copyright © 2011-2022 走看看