pub:2016.7.13/upd:2016.7.28

列指向データベースのメリットとデメリット

列指向なに?

Redshift導入を検討した際に作成したメモ。

行指向データベースとの違い

論理的には同等のデータの物理的な保存方針が違う。

行指向データベースの物理的なデータ配置

レコード単位でまとめてデータを配置する。

Aさん、Bさん、Cさんについてのレコードを記録する場合、以下のようなイメージでデータが配置される。

  • Aさんの名前
  • Aさんの年齢
  • Aさんの住所
  • Bさんの名前
  • Bさんの年齢
  • Bさんの住所
  • Cさんの名前
  • Cさんの年齢
  • Cさんの住所

列指向データベースの物理的なデータ配置

属性単位でまとめてデータを配置する。

Aさん、Bさん、Cさんについてのレコードを記録する場合、以下のようなイメージでデータが配置される。

  • Aさんの名前
  • Bさんの名前
  • Cさんの名前
  • Aさんの年齢
  • Bさんの年齢
  • Cさんの年齢
  • Aさんの住所
  • Bさんの住所
  • Cさんの住所

列指向データベースの主なメリット

集計がはやい

Aさん、Bさん、Cさんの例で18歳以上のユーザの人数を数える、年齢の平均を出すなどのケースを想定する。

アクセスすべきデータがまとまってい存在しているため素早く処理できる。

圧縮が効く

同じデータ型のデータがまとまって保存されているため圧縮が容易。

性能上の制約が少ない

列ごとに分散処理する技術が確立されているため、スケールアウトしやすい。

列指向データベースの主なデメリット

追加が遅い

Dさんのデータを新規登録したいとする。

列指向データベースでは、属性ごとにCさんのデータの後ろにデータを書き込んでいく必要がある一方、行指向データベースではまとめて1箇所に書き込みをするだけで済む。

更新が遅い場合がある

Cさんの名前と年齢と住所を更新したいとする。

列指向データベースでは、属性ごとに更新すべきデータの位置を特定する必要があるが、行指向ではまとめて更新できる。

圧縮も効かせてると遅い

圧縮にはリソースがかかるため、追加や更新のたびにリソースが必要となり遅くなる。

コストがかかる

2016年7月現在、1GBあたりの保存コストは行指向データベースより高くなる傾向にある。

Leave a Reply

Your email address will not be published.