丁云鹏 7 месяцев назад
Родитель
Сommit
2cb2f8ad0b

+ 0 - 12
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankService683.java

@@ -105,8 +105,6 @@ public class RankService683 extends RankStrategyXGBBasic {
 
                 this.handleD2Feature(vidRankMaps, cidFeatureMap, cidStr);
 
-
-
                 adRankItem.setFeatureMap(cidFeatureMap);
 
                 adRankItems.add(adRankItem);
@@ -122,12 +120,8 @@ public class RankService683 extends RankStrategyXGBBasic {
                         Map<String, Map<String, String>> cidFeature = allCidFeature.getOrDefault(cidStr, new HashMap<>());
                         Map<String, String> b1Feature = cidFeature.getOrDefault("alg_cid_feature_basic_info", new HashMap<>());
                         String title = b1Feature.getOrDefault("cidtitle", "");
-                        long time21 = System.currentTimeMillis();
                         this.handleE1AndE2Feature(e1Feature, e2Feature, title, item.getFeatureMap());
-                        long time22 = System.currentTimeMillis();
                         this.handleD3AndB1Feature(d3Feature, title, item.getFeatureMap());
-                        long time23 = System.currentTimeMillis();
-                        log.info("cost={} handleE1AndE2Feature={} handleD3AndB1Feature={}", time23 - time21, time22 - time21, time23 - time22);
                     } finally{
                         cdl.countDown();
                     }
@@ -140,7 +134,6 @@ public class RankService683 extends RankStrategyXGBBasic {
             }
         } else {
             for (AdPlatformCreativeDTO dto : request.getAdIdList()) {
-                long time20 = System.currentTimeMillis();
                 AdRankItem adRankItem = new AdRankItem();
                 adRankItem.setAdId(dto.getCreativeId());
                 adRankItem.setCreativeCode(dto.getCreativeCode());
@@ -173,13 +166,8 @@ public class RankService683 extends RankStrategyXGBBasic {
                 this.handleD2Feature(vidRankMaps, cidFeatureMap, cidStr);
 
                 String title = b1Feature.getOrDefault("cidtitle", "");
-                long time21 = System.currentTimeMillis();
                 this.handleE1AndE2Feature(e1Feature, e2Feature, title, cidFeatureMap);
-                long time22 = System.currentTimeMillis();
                 this.handleD3AndB1Feature(d3Feature, title, cidFeatureMap);
-                long time23 = System.currentTimeMillis();
-                log.info("cost={} other={} handleE1AndE2Feature={} handleD3AndB1Feature={}", time23 - time20,
-                        time21 - time20, time22 - time21, time23 - time22);
 
                 adRankItem.setFeatureMap(cidFeatureMap);
 

+ 97 - 32
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/RankStrategyXGBAutoUpdateModel688.java

@@ -3,6 +3,7 @@ package com.tzld.piaoquan.ad.engine.service.score;
 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.score.ScorerUtils;
+import com.tzld.piaoquan.ad.engine.commons.thread.ThreadPoolFactory;
 import com.tzld.piaoquan.ad.engine.commons.util.*;
 import com.tzld.piaoquan.ad.engine.service.feature.Feature;
 import com.tzld.piaoquan.ad.engine.service.score.dto.AdPlatformCreativeDTO;
@@ -11,7 +12,9 @@ import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
 import org.xm.Similarity;
 
 import java.io.BufferedReader;
@@ -19,6 +22,8 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.util.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -32,6 +37,9 @@ public class RankStrategyXGBAutoUpdateModel688 extends RankStrategyXGBBasic {
 
     private Map<String, Double> bucketsLen = new HashMap<>();
 
+    @Value("${similarity.concurrent: false}")
+    private boolean similarityConcurrent;
+
     @Override
     public List<AdRankItem> adItemRank(RankRecommendRequestParam request, ScoreParam scoreParam) {
 
@@ -70,51 +78,108 @@ public class RankStrategyXGBAutoUpdateModel688 extends RankStrategyXGBBasic {
         long time1 = System.currentTimeMillis();
 
         List<AdRankItem> adRankItems = new ArrayList<>(request.getAdIdList().size());
-        for (AdPlatformCreativeDTO dto : request.getAdIdList()) {
-            AdRankItem adRankItem = new AdRankItem();
-            adRankItem.setAdId(dto.getCreativeId());
-            adRankItem.setCreativeCode(dto.getCreativeCode());
-            adRankItem.setAdVerId(dto.getAdVerId());
-            adRankItem.setVideoId(request.getVideoId());
-            adRankItem.setCpa(dto.getCpa());
-            adRankItem.setId(dto.getAdId());
-            adRankItem.setCampaignId(dto.getCampaignId());
-            adRankItem.setCpm(ObjUtil.nullOrDefault(dto.getCpm(), 90).doubleValue());
+        if (similarityConcurrent) {
+            for (AdPlatformCreativeDTO dto : request.getAdIdList()) {
+                AdRankItem adRankItem = new AdRankItem();
+                adRankItem.setAdId(dto.getCreativeId());
+                adRankItem.setCreativeCode(dto.getCreativeCode());
+                adRankItem.setAdVerId(dto.getAdVerId());
+                adRankItem.setVideoId(request.getVideoId());
+                adRankItem.setCpa(dto.getCpa());
+                adRankItem.setId(dto.getAdId());
+                adRankItem.setCampaignId(dto.getCampaignId());
+                adRankItem.setCpm(ObjUtil.nullOrDefault(dto.getCpm(), 90).doubleValue());
+
+                String cidStr = dto.getCreativeId().toString();
+                Map<String, String> cidFeatureMap = new HashMap<>();
+                Map<String, Map<String, String>> cidFeature = allCidFeature.getOrDefault(cidStr, new HashMap<>());
+                Map<String, String> b1Feature = cidFeature.getOrDefault("alg_cid_feature_basic_info", new HashMap<>());
+
+                Map<String, Map<String, String>> adVerFeature = allAdVerFeature.getOrDefault(dto.getAdVerId(), new HashMap<>());
+
+                Map<String, String> d1Feature = cidFeature.getOrDefault("alg_cid_feature_vid_cf", new HashMap<>());
+
+                this.handleB1Feature(b1Feature, cidFeatureMap, cidStr);
+
+                this.handleB2ToB5AndB8ToB9Feature(cidFeature, adVerFeature, cidFeatureMap);
+
+                this.handleB6ToB7Feature(cidFeature, cidFeatureMap);
+
+                this.handleC1UIFeature(midTimeDiffMap, actionStaticMap, cidFeatureMap, cidStr);
+
+                this.handleD1Feature(d1Feature, cidFeatureMap);
+
+                this.handleD2Feature(vidRankMaps, cidFeatureMap, cidStr);
 
-            String cidStr = dto.getCreativeId().toString();
-            Map<String, String> cidFeatureMap = new HashMap<>();
-            Map<String, Map<String, String>> cidFeature = allCidFeature.getOrDefault(cidStr, new HashMap<>());
-            Map<String, String> b1Feature = cidFeature.getOrDefault("alg_cid_feature_basic_info", new HashMap<>());
+                adRankItem.setFeatureMap(cidFeatureMap);
 
-            Map<String, Map<String, String>> adVerFeature = allAdVerFeature.getOrDefault(dto.getAdVerId(), new HashMap<>());
+                adRankItems.add(adRankItem);
 
-            Map<String, String> d1Feature = cidFeature.getOrDefault("alg_cid_feature_vid_cf", new HashMap<>());
+            }
+
+
+            CountDownLatch cdl = new CountDownLatch(adRankItems.size());
+            for (AdRankItem item : adRankItems) {
+                ThreadPoolFactory.defaultPool().submit(() -> {
+                    try {
+                        String cidStr = String.valueOf(item.getAdId());
+                        Map<String, Map<String, String>> cidFeature = allCidFeature.getOrDefault(cidStr, new HashMap<>());
+                        Map<String, String> b1Feature = cidFeature.getOrDefault("alg_cid_feature_basic_info", new HashMap<>());
+                        String title = b1Feature.getOrDefault("cidtitle", "");
+                        this.handleE1AndE2Feature(e1Feature, e2Feature, title, item.getFeatureMap());
+                        this.handleD3AndB1Feature(d3Feature, title, item.getFeatureMap());
+                    } finally{
+                        cdl.countDown();
+                    }
+                });
+            }
+            try {
+                cdl.await(200, TimeUnit.MILLISECONDS);
+            } catch (Exception e) {
+                log.error("handleE1AndE2Feature and handleD3AndB1Feature wait timeout", e);
+            }
+        } else {
+            for (AdPlatformCreativeDTO dto : request.getAdIdList()) {
+                AdRankItem adRankItem = new AdRankItem();
+                adRankItem.setAdId(dto.getCreativeId());
+                adRankItem.setCreativeCode(dto.getCreativeCode());
+                adRankItem.setAdVerId(dto.getAdVerId());
+                adRankItem.setVideoId(request.getVideoId());
+                adRankItem.setCpa(dto.getCpa());
+                adRankItem.setId(dto.getAdId());
+                adRankItem.setCampaignId(dto.getCampaignId());
+                adRankItem.setCpm(ObjUtil.nullOrDefault(dto.getCpm(), 90).doubleValue());
+
+                String cidStr = dto.getCreativeId().toString();
+                Map<String, String> cidFeatureMap = new HashMap<>();
+                Map<String, Map<String, String>> cidFeature = allCidFeature.getOrDefault(cidStr, new HashMap<>());
+                Map<String, String> b1Feature = cidFeature.getOrDefault("alg_cid_feature_basic_info", new HashMap<>());
+
+                Map<String, Map<String, String>> adVerFeature = allAdVerFeature.getOrDefault(dto.getAdVerId(), new HashMap<>());
 
-            this.handleB1Feature(b1Feature, cidFeatureMap, cidStr);
+                Map<String, String> d1Feature = cidFeature.getOrDefault("alg_cid_feature_vid_cf", new HashMap<>());
 
-            this.handleB2ToB5AndB8ToB9Feature(cidFeature, adVerFeature, cidFeatureMap);
+                this.handleB1Feature(b1Feature, cidFeatureMap, cidStr);
 
-            this.handleB6ToB7Feature(cidFeature, cidFeatureMap);
+                this.handleB2ToB5AndB8ToB9Feature(cidFeature, adVerFeature, cidFeatureMap);
 
-            this.handleC1UIFeature(midTimeDiffMap, actionStaticMap, cidFeatureMap, cidStr);
+                this.handleB6ToB7Feature(cidFeature, cidFeatureMap);
 
-            this.handleD1Feature(d1Feature, cidFeatureMap);
+                this.handleC1UIFeature(midTimeDiffMap, actionStaticMap, cidFeatureMap, cidStr);
 
-            this.handleD2Feature(vidRankMaps, cidFeatureMap, cidStr);
+                this.handleD1Feature(d1Feature, cidFeatureMap);
 
-            String title = b1Feature.getOrDefault("cidtitle", "");
-            long time21 = System.currentTimeMillis();
-            this.handleE1AndE2Feature(e1Feature, e2Feature, title, cidFeatureMap);
-            long time22 = System.currentTimeMillis();
-            this.handleD3AndB1Feature(d3Feature, title, cidFeatureMap);
-            long time23 = System.currentTimeMillis();
-            log.info("cost={} handleE1AndE2Feature={} handleD3AndB1Feature={}", time23 - time21, time22 - time21,
-                    time23 - time22);
+                this.handleD2Feature(vidRankMaps, cidFeatureMap, cidStr);
 
-            adRankItem.setFeatureMap(cidFeatureMap);
+                String title = b1Feature.getOrDefault("cidtitle", "");
+                this.handleE1AndE2Feature(e1Feature, e2Feature, title, cidFeatureMap);
+                this.handleD3AndB1Feature(d3Feature, title, cidFeatureMap);
 
-            adRankItems.add(adRankItem);
+                adRankItem.setFeatureMap(cidFeatureMap);
 
+                adRankItems.add(adRankItem);
+
+            }
         }
 
         long time2 = System.currentTimeMillis();