ClickHouse(Click Stream,Data WareHouse)是俄羅斯的 Yandex于2016年開源的用于在線分析處理查詢(OLAP:Online Analytical Processing)MPP架構的列式存盤資料庫(DBMS:Database Management System),能夠使用 SQL 查詢實時生成分析資料報告,特別值得稱道的是Clickhouse沒有走hadoop生態,采用 Local attached storage 作為存盤,而hadoop目前已經發展的臃腫不堪了,
Clickhouse的特點有:
-
列式存盤,在特定場景下,能夠獲得很高的訪問效率,并且節省空間
-
DBMS功能,幾乎覆寫了標準SQL的大部分語法,為傳統資料庫使用者提供熟悉的操控體驗
-
多樣化引擎
-
高吞吐寫入能力
-
資料磁區分片
-
單表查詢性能優異,多表JOIN查詢較差
-
適合于OLAP應用場景
-
Clickhouse社區活躍度高、版本迭代非常快,幾乎幾天到十幾天更新一個小版本,我們非常看好它以后的發展,
Clickhouse之所以速度超快,在于其優良的系統架構設計,以及多個方向的優化,
主要包括:
-
底層C++可以充分利用硬體優勢
-
摒棄了hadoop生態
-
資料底層以列式存盤
-
利用單節點的多核并行處理
-
為資料建立索引一級、二級、稀疏索引
-
使用大量的演算法處理資料
-
支持向量化處理
-
預先設計運算模型-預先計算
-
分布式處理資料
一、安裝
Clickhouse能夠運行在linux/macos上,對于windows仍然支持不夠,不建議在windows上嘗試安裝,但可以在windows上安裝它的客戶端,與Clickhouse官網提供的安裝方式不同,我們選擇使用apt安裝,
主要原因是:
-
雖然可以一鍵安裝,但對于網路連接的要求高,稍有錯誤則前功盡棄
-
大規模安裝時,無法控制進度與驗證
-
無法利用緩沖機制,因此不可能在離線環境下完成安裝
在ubuntu bionic上的安裝程序如下所示:
sudo apt-get update sudo apt-get -y install apt-transport-https ca-certificates dirmngr sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E0C56BD4 echo "deb https://repo.clickhouse.tech/deb/stable/ main/" | sudo tee /etc/apt/sources.list.d/clickhouse.list sudo apt-get update sudo apt-get install -y clickhouse-server clickhouse-client # 安裝成功后以服務方式啟動 sudo service clickhouse-server start # 使用客戶端連接 clickhouse-client --password
服務器組態檔位于/etc/clickhouse-server/config.xml,默認系結在回環地址(127.0.0.1)上,可以使用下述方式改變為遠程訪問支持,
vi /etc/clickhouse-server/config.xml # <listen_host>::</listen_host> sed -i 's/127.0.0.1/::/g' /etc/clickhouse-server/config.xml cat /etc/clickhouse-server/config.xml |grep listen_host
二、Python訪問
Clickhouse官網列出了python對應的庫:
-
infi.clickhouse_orm
-
clickhouse-driver
-
clickhouse-client
-
aiochclient
-
asynch
國內應用較為廣泛的是Clickhouse-driver,安裝程序如下:
pip install clickhouse-driver
訪問的示范代碼如下:
from clickhouse_driver import Client ch_host = '192.168.0.66' user = 'default' password = '8848is8848' dbname = 'default' tbname = 'pm25' # 連接并且查詢 client = Client(host=ch_host,user=user,password=password) def query(sqlstr): result = client.execute(sqlstr) print(result) query('show databases') query(f"DROP TABLE IF EXISTS {tbname}") query(f"CREATE TABLE {tbname} (x Int32) ENGINE = Memory") query('show tables') client.execute(f'insert into {tbname} values',((x,) for x in range(100))) query(f'SELECT * FROM {tbname} where x > 49 LIMIT 5')
以上代碼與普通的資料庫操作類似,還沒有體現出Clickhouse的優勢,后續文章將以海量測量資料為例,對Clickhouse與正宗的關系資料庫進行比較,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/544813.html
標籤:Python
下一篇:03運算子
