瀏覽代碼

优化监控性能

AE86 2 年之前
父節點
當前提交
6ee4e2dd4e

+ 1 - 1
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/AbstractDatabaseConnector.java

@@ -269,7 +269,7 @@ public abstract class AbstractDatabaseConnector extends AbstractConnector
         if (StringUtil.isNotBlank(queryFilterSql)) {
         if (StringUtil.isNotBlank(queryFilterSql)) {
             queryCount.append(queryFilterSql);
             queryCount.append(queryFilterSql);
         }
         }
-        queryCount/*.append(" GROUP BY ").append(pk)*/.append(") DBSYNCER_T");
+        queryCount.append(" GROUP BY ").append(pk).append(") DBSYNCER_T");
         return queryCount.toString();
         return queryCount.toString();
     }
     }
 
 

+ 1 - 1
dbsyncer-monitor/src/main/java/org/dbsyncer/monitor/MonitorFactory.java

@@ -201,7 +201,7 @@ public class MonitorFactory implements Monitor {
             Query query = new Query(1, 1);
             Query query = new Query(1, 1);
             operation.apply(query);
             operation.apply(query);
             metaAll.forEach(meta -> {
             metaAll.forEach(meta -> {
-                query.setQueryMappingMetricCount(true);
+                query.setQueryTotal(true);
                 Paging paging = manager.queryData(query, meta.getId());
                 Paging paging = manager.queryData(query, meta.getId());
                 total.getAndAdd(paging.getTotal());
                 total.getAndAdd(paging.getTotal());
             });
             });

+ 6 - 1
dbsyncer-storage/src/main/java/org/dbsyncer/storage/lucene/Shard.java

@@ -125,8 +125,13 @@ public class Shard {
         final IndexSearcher searcher = getSearcher();
         final IndexSearcher searcher = getSearcher();
         final TopDocs topDocs = getTopDocs(searcher, option.getQuery(), MAX_SIZE, sort);
         final TopDocs topDocs = getTopDocs(searcher, option.getQuery(), MAX_SIZE, sort);
         Paging paging = new Paging(pageNum, pageSize);
         Paging paging = new Paging(pageNum, pageSize);
-        List<Map> data = search(searcher, topDocs, option, pageNum, pageSize);
         paging.setTotal(topDocs.totalHits);
         paging.setTotal(topDocs.totalHits);
+        if(option.isQueryTotal()){
+            paging.setData(Collections.EMPTY_LIST);
+            return paging;
+        }
+
+        List<Map> data = search(searcher, topDocs, option, pageNum, pageSize);
         paging.setData(data);
         paging.setData(data);
         return paging;
         return paging;
     }
     }

+ 16 - 2
dbsyncer-storage/src/main/java/org/dbsyncer/storage/query/Option.java

@@ -29,14 +29,20 @@ public class Option {
 
 
     private Highlighter highlighter = null;
     private Highlighter highlighter = null;
 
 
-    private Map<String, IndexFieldResolverEnum> fieldResolvers = new LinkedHashMap<>();
+    /**
+     * 只查总数
+     */
+    private boolean queryTotal;
+
+    private final Map<String, IndexFieldResolverEnum> fieldResolvers = new LinkedHashMap<>();
 
 
     public Option(Query query) {
     public Option(Query query) {
         this.query = query;
         this.query = query;
     }
     }
 
 
-    public Option(Query query, List<Param> params) {
+    public Option(Query query, boolean queryTotal, List<Param> params) {
         this.query = query;
         this.query = query;
+        this.queryTotal = queryTotal;
         if (!CollectionUtils.isEmpty(params)) {
         if (!CollectionUtils.isEmpty(params)) {
             this.highLightKeys = params.stream()
             this.highLightKeys = params.stream()
                     .filter(p -> p.isHighlighter())
                     .filter(p -> p.isHighlighter())
@@ -65,6 +71,14 @@ public class Option {
         return query;
         return query;
     }
     }
 
 
+    public boolean isQueryTotal() {
+        return queryTotal;
+    }
+
+    public void setQueryTotal(boolean queryTotal) {
+        this.queryTotal = queryTotal;
+    }
+
     public Set<String> getHighLightKeys() {
     public Set<String> getHighLightKeys() {
         return highLightKeys;
         return highLightKeys;
     }
     }

+ 5 - 5
dbsyncer-storage/src/main/java/org/dbsyncer/storage/query/Query.java

@@ -30,7 +30,7 @@ public class Query {
     /**
     /**
      * 查询应用性能,不用排序查询,只用查询总量即可
      * 查询应用性能,不用排序查询,只用查询总量即可
      */
      */
-    private boolean queryMappingMetricCount;
+    private boolean queryTotal;
 
 
     public Query() {
     public Query() {
         this.params = new ArrayList<>();
         this.params = new ArrayList<>();
@@ -101,11 +101,11 @@ public class Query {
         return enableHighLightSearch;
         return enableHighLightSearch;
     }
     }
 
 
-    public boolean isQueryMappingMetricCount() {
-        return queryMappingMetricCount;
+    public boolean isQueryTotal() {
+        return queryTotal;
     }
     }
 
 
-    public void setQueryMappingMetricCount(boolean queryMappingMetricCount) {
-        this.queryMappingMetricCount = queryMappingMetricCount;
+    public void setQueryTotal(boolean queryTotal) {
+        this.queryTotal = queryTotal;
     }
     }
 }
 }

+ 3 - 2
dbsyncer-storage/src/main/java/org/dbsyncer/storage/support/DiskStorageServiceImpl.java

@@ -73,6 +73,7 @@ public class DiskStorageServiceImpl extends AbstractStorageService {
         if (null != shard) {
         if (null != shard) {
             int pageNum = query.getPageNum() <= 0 ? 1 : query.getPageNum();
             int pageNum = query.getPageNum() <= 0 ? 1 : query.getPageNum();
             int pageSize = query.getPageSize() <= 0 ? 20 : query.getPageSize();
             int pageSize = query.getPageSize() <= 0 ? 20 : query.getPageSize();
+            boolean queryTotal = query.isQueryTotal();
             // 根据修改时间 > 创建时间排序
             // 根据修改时间 > 创建时间排序
             Sort sort = new Sort(new SortField(ConfigConstant.CONFIG_MODEL_UPDATE_TIME, SortField.Type.LONG, true),
             Sort sort = new Sort(new SortField(ConfigConstant.CONFIG_MODEL_UPDATE_TIME, SortField.Type.LONG, true),
                     new SortField(ConfigConstant.CONFIG_MODEL_CREATE_TIME, SortField.Type.LONG, true));
                     new SortField(ConfigConstant.CONFIG_MODEL_CREATE_TIME, SortField.Type.LONG, true));
@@ -88,10 +89,10 @@ public class DiskStorageServiceImpl extends AbstractStorageService {
                     }
                     }
                 });
                 });
                 BooleanQuery q = builder.build();
                 BooleanQuery q = builder.build();
-                return shard.query(new Option(q, params), pageNum, pageSize, sort);
+                return shard.query(new Option(q, queryTotal, params), pageNum, pageSize, sort);
             }
             }
 
 
