This is an automated email from the ASF dual-hosted git repository.

gaoxihui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozhera.git


The following commit(s) were added to refs/heads/master by this push:
     new 6e9a4293 perf: optimize queryAllApps with conditional fetching logic 
(#569)
6e9a4293 is described below

commit 6e9a4293af8dc1ba5fc3a572db6a219b4c3814fe
Author: Xue <[email protected]>
AuthorDate: Mon Mar 24 15:22:33 2025 +0800

    perf: optimize queryAllApps with conditional fetching logic (#569)
    
    * fix: test2025-0320
    
    * perf: optimize queryAllApps with conditional fetching logic
    
    - Modify queryAllApps to perform fuzzy search by name when provided
    - Implement fallback to fetch top 100 records when no name filter exists
    - Reduce full-table scan overhead and improve query performance
    
    ---------
    
    Co-authored-by: xueshan <[email protected]>
---
 .../apache/ozhera/app/api/service/HeraAppService.java  |  2 ++
 .../ozhera/app/dao/mapper/HeraAppBaseInfoMapper.java   |  2 ++
 .../ozhera/app/service/impl/HeraAppServiceImpl.java    | 18 ++++++++++++++++++
 .../main/resources/mapper/HeraAppBaseInfoMapper.xml    | 16 ++++++++++++++++
 .../ozhera/log/manager/service/HeraAppService.java     |  2 ++
 .../log/manager/service/impl/HeraAppServiceImpl.java   |  5 +++++
 .../log/manager/service/impl/LogTailServiceImpl.java   |  3 ++-
 7 files changed, 47 insertions(+), 1 deletion(-)

diff --git 
a/ozhera-app/app-api/src/main/java/org/apache/ozhera/app/api/service/HeraAppService.java
 
b/ozhera-app/app-api/src/main/java/org/apache/ozhera/app/api/service/HeraAppService.java
index 464753d6..bfbe27b3 100644
--- 
a/ozhera-app/app-api/src/main/java/org/apache/ozhera/app/api/service/HeraAppService.java
+++ 
b/ozhera-app/app-api/src/main/java/org/apache/ozhera/app/api/service/HeraAppService.java
@@ -72,6 +72,8 @@ public interface HeraAppService {
 
     Long countRole(HeraAppRoleModel roleModel);
 
+    List<AppBaseInfo> querySpecifiedAppInfoWithLog(String appName, Integer 
limit);
+
     /**
      * query user have permission project
      *
diff --git 
a/ozhera-app/app-service/src/main/java/org/apache/ozhera/app/dao/mapper/HeraAppBaseInfoMapper.java
 
b/ozhera-app/app-service/src/main/java/org/apache/ozhera/app/dao/mapper/HeraAppBaseInfoMapper.java
index daf269bd..43fed1f9 100644
--- 
a/ozhera-app/app-service/src/main/java/org/apache/ozhera/app/dao/mapper/HeraAppBaseInfoMapper.java
+++ 
b/ozhera-app/app-service/src/main/java/org/apache/ozhera/app/dao/mapper/HeraAppBaseInfoMapper.java
@@ -40,6 +40,8 @@ public interface HeraAppBaseInfoMapper extends 
BaseMapper<HeraAppBaseInfo> {
 
     List<AppBaseInfo> queryAppInfo(@Param("appName") String appName, 
@Param("platformType") Integer platformType, @Param("type") Integer type);
 
+    List<AppBaseInfo> queryLatestAppInfo(@Param("limit") Integer limit);
+
     List<AppBaseInfo> queryByIds(List<Long> ids);
 
     List<HeraAppBaseInfoParticipant> selectByParticipant(HeraAppBaseQuery 
query);
diff --git 
a/ozhera-app/app-service/src/main/java/org/apache/ozhera/app/service/impl/HeraAppServiceImpl.java
 
b/ozhera-app/app-service/src/main/java/org/apache/ozhera/app/service/impl/HeraAppServiceImpl.java
index f94a20ec..094b07da 100644
--- 
a/ozhera-app/app-service/src/main/java/org/apache/ozhera/app/service/impl/HeraAppServiceImpl.java
+++ 
b/ozhera-app/app-service/src/main/java/org/apache/ozhera/app/service/impl/HeraAppServiceImpl.java
@@ -105,6 +105,24 @@ public class HeraAppServiceImpl implements HeraAppService {
         return appBaseInfos;
     }
 
+    @Override
+    public List<AppBaseInfo> querySpecifiedAppInfoWithLog(String appName, 
Integer limit) {
+        List<AppBaseInfo> appBaseInfos;
+        if (appName != null && !appName.isEmpty()) {
+            appBaseInfos = heraAppBaseInfoMapper.queryAppInfo(appName, null, 
null);
+        }else{
+            appBaseInfos = heraAppBaseInfoMapper.queryLatestAppInfo(limit);
+        }
+        if (CollectionUtils.isNotEmpty(appBaseInfos)) {
+            appBaseInfos = appBaseInfos.parallelStream().map(appBaseInfo -> {
+                
appBaseInfo.setPlatformName(appTypeServiceExtension.getPlatformName(appBaseInfo.getPlatformType()));
+                
appBaseInfo.setAppTypeName(appTypeServiceExtension.getAppTypeName(appBaseInfo.getAppType()));
+                return appBaseInfo;
+            }).collect(Collectors.toList());
+        }
+        return appBaseInfos;
+    }
+
     @Override
     public List<AppBaseInfo> queryAllExistsApp() {
         return queryAppInfoWithLog("", null);
diff --git 
a/ozhera-app/app-service/src/main/resources/mapper/HeraAppBaseInfoMapper.xml 
b/ozhera-app/app-service/src/main/resources/mapper/HeraAppBaseInfoMapper.xml
index fe839171..786dd5f7 100644
--- a/ozhera-app/app-service/src/main/resources/mapper/HeraAppBaseInfoMapper.xml
+++ b/ozhera-app/app-service/src/main/resources/mapper/HeraAppBaseInfoMapper.xml
@@ -658,6 +658,22 @@
         </where>
     </select>
 
+    <select id="queryLatestAppInfo" resultMap="queryAppResultMap">
+        SELECT hb.id            AS id,
+               hb.bind_id       AS bindId,
+               hb.app_name      AS appName,
+               hb.app_cname     AS appCname,
+               hb.app_type      AS appType,
+               hb.platform_type AS platformType,
+               he.tree_ids      AS treeIds,
+               he.node_ips      AS nodeIPs
+        FROM hera_app_base_info hb
+                 LEFT JOIN hera_app_excess_info he ON hb.id = he.app_base_id
+        ORDER BY
+            hb.update_time DESC
+        LIMIT #{limit}
+    </select>
+
     <select id="countNormalData" resultType="java.lang.Long">
         SELECT
             count(*)
diff --git 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/HeraAppService.java
 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/HeraAppService.java
index 6757ecfb..3323066a 100644
--- 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/HeraAppService.java
+++ 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/HeraAppService.java
@@ -60,4 +60,6 @@ public interface HeraAppService {
     int delById(Integer id);
 
     Long getAppCount();
+
+    List<AppBaseInfo> querySpecifiedAppInfoWithLog(String appName, Integer 
limit);
 }
diff --git 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/HeraAppServiceImpl.java
 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/HeraAppServiceImpl.java
index 08e4ab51..afb1ae5f 100644
--- 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/HeraAppServiceImpl.java
+++ 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/HeraAppServiceImpl.java
@@ -62,6 +62,11 @@ public class HeraAppServiceImpl implements HeraAppService {
         return heraAppService.queryAppInfoWithLog(appName, type);
     }
 
+    @Override
+    public List<AppBaseInfo> querySpecifiedAppInfoWithLog(String appName, 
Integer limit) {
+        return heraAppService.querySpecifiedAppInfoWithLog(appName, limit);
+    }
+
     @Override
     public List<AppBaseInfo> queryAllExistsApp() {
         return heraAppService.queryAllExistsApp();
diff --git 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogTailServiceImpl.java
 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogTailServiceImpl.java
index 6dfdecde..79e4873a 100644
--- 
a/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogTailServiceImpl.java
+++ 
b/ozhera-log/log-manager/src/main/java/org/apache/ozhera/log/manager/service/impl/LogTailServiceImpl.java
@@ -540,7 +540,8 @@ public class LogTailServiceImpl extends BaseService 
implements LogTailService {
     }
 
     private List<MapDTO> queryAppInfo(String appName, Integer type) {
-        List<AppBaseInfo> apps = heraAppService.queryAppInfoWithLog(appName, 
type);
+        int limit = 100;
+        List<AppBaseInfo> apps = 
heraAppService.querySpecifiedAppInfoWithLog(appName, limit);
         List<MapDTO> mapDTOList = Lists.newArrayList();
         if (CollectionUtils.isNotEmpty(apps)) {
             mapDTOList = apps.stream().map(response -> {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to