aderm removed a comment on issue #4292: Improve ES query performance
URL: https://github.com/apache/skywalking/pull/4292#issuecomment-581047508
 
 
   index doc count:612002
   
   test code:
   ```
   @Warmup(iterations = 5, time = 5, timeUnit = TimeUnit.SECONDS)
   @Measurement(iterations = 5, time = 5, timeUnit = TimeUnit.SECONDS)
   @State(Scope.Benchmark)
   public class FilterQueryTest {
   
       private RestHighLevelClient client;
   
       private final long startTimestamp = 1580287478790L;
       private final long endTimestamp = 1680480640000L;
   
       private final long MULTIPLE = 1000000000L;
       private final int SEARCH_SIZE = 5000;
       private final String INDEX_NAME = "service_inventory";
   
       @Setup
       public void createClient() {
           client = new RestHighLevelClient((RestClient.builder(new 
HttpHost("127.0.0.1", 9200, "http"))));
       }
   
       @TearDown
       public void closeClient() throws IOException {
           client.close();
       }
   
       /**
        * Benchmark test fix es query clause
        */
       @Benchmark
       @BenchmarkMode(Mode.AverageTime)
       @OutputTimeUnit(TimeUnit.MICROSECONDS)
       public void testFixEsQuery() throws IOException {
           SearchSourceBuilder sourceBuilder = 
SearchSourceBuilder.searchSource();
   
           BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
           boolQueryBuilder.must().add(timeRangeQueryBuild(startTimestamp, 
endTimestamp));
   
           boolQueryBuilder.must().add(QueryBuilders.termQuery("is_address", 
0));
           boolQueryBuilder.must().add(QueryBuilders.termQuery("node_type", 0));
   
           sourceBuilder.query(boolQueryBuilder);
           sourceBuilder.size(SEARCH_SIZE);
           SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
           searchRequest.source(sourceBuilder);
           SearchResponse response = client.search(searchRequest, 
RequestOptions.DEFAULT);
       }
   
       /**
        * Benchmark test fix es const query clause
        */
       @Benchmark
       @BenchmarkMode(Mode.AverageTime)
       @OutputTimeUnit(TimeUnit.MICROSECONDS)
       public void testFixEsConstQuery() throws IOException {
           SearchSourceBuilder sourceBuilder = 
SearchSourceBuilder.searchSource();
   
           BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
           boolQueryBuilder.must().add(timeRangeQueryBuild(startTimestamp, 
endTimestamp));
   
           boolQueryBuilder.must().add(QueryBuilders.termQuery("is_address", 
0));
           boolQueryBuilder.must().add(QueryBuilders.termQuery("node_type", 0));
   
           sourceBuilder.query(new ConstantScoreQueryBuilder(boolQueryBuilder));
           sourceBuilder.size(SEARCH_SIZE);
           SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
           searchRequest.source(sourceBuilder);
           SearchResponse response = client.search(searchRequest, 
RequestOptions.DEFAULT);
       }
   
   
       /**
        * Benchmark test fix es filter query clause
        */
       @Benchmark
       @BenchmarkMode(Mode.AverageTime)
       @OutputTimeUnit(TimeUnit.MICROSECONDS)
       public void testFixEsFilterQuery() throws IOException {
           SearchSourceBuilder sourceBuilder = 
SearchSourceBuilder.searchSource();
   
           BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
           boolQueryBuilder.must().add(timeRangeQueryBuild(startTimestamp, 
endTimestamp));
   
           boolQueryBuilder.must().add(QueryBuilders.termQuery("is_address", 
0));
           boolQueryBuilder.must().add(QueryBuilders.termQuery("node_type", 0));
   
           
sourceBuilder.query(QueryBuilders.boolQuery().filter(boolQueryBuilder));
           sourceBuilder.size(SEARCH_SIZE);
   
           SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
           searchRequest.source(sourceBuilder);
           SearchResponse response = client.search(searchRequest, 
RequestOptions.DEFAULT);
       }
   
       /**
        * Benchmark test dynamic es query clause
        */
       @Benchmark
       @BenchmarkMode(Mode.AverageTime)
       @OutputTimeUnit(TimeUnit.MICROSECONDS)
       public void testDynamicEsQuery() throws IOException {
           SearchSourceBuilder sourceBuilder = 
SearchSourceBuilder.searchSource();
   
           long ranFactor = (long) (Math.random() * MULTIPLE);
           BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
           boolQueryBuilder.must().add(timeRangeQueryBuild(startTimestamp + 
ranFactor, endTimestamp + ranFactor));
   
           boolQueryBuilder.must().add(QueryBuilders.termQuery("is_address", 
0));
           boolQueryBuilder.must().add(QueryBuilders.termQuery("node_type", 0));
   
           sourceBuilder.query(boolQueryBuilder);
           sourceBuilder.size(SEARCH_SIZE);
           SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
           searchRequest.source(sourceBuilder);
           SearchResponse response = client.search(searchRequest, 
RequestOptions.DEFAULT);
       }
   
       /**
        * Benchmark test dynamic es const query clause
        */
       @Benchmark
       @BenchmarkMode(Mode.AverageTime)
       @OutputTimeUnit(TimeUnit.MICROSECONDS)
       public void testDynamicEsConstQuery() throws IOException {
           SearchSourceBuilder sourceBuilder = 
SearchSourceBuilder.searchSource();
   
           long ranFactor = (long) (Math.random() * MULTIPLE);
           BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
           boolQueryBuilder.must().add(timeRangeQueryBuild(startTimestamp + 
ranFactor, endTimestamp + ranFactor));
   
           boolQueryBuilder.must().add(QueryBuilders.termQuery("is_address", 
0));
           boolQueryBuilder.must().add(QueryBuilders.termQuery("node_type", 0));
   
           sourceBuilder.query(new ConstantScoreQueryBuilder(boolQueryBuilder));
           sourceBuilder.size(SEARCH_SIZE);
           SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
           searchRequest.source(sourceBuilder);
           SearchResponse response = client.search(searchRequest, 
RequestOptions.DEFAULT);
       }
   
       /**
        * Benchmark test dynamic es filter query clause
        */
       @Benchmark
       @BenchmarkMode(Mode.AverageTime)
       @OutputTimeUnit(TimeUnit.MICROSECONDS)
       public void testDynamicEsFilterQuery() throws IOException {
           SearchSourceBuilder sourceBuilder = 
SearchSourceBuilder.searchSource();
   
           long ranFactor = (long) (Math.random() * MULTIPLE);
           BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
           boolQueryBuilder.must().add(timeRangeQueryBuild(startTimestamp + 
ranFactor, endTimestamp + ranFactor));
   
           boolQueryBuilder.must().add(QueryBuilders.termQuery("is_address", 
0));
           boolQueryBuilder.must().add(QueryBuilders.termQuery("node_type", 0));
   
           
sourceBuilder.query(QueryBuilders.boolQuery().filter(boolQueryBuilder));
           sourceBuilder.size(SEARCH_SIZE);
   
           SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
           searchRequest.source(sourceBuilder);
           SearchResponse response = client.search(searchRequest, 
RequestOptions.DEFAULT);
       }
   
   
       public static void main(String[] args) throws RunnerException, 
IOException {
           Options opt = new OptionsBuilder()
               .include(FilterQueryTest.class.getSimpleName())
               .forks(1)
               .build();
   
           new Runner(opt).run();
   //        FilterQueryTest filterQueryTest = new FilterQueryTest();
   //        filterQueryTest.createClient();
   //        filterQueryTest.testDynamicEsQuery();
   //        filterQueryTest.testDynamicEsQuery();
   //        filterQueryTest.testDynamicEsFilterQuery();
   //        filterQueryTest.closeClient();
   
       }
   
       private BoolQueryBuilder timeRangeQueryBuild(long startTimestamp, long 
endTimestamp) {
           BoolQueryBuilder boolQuery1 = QueryBuilders.boolQuery();
           
boolQuery1.should().add(QueryBuilders.rangeQuery("heartbeat_time").gte(startTimestamp));
           
boolQuery1.should().add(QueryBuilders.rangeQuery("heartbeat_time").lte(endTimestamp));
   
   
           BoolQueryBuilder boolQuery2 = QueryBuilders.boolQuery();
           
boolQuery2.should().add(QueryBuilders.rangeQuery("register_time").gte(startTimestamp));
           
boolQuery2.should().add(QueryBuilders.rangeQuery("register_time").lte(endTimestamp));
   
           BoolQueryBuilder timeBoolQuery = QueryBuilders.boolQuery();
           timeBoolQuery.should().add(boolQuery1);
           timeBoolQuery.should().add(boolQuery2);
   
           return timeBoolQuery;
       }
   }
   
   ```
   result :
   <img width="889" alt="WX20200202-005154@2x" 
src="https://user-images.githubusercontent.com/2892433/73595607-a28e6880-4555-11ea-853d-97d1fb93753b.png";>
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to