-            return shard.query(new Option(new MatchAllDocsQuery()), pageNum, pageSize, sort);
+            return shard.query(new Option(new MatchAllDocsQuery(), queryTotal, null), pageNum, pageSize, sort);
         }
         }
         return new Paging(query.getPageNum(), query.getPageSize());
         return new Paging(query.getPageNum(), query.getPageSize());
     }
     }

+ 11 - 13
dbsyncer-storage/src/main/java/org/dbsyncer/storage/support/MysqlStorageServiceImpl.java

@@ -34,10 +34,7 @@ import org.springframework.util.Assert;
 
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PostConstruct;
 import java.io.*;
 import java.io.*;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -95,19 +92,20 @@ public class MysqlStorageServiceImpl extends AbstractStorageService {
     public Paging select(Query query) {
     public Paging select(Query query) {
         synchronized (LOCK){
         synchronized (LOCK){
             Executor executor = getExecutor(query.getType(), query.getCollection());
             Executor executor = getExecutor(query.getType(), query.getCollection());
-            List<Object> queryArgs = new ArrayList<>();
+            Paging paging = new Paging(query.getPageNum(), query.getPageSize());
             List<Object> queryCountArgs = new ArrayList<>();
             List<Object> queryCountArgs = new ArrayList<>();
-            String querySql = buildQuerySql(query, executor, queryArgs);
             String queryCountSql = buildQueryCountSql(query, executor, queryCountArgs);
             String queryCountSql = buildQueryCountSql(query, executor, queryCountArgs);
-
-            List<Map<String, Object>> data = new ArrayList<>();
-            if (!query.isQueryMappingMetricCount()) {
-                data = connectorMapper.execute(databaseTemplate -> databaseTemplate.queryForList(querySql, queryArgs.toArray()));
-                replaceHighLight(query, data);
-            }
             Long total = connectorMapper.execute(databaseTemplate -> databaseTemplate.queryForObject(queryCountSql, queryCountArgs.toArray(), Long.class));
             Long total = connectorMapper.execute(databaseTemplate -> databaseTemplate.queryForObject(queryCountSql, queryCountArgs.toArray(), Long.class));
+            if (query.isQueryTotal()) {
+                paging.setTotal(total);
+                paging.setData(Collections.EMPTY_LIST);
+                return paging;
+            }
 
 
-            Paging paging = new Paging(query.getPageNum(), query.getPageSize());
+            List<Object> queryArgs = new ArrayList<>();
+            String querySql = buildQuerySql(query, executor, queryArgs);
+            List<Map<String, Object>> data = connectorMapper.execute(databaseTemplate -> databaseTemplate.queryForList(querySql, queryArgs.toArray()));
+            replaceHighLight(query, data);
             paging.setData(data);
             paging.setData(data);
             paging.setTotal(total);
             paging.setTotal(total);
             return paging;
             return paging;