网站API优化

来源:互联网 发布:java解析器是什么 编辑:程序博客网 时间:2024/06/06 00:05

问题:

django rest framework的使用大大提高了开发效率,产品开发周期明显缩短。在业务发展初期,数据库记录非常小的情况下,比如几万条及以下,查询速速尚且满足需要。
但是随着业务规模的可扩大,当数据库记录达到10w以上,加上join等的影响, 查询速度越来越慢。django rest_framework已经捉襟见肘。

优化要点:

  1. 涉及数据库查询的操作,尽量批量(id__in=ids);

  2. 不用外键,不用join;关于join包括:
    a) models中使用property定义查询,属于join;

  3. 使用缓存;
    a) 对于记录数少的表,初始化时从数据库读出后,放入map,提高效率;
    b) 对于经常使用的表,表记录又不是很多的,可以考虑用cache缓存下,每次的请求,先到cache中查,如果找到,直接返回,如果没有找到,再查询数据库,并将结果放入cache中;

  4. 返回结果时,只返回指定长度数据,也就是使用分片[:];
    Apple.objects.filter(**filters)[0:30], 只返回30条记录

  5. 不需要的字段,不要查询;

    example

    app_detail = AppDetail.objects.filter(app_id=app_id)

    修改为

    app_detail = AppDetail.objects.filter(app_id=app_id).values('flag_id')

    只查询flag_id,不用的字段不查询,这样就可以节省几十毫秒;

  6. 建立索引;
    为经常用到的查询子句中的条件建立索引,例如create_time等

工具:

connections可以用于查看django执行的sql语句及消耗的时间

from django.db import connectionsc = connections['database_name']print c.queries