日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ClickHouse的特性及读写

發布時間:2024/7/5 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ClickHouse的特性及读写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 ClickHouse特性

??OLAP數據庫一般有2個要求:①容量要比關系型數據庫大,②在線查詢的速度要快。ClickHouse這兩點都滿足并且還支持標準的sql,支持比較復雜的語句,支持分布式。ClickHouse的幾個顯著特點如下:

??(1)列式存儲

??列式存儲的優點:①列式存儲不同于行式存儲,以行為單位進行存儲,行式存儲更變故搜索查詢。列式存儲以列為單位進行存儲,這樣更適合做聚合計算,如求和是針對一列的數據進行求和,這一列的數據又放在一起。②行式存儲每個字段類型不一致,列式存儲不同的類型是不在一起的,一個數據塊存儲的類型都是一致的,這樣的話就便于壓縮,類型相同壓縮算法發揮的空間就比較大,壓縮比高,所以海量數據的話就能對節省磁盤空間。③因為一個數據塊類型相同,壓縮比高,不僅節省了磁盤空間,還節省了內存空間,可以在內存中存儲更多的數據。

??列式存儲的缺點:不支持事務

??(2)支持DBMS的功能

??支持的SQL和關系型數據庫基本沒有什么差別,支持標準SQL的大部分語法,包括DDL和DML及各種函數。雖然ClickHouse可以修改數據結構,可以刪除數據,但是性能不好。

??(3)支持多種引擎

??ClickHouse與Mysql類型把表級別的存儲引擎插件化,支持的引擎可以分為6大類,用的最多的是MegreTree家族

2 ClickHouse的寫入

??一般關系型數據的寫入基本上是隨機寫,為了方便查詢,要知道插入的位置,找到合適的位置插入。寫入操作本事不重,但是要找到合適的位置就是個問題,隨機的讀寫,每次寫入位置不同,機械磁盤的磁頭就不同的轉找位置,所以寫入能力比較弱。像HBASE,也是隨機寫入,但是采用LSM樹進行是異步的寫入,先把數據寫到內存,就完事了,要插入的位置交給磁盤去處理。

??ClickHouse也是采用了LSM Tree結構數據寫入后定期在后臺合并。寫入操作是先寫到內存,然后在寫磁盤的時候不是寫到對應的位置,而是直接寫到一個臨時的分區里面,全部都堆在內存數據量大的話很麻煩,然后會簡單的做個排序,后臺會異步周期性的將臨時分區的數據合并到整個存儲分區中

3 ClickHouse的讀取

??ClickHouse將數據劃分為多個分區(partition),每個分區再進一步劃分為多個索引段(index ganularity)。把分區里面的數據劃分成細粒度的好處是可以多核并行處理。

??假設一個數據有3個分區,執行一條查詢SQL沒有指定任何分區的話就利用多線程,把SQL提交到每個分區查詢,每個CPU現成管理一個分區的數據查詢,最后合并結果。這種極致的并行處理能力極大的降低了查詢的延遲。但是因為查詢是多線程的,所以非常消耗CPU,每條SQL都是并行的,這樣的話帶來的問題就是并行查詢很多SQL的時候就會并發非常高,核數不夠的話CPU就會不停的在線程之間來回切換。CPU在大量線程里面輪轉本事就要消耗CPU,所以開銷更大。

??ClickHouse對一條SQL就已經是高并發,并行處理了,如果提交的SQL還是高并發就不適合使用ClickHouse。ClickHouse適合查詢數據量比較大,SQL比較復雜的查詢,他的單一SQL處理能力非常強,因為是并行的,如即席查詢,或者像大屏這種低頻的查詢。不適合開發給用戶,進行高QPS的查詢業務,他的QPS理論上比Mysql還要低。

4 與標準SQL的區別

4.1 Insert

??與標準SQL基本一致,包括標準的插入

INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...

??以及表到表的插入

INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...

??但是和hive不一樣沒有insert overwrite

4.2 Update,Delete

??ClickHouse有Update和Delete的能力,可看做是Alter的一種,但是和一般的OLAP數據庫不一樣,稱為Mutation查詢。Mutation的語法,其實是數據結構的調整,本身不是以數據為單位的修正。

??Mutation是很重的操作,因為每次修改或者刪除都會導致放棄目標數據原有的分區,意味著分區會被重寫,假設我們以天為分區。假設一個分區內的數據有被刪除或者修改了。刪除的話他是把這個分區的數據重新的再建立一個新分區,沒有刪除的數據就會重新復制一份,老分區的數據暫時不動,做數據合并的時候他會被刪除掉。我們查的時候感覺不出,其實分區已經替換了,所以是個很重的操作,而且不支持事務。Mutation支持分為兩步,同步的操作時在新增數據新增分區的時候把就分區打上邏輯上的失敗標記,指導觸發合并的時候才會刪除就數據釋放磁盤空間

??所以要做Update和Delete的話盡量做批量的操作,不進行頻繁的小數據操作。

??刪除

ALTER TABLE [db.]table [ON CLUSTER cluster] DELETE WHERE filter_expr

??修改

ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr

4.3 Select

??select查詢與標準SQL差別不大:①支持子查詢②支持with子句③支持join(不推薦,join無法使用緩存)④但是不支持窗口函數⑤不支持自定義函數,mysql可以做個function自定義函數,還有存儲過程,hive有個變相的方法語法上不支持,但是可以寫代碼自定義jar包發布成一個函數。ClickHouse是c++寫的,只能通過改源碼編譯可能支持部分的,只能是常駐特別簡單的,針對業務的函數不可能每次重編譯,所以不行。⑥group by操作增加了按照維度來計算匯總的操作:with rollup(上卷)從右往左依次去掉維度匯總/with cube(立方體)從右邊開始去完維度,從左邊開始去維度;/with total(只計算合計)等操作

4.4 Alert

??可以根據字段或者數據結構進行調整,這種alert都是比較重,一般都是在夜里批量的操作

ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...

4.5 導出數據

??即席查詢往往是從數據庫里臨時需要導出一張報表來導出execel讓業務人員去用,所以導出是常用的,常用的就是csv,csvwithNames是帶表頭的

clickhouse-client --query="SELECT * FROM {some_table} FORMAT Avro" > file.avro

??對應的插入語句為

cat file.avro | clickhouse-client --query="INSERT INTO {some_table} FORMAT Avro" 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的ClickHouse的特性及读写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。