數據倉庫一些整理(列式數據庫)【轉】

術語備註:

 

 
一、OLTP。這是on-line transaction processing的簡寫。翻譯成聯機事務處理。就是在線交易的業務數據。這方面的數據庫是關係型數據庫。
 
二、OLAP。On-Line Analytical Processing 翻譯成聯機分析處理。通俗理解,就是作數據統計、分析的平臺。順應這個需求產生了數據倉庫的概念。
 
三、數據倉庫。只是一個概念,數據的倉庫。搭建數據倉庫的技術方案能夠是關係型數據庫,也能夠是列存儲。爲了通俗理解,能夠把數據倉庫和OLAP看做一個東西。
 
四、商業智能BI。本質仍是依賴於數據倉庫作支持的,沒有數據存儲,沒有大量數據,沒法統計、沒法分析。
 
 
 
怎麼來理解或區分數據庫和數據倉庫的關係
 
業界常常說的術語是OLTP,這是on-line transaction processing的簡寫。聯機事務處理。
OLAP是On-Line Analytical Processing 翻譯成聯機分析處理。
 
從名字來看,能夠看出一個側重事務處理。一個側重分析處理。事務處理,就是交易數據。如訂單、商品等數據的增刪查改。分析處理,要對這些數據分析出統計結果。分析處理,就要使用數據倉庫來存儲數據了,要與業務數據庫分開,而數據來自於業務數據庫。
 
聯機交易處理使用的是交易型數據庫,即行式存儲關係型數據庫如oracle、sqlserver、mysql。
 
聯機分析處理使用的是分析型數據庫,即列式關係型數據庫hbase、hive、clickhouse等。
 
 
數據倉庫只是一個概念,至於用什麼數據庫,隨本身。對數據的分析處理,獲得統計結果,歸到數據倉庫裏面去,以提供在線查詢。
 
 
數據庫中的建模通常遵循三範式,而數據倉庫的建模有特定的方式,通常採用維度建模。
 
 
 
 
爲何數據倉庫喜歡使用列式關係型儲數據庫?
 
數據倉庫使用的技術方案,有不少種。可使用關係型數據庫mysql,目前,業界通常使用列存儲。
 
 
爲何不用mysql等行存儲關係數據庫來作數據倉庫? 而通常使用列存儲數據庫, 是考慮到數據倉庫的如下特色:
 
一、數據倉庫的數據來源多個系統。多是文件、多是其餘關係型數據庫中的交易數據。
 
二、須要多個維度創建數據統計模型。
 
三、存儲數據量。歷史的,存檔的,概括的,計算的數據。
 
四、須要訪問大量的記錄才能統計出結果。若是統計性能上不能很慢,沒法出統計結果。就知足不了分析統計的需求。
 
涉及到複雜的聚合統計查詢,這類系統就比較難以處理了,好比要查詢某一些類型的用戶過去三個月購買最多的商品,由於同一時間須要查詢大量數據,OLTP(關係數據庫) 系統並不擅長處理這類需求。
 
五、更新數據不多。都是添加數據、查詢數據。因而對查詢速度要求高。
 
 
列式型關係數據庫,使用上與mysql同樣,都是sql語句操做,也是關係表設計。惟獨底層存儲原理不同。下面解釋。
 
對比行存儲和列存儲
 
下面來看網上找的一張圖,對比行存儲和列存儲
 
 
 
行存儲的一行數據(此行的全部數據)都在一塊兒,緊接着就是第二行數據,依次下去。
列存儲不一樣的是,一列的全部數據都放在一塊兒了。
 
 
 
 
​從上圖能夠很清楚地看到,行式存儲下一張表的數據都是放在一塊兒的,但列式存儲下都被分開保存了。因此它們就有了以下這些優缺點:
 
