MariaDB ColumnStore始めませんか? (1/4):EnterpriseZine(エンタープライズジン)
Shoeisha Technology Media

EnterpriseZine(エンタープライズジン)

EnterpriseZine(エンタープライズジン)

テーマ別に探す

MariaDB ColumnStore始めませんか?

2017/11/09 06:00

 本記事は、db tech showcase 2017でおこなわれた、Japan MariaDB User Group - 代表 川野 和之氏によるセッション「MariaDB ColumnStore始めませんか?」の書き起こしです。MariaDB ColumnStore はチューニングレスで高い検索パフォーマンスを実現するDWH特化型データベースです。新しいエンジンであるCoumnStoreの特徴や、押さえておくべきポイントについての解説が行なわれました。

Japan MariaDB User Group(JPMUG)とは

様々な活動を通してMariaDB社のソリューションを広めるためのグループです。また、定期的に開催される開発者会議にもコミッターとして参加することを目指しています。まだ始まったばかりです。広く参加者を求めています。
Japan MariaDB User Group - Facebookページ

パフォーマンス改善の切り札

企業のOLTPシステムはツール群などの充実もあり、基本部分のチューニングに関しては落ち着きはじめ、すでに何本もの本番システムを稼働させている状況ではないでしょうか?。

しかし、日時ジョブや月次ジョブ、あるいは棚卸しのように一定期間で大量にデータを検索・集計するための処理コストが新たな課題になりつつあります。 前者はハードウェア増強などで大胆に変えることも可能ですが、後者は抜本的な改善が求められます。

だからこそ今、Columnar Database に注目が集まっています。 Columnar Database は棚卸しのような処理の切り札となり得るアーキテクチャです。 そのメリットは何と言っても検索スピードなのですが、対してOLTPでは使い物になりません。 ですから、Columnarには日時でデータを整理して流し込むイメージで使います。 そこで、想像してください。棚卸しはColumnarからやるのです。

本稿でClumnStoreとはどのようなエンジンなのかを学び、実際にインストールおよび検証を行う助けになれば幸いです。

db tech showcase 2017 来場者アンケート

MariaDB ColumnStoreって何?

MariaDB ColumnStoreはチューニングレス高い検索パフォーマンスを実現するDWH特化型データベースです。

 

MariaDB ColumnStoreは大規模並列分散データ環境での処理が可能な次世代カラム型ストレージエンジンです。
ペタバイトのデータを処理できるように設計されており、リニアにスケールアウトし、分析クエリーのリアルタイム処理に特に優れた性能を発揮します。
MariaDB ColumnStoreはGPLのもとで提供されます。

MariaDB ColumnStore
https://mariadb.com/kb/ja/mariadb-columnstore/

 

分析/集計処理に最適なカラムストアエンジン

行指向DBが苦手とする、カラムデータ分析/集計に特化したカラムストアを採用したエンジン。

  • MySQL/MariaDBとの互換性

    MySQL/MariaDBで利用可能なナレッジをそのままColumnStoreでも使うことができます。
    ただし、一部制限事項等があります

  • 専用ハードウェア不要

    分析用に高価な専用ハードウェアを用意する必要はありません。 一般的なスペックのサーバで利用可能です。

  • リニアにスケールアウト

    ColumnStoreはスケールアップ、及びスケールアウトの両方に対応しています。 最初は1台でスタートし、データ量に合わせて台数を増やしていくといった柔軟な運用が可能です。

歴史

CoumnStoreの前身は、米Calpont社がMySQLからフォークし開発した InfiniDB がベースとなっています。
2014年3月に InfiniDB 4.0.2.1-1がリリースされ、その後 2014年9月には 4.6.2-1 をリリースしています。

MySQL互換のカラムナーデータベースとして注目を浴びた InfiniDB ですが、2016年 米Calpont社の倒産を契機にリリーススケジュール及びサポートが暗礁に乗り上げます。

その後、MariaDB社がソースを含むライセンスを取得し、2016年6月にColumnStore 1.0.1 をリリース。 順調に修正を重ね 2017年8月に MariaDB10.1 をベースにした ColumnStore 1.0.11 GAをリリースしています。

また年内リリース予定の次期バージョンである MariaDB 10.2 をベースとした ColumnStore 1.1.0 の開発も順調に進み、9月に 1.1.0 beta のリリースがされました。

ColumnStoreリリース年表

アーキテクチャについて

大規模並列処理(Massively Parallel Processing)

スケールアップ/スケールアウトを実現する3つのモジュールにより構成されています。

モジュール概念図

 

  • ユーザーモジュール
    • MariaDB Serverインスタンスと並行スケーリングを扱うためのプロセス。 また、MySQL互換のクエリを分散実行可能なクエリに変換する。 このモジュールのおかげで従来のクエリのままで分散実行が可能になる。
  • パフォーマンスモジュール
    • パフォーマンスモジュールはデータの保存、検索、管理を受け持ち、クエリー操作に対するブロックへのリクエストを処理し、クエリーに応えるプロセス。
  • ストレージ
    • オンプレミスで動作するときは、ローカルストレージや、SANなどの共通ストレージを使用可能
    • Amazon EC2環境では、ephemeralまたはElastic Block Store (EBS)を使用可能
    • シェアードナッシング環境でデータの冗長化が必要な場合、GlusterFSや Apache Hadoop Distributed File System (HDFS)を使用可能

