您好,登錄后才能下訂單哦!
本篇內容主要講解“如何用ClickHouse存儲時序數據”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何用ClickHouse存儲時序數據”吧!
我們需要存儲結構化時序數據,時間間隔為5分鐘或1分鐘,計算95峰值
、995峰值
、最值
等指標,并且在網頁中展示。
項目開發初期,為了快速開發原型,驗證產品,我們使用MySQL作為整個項目的存儲。帶來的問題是時序數據庫范圍分析查詢耗時很長,計算30天的數據需要30s+,到了無法容忍的地步,即便是創建索引、使用BitInt存儲時間戳,幾乎沒有性能提升。
后來我們組其他同事說換ClickHouse來存儲時序數據,于是我們就開始了替換之旅。
ClickHouse是面向OLAP(在線分析處理)、兼容SQL標準的列式數據庫,主要的不足是不支持事務
。因此我們目前沒有把整個存儲都遷移到ClickHouse上,而是只把時序數據存過來。
本以為替換過程會很麻煩,可能修改大量的代碼和邏輯,實際上很快,因為之前接口的邏輯設計很合理,所以只替換了數據庫ORM庫,從gorm換成了sqlx,花了1天時間(前期重構邏輯花了1個星期我會亂說
)。
更重要的是,ClickHouse提供了很多聚合函數,之前計算95值需要2次查詢,而現在只需要一次查詢就夠了,對應的SQL如下:
select d.en_name, max(d.in_value) as peak_in,
max(d.out_value) as peak_out, max(d.max_value) as peak_max,
quantileExact(0.95)(d.out_value) as peak_95,
quantileExact(0.995)(d.out_value) as peak_995,
quantileExact(0.999)(d.out_value) as peak_999
from table_value d where d.record_time >= '2020-01-01 00:00:00' and d.record_time <= '2020-01-31 23:59:59'
group by d.en_name
經驗證,ClickHouse是真的牛逼,30天內的查詢耗時從30s降到2s內,提升了15倍!!!
下圖是ClickHouse的測試結果,x軸表示查詢的時間范圍,最大12個月,最小1個月,共測試12次。可以看到大部分耗時在3s內。
下圖是MySQL存儲中的測試結果(忽略標題),分別計算1、2、3個月范圍的數據,共查詢1次,耗時都在100s以上。
到此,相信大家對“如何用ClickHouse存儲時序數據”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。