通じて手続きを実行するデータベースは,大きく二種類にわけられます。採用してきた「行指向」データベースです。これらのデータベースは主にフロントエンドのサービスやシステムと密接に結びついており,頻繁にレコードにアクセスして内容を更新していきます。検索エンジンとして,適切に作られたインデックスを使用して高速な検索を実現します。近年登場した「列指向」データベースは,主にデータ分析のために最適化されたデータベースで,大規模なデータに対する集計処理を高速に行います。近年のデータウェアハウスはこの形のデータベースが増えてきました。列指向データベースでもデータ設計(モデリング)が重要になってきます。分散ストレージの扱いは非常に難易度の高い部分ではありますが,テクノロジーの発達によって,難しい部分はクラウドサービスに吸収させておいて,主にデータの取得・集約を行う本業である「データ分析」だけにユーザーが専念できる環境が整ってきました。(左)行指向データベースは,行単位でデータを保持,また取り出しを行います。(右)列指向データベースは列単位でデータを取得,取り出しを行います。レコードへのアクセス方法も異なります。行指向データベースでは常に各行の全ての列を読み込むのに対し,列指向データベースでは指定した列しか読み込みません。少数の行に対する多くの列の取得が効率的。1行全体の書き出しを,1度のディスクシークで読み取ることができる。少数の行に対する多くの列の更新が効率的。1行全体の書き出しを,1度のディスクシークで行うことができる。行指向データベースでは常に行単位でレコードを読んでいきます。適切なインデックスが作成されていれば,条件をみたすレコード以外は読み飛ばすことが可能です。アクセスした各レコードについては常に全てのカラムを読み取ることになります。新しくデータを1行追加するとします。この処理は行ごとに全てのカラムを取得する行指向データベースに向いていて,1回の処理でこれを達成します。特定のレコードを取り出して内容を更新する処理も,行指向の方が優位です。適切にインデックスが張られている場合には,該当するレコードをすぐに見つけ出すことができます。1回の処理で該当レコードのカラムを更新します。ある少数の列に対して集計処理を行う時には行指向は非効率です。データベースから1行目を取り出して集計対象のカラムを抜き出して足し算,2行目を取り出して集計対象のカラムを抜き出して足し算という処理を繰り返します。大量の行に対する少数の列の集約処理が効率的。列数が少ないほど,読み込むデータ量を減らすことができる。全行に対する少数の列の一括更新が効率的。新規に列データを作成し,以前のデータと置換することで他の列へのアクセスを回避できる。列指向データベースでは常に列単位でレコードを読んでいきます。基本的に行方向については全件スキャンとなることを念頭に入れておくならば,クエリで指定したカラム以外は無視するという列指向はなかなか優秀です。新しくデータを1行追加するとします。1行追加するだけでも,列指向データベースではそのテーブルが持っている全ての列に対して,別々に値を追加していかないといけないので,1回の処理では終わらせることができません。多くの列に対して更新が行われる場合は,1行の更新に対して更新するカラム数だけの処理が必要になります。一般に集計処理と言われるものは列に対する集計処理となるので列指向データベースが最も得意とするところです。仮に全レコードの,たった一つのカラムの集計を行う場合は,列指向データベースでは1個の列の縦スキャンで集計処理を済ませられます。20181101コメント0件のコメントログインしてコメントを残してください。