スタースキーマと単一の非正規化テーブルを使用して、ベクターごとにいくつかのテストを実行しています。非正規化されたテーブルには、varchar (100) を超える 5 つの余分な列があります。私は列指向の世界に慣れていないので、事実を正しく理解するために理解したいと思っています。
いくつかの事実 :
クエリメモリ = 20G、キャッシュメモリは 7G に設定
名前の列だけのサイズは、約 6G、6.5G、2.6G、および 650M です。明らかに、これらは私のキャッシュメモリに収まらないため、システムは I/O バウンドです。
スタースキーマアプローチを使用すると、メインメモリキャッシュに簡単に収まる事実から整数列をキャッシュする必要があるため、高速に動作します。
これに関していくつか質問があります:
単一のテーブルを使用する必要がある場合、これらすべての列がメモリに収まるように RAM を増やす必要がありますか? 他の誰かが Vertica または他の列指向データベースを使用してこの種の構造を作成したかどうかを知りたいです。はいの場合、すべての varchar 列が RAM に収まる必要がある同じアプローチを使用していますか?
単純なスター スキーマ クエリ
select col1,col2, col3, sum(col4), sum(col5) from fact_table join tabl1 on condition join tab2 on condition where tab1.col1 = 1234 and tab2.col2 = 6789
以下より遅く動作します:
select col1,col2,col3,sumcol4, sumcol5 from (select col1,col2, col3, sum(col4) as sumcol4, sum(col5) as sumcol5 from fact_table where fact_table.col1 = 1234 and fact_table.col2 = 6789) as facts join tabl1 on condition join tab2 on condition
なんで?
注: マスター テーブル tab1 および tab2 は、メイン メモリ常駐です。
Vectorwiseを使用していますが、これらの観察結果が Vertica にも当てはまるかどうかを知りたいだけですか?