中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現ClickHouse與 Elasticsearch聚合性能對比測試

發布時間:2021-12-16 17:32:22 來源:億速云 閱讀:487 作者:柒染 欄目:大數據

本篇文章為大家展示了如何實現ClickHouse與 Elasticsearch聚合性能對比測試,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Elasticsearch以其優秀的分布式架構與全文搜索引擎等特點在機器數據的存儲、分析領域廣為使用,但隨著數據量的增長,其聚合分析性能已無法滿足業務需求。而ClickHouse作為一個高性能的OLAP列式數據庫管理系統有望解決這一痛點。

本文是對ClickHouse與Elasticsearch聚合性能的簡單對比測試。主要關注查詢語句的響應時間,暫不考慮資源占用情況。

組件版本CPU內存
ClickHouse7.9.04C8G
Elasticsearch20.11.4.134C8G

使用ClickHouse官方提供的測試數據集,共67G,約6億行。

如何實現ClickHouse與 Elasticsearch聚合性能對比測試

其中,ClickHouse使用LO_ORDERDATE字段作為分區鍵,使用LO_ORDERDATE, LO_ORDERKEY作為排序鍵。


某字段出現次數TOP 10

 
# ClickHouse
SELECT LO_SHIPMODE,COUNT() FROM lineorder GROUP BY LO_SHIPMODE ORDER BY COUNT() DESC LIMIT 10

# Elasticsearch
GET lineorder/_search
{
 "aggs": {
   "1": {
     "terms": {
       "field": "LO_SHIPMODE.keyword",
       "order": {
         "_count": "desc"
       },
       "size": 10
     }
   }
 },
 "size": 0
}
     

某字段按年進行計數

 

# ClickHouse
SELECT toYear(LO_ORDERDATE),COUNT() FROM lineorder GROUP BY toYear(LO_ORDERDATE) FORMAT PrettyCompactMonoBlock

# Elasticsearch
GET lineorder/_search
{
 "aggs": {
   "2": {
     "date_histogram": {
       "field": "LO_ORDERDATE",
       "calendar_interval":"1y",
       "format":"yyyy-MM-dd"
     }
   }
 },
 "size": 0
}
     

多個字段按年進行統計


# ClickHouse
SELECT LO_ORDERDATE,LO_ORDERKEY,LO_SHIPMODE,LO_ORDERPRIORITY,LO_COMMITDATE FROM lineorder WHERE LO_ORDERDATE >= '1992-01-01' AND LO_ORDERDATE < '1993-01-01' ORDER BY LO_ORDERDATE  LIMIT 500

# Elasticsearch
GET lineorder/_search
{
 "size": 500,
 "sort": [
   {
     "timestamp": {
       "order": "desc",
       "unmapped_type": "boolean"
     }
   }
 ],
 "query": {
   "bool": {
     "must": [],
     "filter": [
       {
         "match_all": {}
       },
       {
         "match_all": {}
       },
       {
         "range": {
           "LO_ORDERDATE": {
             "gte": "1992-01-01",
             "lte": "1993-01-01",
             "format": "strict_date_optional_time"
           }
         }
       }
     ],
     "should": [],
     "must_not": []
   }
 }
}
     

基于時間的多字段聚合


# ClickHouse
SELECT toYear(LO_ORDERDATE),LO_SHIPMODE,COUNT() FROM lineorder GROUP BY toYear(LO_ORDERDATE),LO_SHIPMODE ORDER BY toYear(LO_ORDERDATE) FORMAT PrettyCompactMonoBlock

# Elasticsearch
GET lineorder/_search
{
 "aggs": {
   "3": {
     "terms": {
       "field": "LO_SHIPMODE.keyword",
       "order": {
         "_count": "desc"
       },
       "size": 10
     },
     "aggs": {
       "2": {
         "date_histogram": {
           "field": "LO_ORDERDATE",
           "calendar_interval": "1y",
           "time_zone": "Asia/Shanghai",
           "min_doc_count": 1
         }
       }
     }
   }
 },
 "size": 0
}
     

基于時間的多字段聚合


# ClickHouse
SELECT toYear(LO_ORDERDATE),LO_SHIPMODE,COUNT() FROM lineorder GROUP BY toYear(LO_ORDERDATE),LO_SHIPMODE ORDER BY toYear(LO_ORDERDATE) FORMAT PrettyCompactMonoBlock

# Elasticsearch
GET lineorder/_search
{
 "aggs": {
   "3": {
     "terms": {
       "field": "LO_SHIPMODE.keyword",
       "order": {
         "_count": "desc"
       },
       "size": 10
     },
     "aggs": {
       "2": {
         "date_histogram": {
           "field": "LO_ORDERDATE",
           "calendar_interval": "1y",
           "time_zone": "Asia/Shanghai",
           "min_doc_count": 1
         }
       }
     }
   }
 },
 "size": 0
}
     

聚合嵌套(非時間字段)


# ClickHouse
SELECT LO_SHIPMODE,COUNT(LO_SHIPMODE),LO_ORDERPRIORITY,COUNT(LO_ORDERPRIORITY) FROM lineorder GROUP BY LO_SHIPMODE,LO_ORDERPRIORITY ORDER BY COUNT(LO_SHIPMODE),COUNT(LO_ORDERPRIORITY) LIMIT 5 BY LO_SHIPMODE,LO_ORDERPRIORITY

# Elasticsearch
GET lineorder/_search
{
 "aggs": {
   "2": {
     "terms": {
       "field": "LO_SHIPMODE.keyword",
       "order": {
         "_count": "desc"
       },
       "size": 5
     },
     "aggs": {
       "3": {
         "terms": {
           "field": "LO_ORDERPRIORITY.keyword",
           "order": {
             "_count": "desc"
           },
           "size": 5
         }
       }
     }
   }
 },
 "size": 0
}
 

 
聚合場景ck(ms)es(ms)性能對比
基于時間的多字段聚合550615599近3倍
多個字段按年進行計數(數據表)381626716倍多
某字段出現次數 TOP 10(餅圖)40487317近2倍
某字段按年進行計數(時間趨勢圖)9012325725倍多
聚合嵌套(非時間字段)6937157672倍多

相同數據量下,ClickHouse的聚合性能都要優于Elasticsearch,且如果基于排序鍵進行聚合,性能更好,是ES的數倍。
此外,ClickHouse的SummaryMergeTree、AggregatingMergeTree表引擎支持后臺自動聚合數據,所以在某些場景下其聚合分析性能會更優。

上述內容就是如何實現ClickHouse與 Elasticsearch聚合性能對比測試,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泽普县| 红桥区| 石林| 繁峙县| 银川市| 云阳县| 武隆县| 阜新市| 岚皋县| 乌拉特后旗| 霍城县| 启东市| 剑川县| 新和县| 垣曲县| 达拉特旗| 潜江市| 三原县| 尖扎县| 肃宁县| 锡林郭勒盟| 云霄县| 芜湖县| 肥东县| 泰和县| 开鲁县| 湄潭县| 信宜市| 象山县| 峨边| 玛沁县| 江陵县| 鞍山市| 盐边县| 霍林郭勒市| 兴城市| 兴山县| 图木舒克市| 新密市| 金塔县| 高邑县|