Traffine I/O

日本語

2023-04-08

カラム指向データベース

カラム指向データベースとは

カラム指向データベースは、その名前が示す通り、データを行ではなく列ごとに格納します。Oracle、PostgreSQL、MySQLなどの従来のリレーショナルデータベースとは異なり、これらのデータベースはデータを列ごとに扱うことに焦点を当てています。

カラム指向データベースにおけるデータの扱い

行指向データベースは、データを行ごとに格納し、操作します。このデータの格納方法では、各行をレコードとして扱い、行内の全てのデータを1つの単位として処理します。

以下の書店の販売データを考えてみます。

日付 店舗 従業員 書籍のカテゴリー 販売数量 総売上高
2023/6/1 NYC John Fiction 10 $200
2023/6/1 NYC Sarah Non-fiction 5 $150
2023/6/1 NYC Paul Fiction 8 $80
2023/6/2 NYC John Fiction 7 $140
2023/6/2 NYC John Non-fiction 4 $80

行指向データベースでは、各販売は1つの行として扱われ、関連するデータ要素(日付店舗従業員書籍のカテゴリー販売数量総売上高)がまとめてグループ化されます。

一方、カラム指向データベースでは、データを列ごとに処理します。各データ要素(例えば、日付総売上高)について、データベースはその要素の全てのインスタンスを1つの列に格納します。

同じ書店の販売データを考えると、カラム指向データベースにおけるデータの扱いは次のようになります。

日付 店舗 従業員 書籍のカテゴリー 販売数量 総売上高
2023/6/1 * 3 NYC * 5 John * 3 Fiction * 3 10 * 1 $200 * 1
2023/6/2 * 2 Sarah * 1 Non-fiction * 2 5 * 1 $150 * 1
Paul * 1 8 * 1 $80 * 1
7 * 1 $140 * 1
4 * 1 $80 * 1

例えば、NYCの店舗の総売上高を求めるとき、行指向データベースでは全データを行ごとに読み取り、各行の店舗フィールドをチェックし、NYCの店舗エントリの総売上高フィールドを合計する必要があります。このプロセスでは、店舗総売上高のデータ以外も含めてデータを不要に読み取る可能性があります。

対照的に、カラム指向データベースでは、店舗列総売上高列のみを読み取ります。これにより、ディスクから読み取るデータ量が減り、操作の処理速度が向上します。

カラム指向データベースのデメリット

カラム指向データベースには、データ分析タスクに特に優れている多くの利点がありますが、欠点もあります。そのうちの一つが、オンライントランザクションの管理に特化した最適化の欠如です。

カラム指向データベースは、新しいデータの追加、更新、削除などの処理において、かなりのオーバーヘッドと非効率性を抱えています。そのため、トランザクション処理には適していません。

テーブルに新しい行データを追加したいとします。行指向データベースでは、これは簡単なタスクです。新しい行をテーブルに追加するだけです。しかし、カラム指向データベースでは、プロセスがより複雑になります。圧縮されたデータをまず展開する必要があります。その後、各列の値を読み込んで適切な場所に追加する必要があります。最後に、列を再度圧縮する必要があります。このプロセスには計算のオーバーヘッドと複雑さが加わり、データベースに頻繁に小規模な変更が必要な場合(トランザクション処理のシナリオなど)には非効率です。

参考

https://future-architect.github.io/articles/20210419b/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!