ColumnStoreのアーキテクチャ概要
https://mariadb.com/kb/ja/columnstore-columnstore/

対称型マルチプロセッシング(Symmetrical Multi Processing)

またColumnStoreは複数ノードによるスケールアウトだけでなく、1サーバのマルチコアを活用する並列処理によるスケールアウト構成をとることもできる。 まずは1ノード(SingleServer)でスモールスタート後、データサイズに合わせてノードを増やすことでスケールアウトする等、柔軟な構成が可能です。

SingleServerモードモジュール概念図

システムデータベース

従来のMySQLが持つシステムデータベースに加えて下記のデータベースが追加されています。

  • calpontsys

    ColumnStoreテーブルのメタデータを管理。カラムとエクステントマップを紐付けるために必要な ColID 情報等が格納されています。

  • infinidb_querystats

    クエリパフォーマンス情報を管理。 クエリ情報を蓄積するためには、別途情報取得用の設定変更を実施する必要があります。

  • infinidb_vtable

    クエリ実行の一部である一時テーブルの作成に使用されます。ColumnStoreクエリを実行するすべてのユーザーは、このデータベース上で、一時テーブルオプションを作成する必要があります。

ColumnStoreシステムデータベース
https://mariadb.com/kb/ja/columnstore-system-databases/

ExtentMap

大量のデータから目的のカラムデータを高速に参照する仕組み。 カラムデータを約800万行毎に区切って最小値/最大値を管理する。 該当するデータがないブロックを、実データを参照することなく判定できるため大幅にDisk I/O を削減することができます。

下図はカラム名 Col-D の最小/最大値を 3つのエクステントマップ(Ext-1~3)にそれぞれ格納していることを表したものです。

エクステントマップ概念図
  • 物理的なセグメントファイル内に存在する論理ブロックを管理
  • エクステント及び対応するブロックを管理
  • データの抽出と配置は、エクステントマップにより高速で処理される
  • リアルタイム解凍と圧縮
  • バージョンバッファーファイル(UNDO)

例えば下記のクエリを実行した場合。
where句に指定された範囲は 110~180。 この範囲に該当するデータは 2番目のエクステントマップ(Ext-2)にしかないことがわかるので、1番目(Ext-1)と3番目(Ext-3)のエクステントマップに対する参照をスキップできる。 2番目のエクステントマップ情報から、実データが格納されているブロック対してのみDisk I/Oが発生するため、大幅にDisk I/Oを削減できる。

SELECT
	COL–D
FROM
	TABLE
WHERE
	COL-D BETWEEN 110 AND 180
;
エクステントマップによるI/Oフィルタ概念図

ColumnStoreストレージアーキテクチャー
https://mariadb.com/kb/ja/columnstore-storage-architecture/

スケールアウト性能について

検証環境
AWS Instance DATA
Type m4.2xlarge SNMP log 約1億行
VCPU 8 Size 23GB
Memory 32GB  
SSD 800GB
IOPS 2400 / 3000

下記グラフは ColumnStore がリニアにスケールアウトしていることを示すものです。 InnoDB/ColumnStore1ノードあたりの性能差は約10倍近くあることがわかります。 また、ColumnStoreのノードを追加することでリニアに性能が向上していることもわかります。

スケールアウト性能比較

トランザクション性能について

Engine Transactions XA
Columnstore YES NO
MyISAM NO NO
InnoDB YES YES

show engines で見るとトランザクション YES、分散トランザクションは NO になっています。 ならばと既存のトランザクションを伴うアプリの検証用にエンジンを InnoDBからColumnstore に置き換えるといったことはするべきではありません。 ColumnStoreのトランザクション性能は決して高くないのです。

トランザクション性能比較
SysBench - ColumnStore vs InnoDB トランザクション性能比較
# sysbench --test=oltp --db-driver=mysql --mysql-socket=/usr/local/mariadb/columnstore/mysql/lib/mysql/mysql.sock
--num-threads=1[1] --max-requests=500 --max-time=0 --oltp-test-mode=complex --mysql-user=sbtest
--mysql-password=sbtest --oltp-test-mode=nontrx --oltp-nontrx-mode=insert run

[1]:columnstoreに合わせて並列度1(num-threads=1)で比較

※この続きは、会員の方のみお読みいただけます(登録無料)。


著者プロフィール

  • 小幡一郎(オバタイチロウ)

    DBOnline特命記者  ユーザ企業としてPCやオフコンからコンピュータキャリアはスタートし、メインフレーム・パッケージベンダーそして日本オラクルを経て1995年インサイトテクノロジーを設立。2007年、インサイトテクノロジーから離れ、デンマークのMiracleグループに参加、ミラクル・アジアパ...

バックナンバー

連載:DB Press

もっと読む

All contents copyright © 2007-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5