Преглед на файлове

修改云存播放列表接口,不用vod_hls关联查询vod_bucket表。优化查询速度

lang преди 3 години
родител
ревизия
2e7f4f9111
променени са 1 файла, в които са добавени 15 реда и са изтрити 7 реда
  1. 15 7
      Controller/CloudStorage.py

+ 15 - 7
Controller/CloudStorage.py

@@ -42,7 +42,7 @@ from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, OSS_ROLE_AR
 from Controller.CheckUserData import DataValid
 from Model.models import Device_Info, Order_Model, Store_Meal, VodHlsModel, OssCrdModel, UID_Bucket, StsCrdModel, \
     ExperienceContextModel, Pay_Type, CDKcontextModel, Device_User, SysMassModel, SysMsgModel, UidPushModel, \
-    Unused_Uid_Meal, UIDMainUser, UserModel, PromotionRuleModel, VideoPlaybackTimeModel, CloudLogModel, CouponModel
+    Unused_Uid_Meal, UIDMainUser, UserModel, PromotionRuleModel, VideoPlaybackTimeModel, CloudLogModel, CouponModel, VodBucketModel
 from Object.AWS.S3Email import S3Email
 from Object.AliPayObject import AliPayObject
 from Object.AliSmsObject import AliSmsObject
@@ -467,12 +467,18 @@ class CloudStorageView(View):
         #     values("id", "time", "sec", "bucket__bucket", "fg", "bucket__endpoint", "bucket__region", "bucket__mold")
         vh_qs = VodHlsModel.objects.filter \
             (uid=uid, channel=channel, endTime__gte=now_time, time__range=(startTime, endTime)). \
-            values("id", "time", "sec", "bucket__bucket", "fg", "bucket__endpoint", "bucket__region", "bucket__mold")
+            values("id", "time", "sec", "fg", "bucket_id")
 
         vod_play_list = []
         if not vh_qs.exists():
             return response.json(0, vod_play_list)
 
+        #不用关联外键查询,因为会查询非常慢
+        bucket_qs = VodBucketModel.objects.values()
+        regroup_bucket_qs = {}
+        for bucket_dict in bucket_qs:
+            regroup_bucket_qs[bucket_dict['id']] = bucket_dict
+
         vodHlsModelTimeOver = int(time.time())
         logger.info({
             "intoTime": intoTime,
@@ -480,13 +486,15 @@ class CloudStorageView(View):
             "UidBucketModelOverTime": UidBucketModelTimeOver,
             "vodHlsModelOverTime": vodHlsModelTimeOver,
         })
-
-        aws_access_key_id = AWS_ACCESS_KEY_ID[vh_qs[0]["bucket__mold"]]
-        aws_secret_access_key = AWS_SECRET_ACCESS_KEY[vh_qs[0]["bucket__mold"]]
+        bucket_mold = regroup_bucket_qs[vh_qs[0]['bucket_id']]['mold']
+        bucket_region = regroup_bucket_qs[vh_qs[0]['bucket_id']]['region']
+        bucket_name = regroup_bucket_qs[vh_qs[0]['bucket_id']]['bucket']
+        aws_access_key_id = bucket_mold
+        aws_secret_access_key = bucket_region
         session = Session(
             aws_access_key_id=aws_access_key_id,
             aws_secret_access_key=aws_secret_access_key,
-            region_name=vh_qs[0]["bucket__region"]
+            region_name=bucket_region
         )
         conn = session.client('s3')
         uidToken = TokenObject().encryption(data={'uid': uid})
@@ -502,7 +510,7 @@ class CloudStorageView(View):
 
         for vod in vh_qs:
             # bucket__mold = vod["bucket__mold"]
-            bucket_name = vod["bucket__bucket"]
+            # bucket_name = vod["bucket__bucket"]
             # endpoint = vod["bucket__endpoint"]
             # bucket__region = vod["bucket__region"]
             thumbspng = '{uid}/vod{channel}/{time}/Thumb.jpeg'. \