行式存儲
列式存儲
優勢
Ø 數據被保存在一塊兒 Ø INSERT/UPDATE容易
Ø 查詢時只有涉及到的列會被讀取 Ø 投影(projection)很高效 Ø 任何列都能做爲索引
缺點
Ø 選擇(Selection)時即便只涉及某幾列,全部數據也都會被讀取
Ø 選擇完成時,被選擇的列要從新組裝 Ø INSERT/UPDATE比較麻煩
注:關係型數據庫理論回顧 - 選擇(Selection)和投影(Projection)
 
 
列存儲在作join聯合的時候,效率更高。
 
 
在列存儲中,下面查詢語句:select customers,material from table where customers="miler" and material="refrigerator"
 
 
 
 
一列的全部數據都在一塊,因此每一列都是一個索引。對一列數據壓縮也很方便,變成數字存儲了。存儲空間變小,存儲空間變小,操做速度就更快。
 
 
關鍵步驟以下:
1. 去字典表裏找到字符串對應數字(只進行一次字符串比較)。
2. 用數字去列表裏匹配,匹配上的位置設爲1。
3. 把不一樣列的匹配結果進行位運算獲得符合全部條件的記錄下標。
4. 使用這個下標組裝出最終的結果集。
 
 
 
 
 
 
 
 
 
 
 
下面筆者整理了業界常來搭建數據倉庫的數據庫
 
在數據倉庫領域的收費列數據庫
 
一、惠普公司的Vertica
二、oracle公司Oracle Warehouse Builder的
三、sybase公司的Sybase IQ/SAPIQ
四、mysql公司出的Infobright。
五、Greenplum公司的Greenplum
 
互聯網公司自主研發的
 
一、華爲的Carbondata
二、百度研發給內部使用的palo。
三、騰訊Hermes
四、Druid:廣告分析,互聯網廣告系統監控、度量和網絡監控。開源免費。
五、俄羅斯的yandex公司爲本身內部統計須要研發的clickhouse。yandex爲俄羅斯的"百度"、"百度統計"業務。2016年6月份纔開源發佈出來。這個文檔全,對php語言支持好。性能不弱於百度的palo。
 
數據庫名稱
所屬公司
是否商業收費
優勢
缺點
說明
列式存儲(非行存儲)
Oracle Warehouse Builder(OWB)
oracle
商業收費
未知
未知
未知
未知
SybaseIQ/SAPIQ
SAP
商業收費
   
SAP公司收購數據庫公司SYbase的產品。Sybase  IQ擁有列式存儲、網格架構、專利的數據壓縮、先進的查詢優化器。電信和金融行業的客戶較多
Vertica
惠普公司
商業收費
未知
未知
   
hbase
Apache的Hadoop項目的子項目
開源免費
很適合統計多維度數據。目前看資料,樂視的視頻雲涉及到視頻多維度統計從redis、mysql遷到hbase,響應需求更快。Facebook用在不少業務中。
一、搭建和維護HBase是很繁瑣的,引入不少學習成本,遇到問題還要排查。二、Php操做hbase,須要安裝一facebook的服務thrift,這個服務安裝沒成功。一箇中間服務,不夠簡單。
hbase與google的表格存儲數據庫bigtable是同一種東西。列存儲。hbase是模仿bigtable產生的。
hive
 
開源免費
 
一、查詢速度比較慢。二、基於MapReduce來處理數據。須要理解mapreduce,會寫這種。目前來看很差上手
 
否,只是一中架構。
palo
百度
開源免費
用在百度統計以及百度其餘應用。
網上的使用資料比較少。要使用直接使用百度雲提供的付費服務。百度雲目前提供了付費服務  https://cloud.baidu.com/product/palo.html
 
列存儲
clickhouse
俄羅斯的Yandex
開源免費
查詢速度快,SQL語句操做。
一、文檔齊全。有官網。支持php、.net等各種語言,官網直接提供了各種語言的庫。二、速度很快。通過Yandex公司自身的實踐考驗。俄羅斯的nginx也是久經考驗。
此公司相似於中國的 百度和百度統計業務。爲應對自身內部須要而開發
列存儲
Infobright
MySql公司
開源免費,有商業版和社區版
 
一、社區版不支持更改數據。只能載入數據。二、社區版只能支持10多個併發查詢 三、世面上用的人少。
 
列存儲
Greenplum
Greenplum
商業收費
   
基於關係數據庫PostgreSQL作存儲
列存儲
Druid
 
免費
     
列存儲
 
 
 
從上表中總結幾個開源免費的:
 
典型列存儲表明:
 
