0
点赞
收藏
分享

微信扫一扫

麦田物语第十七天

芥子书屋 08-01 21:30 阅读 4
python

一、背景

项目中有一个查询脚本的接口,查询20条数据需要5min,性能很差,需要优化
在这里插入图片描述

二、问题排查

查看代码发现,serializers中,发现了一个奇怪的查询
查询脚本时,关联的脚本版本的一些字段也需要查询出来,代码中用了一种奇怪的查询方式,每个字段都重新查询一遍版本表,导致性能损耗。

    def get_bk_os_type(self, instance):
        return self.return_job_version_data(instance=instance, column_data="bk_os_type")

    def get_bk_os_type_cn(self, instance):
        return self.return_job_version_data(instance=instance, column_data="bk_os_type_cn")

    def get_language_cn(self, instance):
        return self.return_job_version_data(instance=instance, column_data="language_cn")

    def get_language(self, instance):
        return self.return_job_version_data(instance=instance, column_data="language")

    def get_content(self, instance):
        return self.return_job_version_data(instance=instance, column_data="content")
  
    def return_job_version_data(self, instance, column_data):
        try:
            if instance.live_version:
                script_version_object = JobScriptVersion.objects.filter(
                    job_script=instance.id, version=instance.live_version
                ).last()
                return JobScriptVersionModelSerializers(instance=script_version_object).data[column_data]
            else:
                if column_data in ["language", "content"]:
                    script_version_object = (
                        JobScriptVersion.objects.filter(job_script=instance.id, is_deleted=False)
                        .order_by("updated_time")
                        .last()
                    )
                    return JobScriptVersionModelSerializers(instance=script_version_object).data[column_data]
            return "--"
        except Exception:
            return "--"

除此之外,还存在很多应该查缓存,却实时查询接口的数据,导致接口很慢

三、措施

  1. 统一写一个函数,查询版本信息,然后通过to_representation更新返回数据
  2. 使用redis缓存数据,提升性能

最终,这个请求优化到2s

举报

相关推荐

0 条评论