漫談OceanBase 列式存儲

列式存儲主要的目的有兩個:數據庫

  • 大部分OLAP查詢只須要讀取部分列而不是所有列數據,列式存儲能夠避免讀取無用數據;
  • 將同一列的數據在物理上存放在一塊兒,可以極大地提升數據壓縮率。

OLAP和OLTP

OLAP,也叫聯機分析處理(Online Analytical Processing)系統,有的時候也叫DSS決策支持系統,就是咱們說的數據倉庫。在這樣的系統中,語句的執行量不是考覈標準,由於一條語句的執行時間可能會很是長,讀取的數據也很是多。因此,在這樣的系統中,考覈的標準每每是磁盤子系統的吞吐量(帶寬),如能達到多少MB/s的流量。併發

在OLAP系統中,常使用分區技術、並行技術。性能

分區技術在OLAP系統中的重要性主要體如今數據庫管理上,好比數據庫加載,能夠經過分區交換的方式實現,備份能夠經過備份分區表空間實現,刪除數據能夠經過分區進行刪除,至於分區在性能上的影響,它可使得一些大表的掃描變得很快(只掃描單個分區)。另外,若是分區結合並行的話,也可使得整個表的掃描會變得很快。總之,分區主要的功能是管理上的方便性,它並不能絕對保證查詢性能的提升,有時候分區會帶來性能上的提升,有時候會下降。優化

在OLAP系統中,不須要使用綁定(BIND)變量,由於整個系統的執行量很小,分析時間對於執行時間來講,能夠忽略,並且可避免出現錯誤的執行計劃。可是OLAP中能夠大量使用位圖索引,物化視圖,對於大的事務,儘可能尋求速度上的優化,沒有必要像OLTP要求快速提交,甚至要刻意減慢執行的速度。spa

綁定變量真正的用途是在OLTP系統中,這個系統一般有這樣的特色,用戶併發數很大,用戶的請求十分密集,而且這些請求的SQL 大多數是能夠重複使用的。設計

OLTP,也叫聯機事務處理(Online Transaction Processing),表示事務性很是高的系統,通常都是高可用的在線系統,以小的事務以及小的查詢爲主,評估其系統的時候,通常看其每秒執行的Transaction以及Execute SQL的數量。在這樣的系統中,單個數據庫每秒處理的Transaction每每超過幾百個,或者是幾千個,Select 語句的執行量每秒幾千甚至幾萬個。典型的OLTP系統有電子商務系統、銀行、證券等,如美國eBay的業務數據庫,就是很典型的OLTP數據庫。blog

列組(Column Group)

OceanBase經過列組支持行列混合存儲,每一個列組存儲多個常常一塊兒訪問的列。
OceanBase 列組設計
如上圖所示,OceanBase SSTable首先按照列組存儲,每一個列組內部再按行存儲。分爲幾種狀況:索引

  • 全部列屬於同一個列組。數據在SSTable中按行存儲,OLTP應用每每配置爲這種方式。
  • 每列對應一個列組。數據在SSTable中按列存儲,這種方式在實際應用中比較少見。
  • 每一個列組對應一行數據的部分列。數據在SSTable中按行列混合存儲,OLAP應用每每配置爲這種方式。
相關文章
相關標籤/搜索