1、hbase
 
php操做hbase須要另外安裝facebook開發的異構語言服務thrift。這點麻煩。我試驗過。目前樂視雲的視頻統計從redis轉到了hbase。
 
2、百度的palo(用在百度統計以及百度其餘應用)。網上的使用資料比較少。要使用直接使用百度雲提供的付費服務。百度雲目前提供了付費服務
 
 
 
3、俄羅斯的clickhouse。clickhouse比palo的性能要更強。
 
屬於Yandex,此公司相似於俄羅斯的百度和百度統計。爲了應對自身同統計須要而開發。目前已經開放出來使用。
對各類語言的支持要更好,php、python、.net等操做數據庫的客戶端庫,在官網直接提供了。
 
 
 
 
 
 
 
 
 
筆者推薦使用clickhouse。對比幾個,對比目前可選的,從對上手程度、免費、對php的支持三個角度分析,只有這個最合適了
 
 
 
 
 
 
爲何不能使用Mongodb來作數據倉庫?
 
設計初衷不一樣
 
SQL與NoSQL最大的不一樣之一就是不支持JOIN,在傳統的數據庫中,SQL JOIN子句容許你使用普通的字段,在兩個或者是更多表中的組合表中的每行數據。
 
面向文檔的數據庫,例如MongoDB,被設計用來存儲非結構化的數據,理想狀況下,這些數據是在數據集合中是相互沒有關聯的。一個集合,能夠看做mysql中的一個表。
 
雖然mongodb是支持關聯查詢,可是很是弱。使用關聯查詢性能立刻就下來很多了。它自己的定位不是關係型數據庫。
 
數據倉庫的特色,它存在多個維度,關係比較複雜,必須使用關係型數據庫來創建數據模型。而關係型數據庫,目前基於行存儲的關係型數據庫mysql,在數據量大的時候,須要分表等操做,存在性能問題,因此業界使用基於列存儲的關係數據庫來作數據倉庫。
 
故數據倉庫這種比較複雜的邏輯關係處理,不要使用mongodb。
 
 
 
 
對clickhouse的研究狀況
 
 
 
對列式數據庫clickhouse,目前部署環境還順利。發現對php操做數據庫的支持、界面管理數據庫的工具,官網都有直接提供。真是專門爲花不起錢買商業數據庫、又想技術維護門檻低的創業公司,準備的數據倉庫軟件,是另外一個「MySQL」。
 
 
源碼是c++寫的。
 
此數據庫,百度能搜索到的資料並很少,都是看官網英文。
 
緣由是:數據倉庫通常上規模的公司纔會去使用;而一旦涉及,他們要麼本身研發列式數據庫,要麼是購買商業列數據庫解決方案。如華爲Carbondata 、騰訊Hermes、瀋陽延雲YDB。惠普公司的Vertica數據庫,Facebook購買是這個數據庫作用戶行爲分析。
 
 
我以前在表格中列出了一些列數據庫。要麼是商業收費的,要麼是上手不容易,要麼功能限制太多。因此既要免費,又要功能和性能知足,可選的不多。
 
 
 
 
目前實際測驗看,這個數據庫確實是另外一個「mysql」,適合創業公司特色:
 
一、免費卻不輸於商業數據倉庫。網上別人公開的測驗數據看,性能不比惠普公司等提供的商業列式存儲數據庫差。與百度本身研發列數據庫palo,也進行過性能對比,各有千秋,不輸。
 
二、好上手,維護成本低。對php支持良好。界面管理工具也全。
 
三、擴展方便。支持分佈式和數據複製。
 
四、通過俄羅斯最大的搜索引擎公司yandex,內部場景運行後開源出來的。因爲是2016年6月纔開源出來,故國內公司使用很少,畢竟已經使用了商業數據倉庫的,遷移要權衡。
 
 
俄羅斯人作東西挺給力,給了個著名的nginx的,風靡超過apache。
 
 
下面給試驗數據
 
 
 
count速度是很快的,一億條數據,
 
 
導入的官網提供的航空數據1.7億條數據測驗
 
 
https://www.cnblogs.com/wangtao_20/p/8294974.html
相關文章
相關標籤/搜索