スキップしてメイン コンテンツに移動

投稿

2014の投稿を表示しています

疑似コードで、昨今のIn-Memoryとかカラム型とかを味わう

とうとう、 JPOUG Advent Calendar 2014 も最終日となりました。今年もご参加頂いた皆様に感謝しつつも、去年に続き、オオトリを務めさせていただきます。 Oracleデータベースも12.1.0.2というバージョンでIn-Memoryかつカラム型で分析系ワークロード用を高速化するオプションが導入されていることはご存じの通りです。 このIn-Memoryオプションという文脈で "ディスクは遅くメモリーは速い。だからIn-Memoryなデータベースは速い" とか "分析系ワークロードはカラム型といったデータフォーマット合っている。だからカラム型が速い" とか "データベースの処理をSIMD(シムディー)とかVector処理といった処理で行うと速い" とか なかなか、上記のキーワードがどのようにデータベース処理と関連しているか不明な状態で説明されることが多いのではないか。と思う今日この頃です。 今日は、In-Memoryやカラム型やSIMDといったキーワードを自分なりに関連あることとして、ここにメモ書きを残そうと思います。 言葉でアレコレ説明しても、よく分からん。(どなたかはSIMDの気持が知りたい。と仰っていた)なので、とてつもなくシンプルな疑似コードで説明してみたいと思います。 * ちなみに、以下示される疑似コードはOracleとも他のデータベースの作りとも全く関係ありません。目的は、疑似コードで処理のイメージを掴めれば良い程度の簡単なものです。(要はこんなにデータ構造はシンプルではないですし、コードもこんなに非汎用的ではないですし、正直、WHERE句のSIMD適用はこんなにお手軽ではないですし) 前提) 以下のような数十カラムを含むテーブル構成で1億件のランダムなデータが入っていると想定 SQLで書くと以下のような感じ create table large_table ( l_quantity number ,l_tax number ,... ,(沢山) ,... ); こんなテーブルをコードで書くと(とりあえずC)、以下のような構造体の配列(これは通常のロー型を想定)になると思います typedef stru