使用Google Supersonic查詢列存儲數據庫

jopen 13年前發布 | 9K 次閱讀 Google

        英文原文:Querying Columnar Databases with Google Supersonic

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

  • 高速緩存感知使用Google Supersonic查詢列存儲數據庫
  • 指令流水線
  • 使用 SIMD(Single Instruction Multiple Data,單指令多數據)
  • 定制數據結構
  • 失效處理
  • 支持標準的列存儲操作
  • 專門化的表達式
  • </ul>

            Supersonic 支持大量的操作(operation),這些操作既可以用于整個表,也能組合為操作樹:

    • 聚合:SUM、MIN、MAX、COUNT、CONCAT、FIRST、LAST
    • 計算:將表達式(下面有更多關于表達式的信息)轉換為操作
    • 過濾:過濾列存儲表的行
    • 生成:創建一定數量的沒有列的行
    • 限制:限制從前一操作所得結果的行數
    • 排序:將前一操作的結果排序
    • </ul>

              與操作不同的是,表達式(expression)應用于行級,負責在單個的列值上執行真正的計算。表達式也可以組合成表達式樹。下面列出一些表達式:

      • 末端:葉節點,其中包含的是基本類型,如 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 使用 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
         轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
         本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!