使用Google Supersonic查詢列存儲數據庫
英文原文:Querying Columnar Databases with Google Supersonic
Supersonic 是一個面向列存儲數據庫的查詢引擎庫,它提供了一組數據變換原語。而且 Google 宣稱,因為“大量使用了高速緩存感知算法、SIMD 指令和矢量化執行,使之能夠開發出現代超級流水線處理器的能力與資源”,這些數據變換原語“超級快速”。Supersonic 有以下主要特性:
- 高速緩存感知

- 指令流水線
- 使用 SIMD(Single Instruction Multiple Data,單指令多數據)
- 定制數據結構
- 失效處理
- 支持標準的列存儲操作
- 專門化的表達式 </ul>
- 聚合:SUM、MIN、MAX、COUNT、CONCAT、FIRST、LAST
- 計算:將表達式(下面有更多關于表達式的信息)轉換為操作
- 過濾:過濾列存儲表的行
- 生成:創建一定數量的沒有列的行
- 限制:限制從前一操作所得結果的行數
- 排序:將前一操作的結果排序 </ul>
- 末端:葉節點,其中包含的是基本類型,如 ConstInt32、ConstBool、ConstDataType、RandInt32等
- 算數運算:Plus、Minus、Multiply 等
- 比較運算:Equal、Less、Greater、IsOdd 等
- 日期/時間運算:Now、Day、Month、Year、Hour、Minute、Second、AddDays 等
- 邏輯運算:And、Or、AndNot、Xor、Not
- 控制流:If、IsNull、IfNull、Case
- 數學運算:Exp、Sin、Cos、Abs、Round、Floor、Trunk、Sqrt、Power 等
- 字符串:ToString、Concat、Length、Trim 等 </ul>
Supersonic 支持大量的操作(operation),這些操作既可以用于整個表,也能組合為操作樹:
與操作不同的是,表達式(expression)應用于行級,負責在單個的列值上執行真正的計算。表達式也可以組合成表達式樹。下面列出一些表達式:
Supersonic 使用 C++ 編寫,而且沒有內置的數據存儲格式,但是現在有“很強的意圖”來創建一個。數據當前保存在內存中。
Supersonic 查詢引擎基于 Apache License 2.0許可發布,可以從它的 Google Code 網站下載。為了說明針對列存儲表如何使用操作與表達式,源代碼中提供了大量的例子。
附圖是 Supersonic 團隊給出的,表示按如下方式處理一個行數為 1M 的表所得到的帶有基準測試結果的操作樹: 一個視圖的獲取要花費 60 微秒(速度為 16.7G rows/s),隨后過濾用掉1.03毫秒(速度為 1M rows/s),后面是一個耗時 25 微秒的計算(速度為 41.2M rows/s),然后結果與另一個過濾結合,整個測試耗時 22.1 毫秒。
來自: InfoQ
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!