タグ別アーカイブ: カラム型

hadoop – Googleの虎の子「BigQuery」をFluentdユーザーが使わない理由がなくなった理由 #gcpja – Qiita

なぜBigQueryはこんなインチキ臭いほどに高速なのか。BigQueryは、Cloudera Impara等のいまどきの大規模並列(Massively Parallel Processing/MPP)クエリエンジンや過去のデータウェアハウスマシンと同じくカラム型のデータ分析専用データベースである。しかし、他の多くのカラム型DBとBigQueryとの間には量子的飛躍が存在する。それは、並列度のオーダーだ。BigQueryでは、ひとつひとつのクエリを実行するたびに数百台〜数千台のマシンが同時並列に検索を実行している(←ケタ間違えていません)。文字通り、massivellyな並列処理だ。その上、インデックスは一切作らず、すべてディスクのフルスキャン(テーブルスキャン)で処理する。

1クエリに数千台、すべてフルスキャン。。この2点を初めて聞いた時はしばらく信じられなくて、BigQueryを開発したGoogleエンジニアに2〜3回は確認してしまった。

この恐ろしいまでの並列性には理由がある。Google社内において、「1TBのデータを1秒でフルスキャンするには、いったい何台のディスクドライブを並列に回せばよいのか?」という実験をし、その結果得られた答えが5,000台。それならば、Googleのデータセンターにすでに無数にあるディスクでクエリを並列実行できるカラム型DBを作ってみよう、というのがBigQueryの生まれた発想である。Google、おおざっぱすぎる。

数十程度の並列度のMPPクエリサービスとは、"massively"の意味がまるきり違う。私はつねづね、こういうのが本来の意味でのクラウド(=データや計算をデータセンター全体に薄く広く分散させるアーキテクチャ)なんだなと思う。

引用元: hadoop – Googleの虎の子「BigQuery」をFluentdユーザーが使わない理由がなくなった理由 #gcpja – Qiita.

カラム型データベースでトランザクション処理を実現するカラクリとは? インメモリとカラム型データベースの可能性を調べる(その5) - Publickey

データベースに対する追加、更新、削除が行われると、その操作はすべてL1デルタに書き込まれます。L1デルタは行指向のデータベースと同じ構造になっており、圧縮もされず、変更内容はすべて追記されるだけなので、この書き込み処理はきわめて高速に実行されます。

そしてL1デルタに書き込んだ時点で(そしてその操作をログに書き込みが終了した時点で)、アプリケーションからは見た処理は完了します。これにより、HANAはきわめて高速にデータの追加削除更新の処理を行ったように見えます。

L1デルタに書き込まれた内容は、バックグラウンドでL2デルタに変換されます。L2デルタはカラム型データベースの形式になっており、辞書による圧縮(重複する情報の圧縮)が行われます。

L2デルタでカラム型に変換されたデータは、次にメインストアにマージされます。メインストアではさらに高度な圧縮や高速アクセスのための辞書のソート配置、列の中の特定データの位置をすぐに指し示すための転置インデックスの配置などが行われます。

L1デルタにはおおむね1万から10万件のデータが保持されることが想定され、L2デルタにはおおむね最大1000万件のデータが保持されることが想定されています。メインストアには、それ以上の全データを保存することが想定されます。L1デルタからL2デルタ、L2デルタからメインストアへの変換は、すべてマルチコアを活用したバックグラウンド処理で行われます。

これが、カラム型データストアで高速にデータの追加削除更新を行うHANAの仕組みです。

カラム型データベースに対して直接、追加削除更新などを行うのではなく、その手前に従来のデータベースと同じ行指向のデータベースを置き、そこでとりあえず高速に処理を済ませてしまう。その後バックグラウンドでカラム型データベースへ変換する。

引用元: カラム型データベースでトランザクション処理を実現するカラクリとは? インメモリとカラム型データベースの可能性を調べる(その5) - Publickey.