2017年データベースの選択は?(第2回)

データベース機能比較(続き)

やはり、SQL実行計画で欠かせないデータベースの機能としてパーティショニングとパラレル実行処理が上げられます。

パーティショニング比較

PostgreSQL/MySQLともにパーティショニングはサポートしていますがOracle/MySQLがデータベースの基本機能として実装されているのに対してPostgreSQLでは、Ver9までは、トリガーやチェック制約で実装されていました。トリガーで実装されているとOracle/MySQLに比較すると少しパフォーマンスや運用面で心配になってしまいます。但し、これは、Version.9まで。Version.10では、Oracle/MySQLと同等のパーティショニングが実装されました。

また、パーティショニングの種別は、RANGE/LIST/HASHなどありますがその対応状況は、下表の通りです。パーティショニングで特徴的なのがVertical Partitioning(垂直パーティショニング)で表を列ごとにパーティショニングするものです。これは、MySQL系のデータベースでしか出来ません(詳細は後述)。

Spiderによるスケールアウトパーティショニング

MySQL/MariaDBでは、ストレージエンジンを選択することが出来ます。
ここでは、Spiderストレージエンジンとパーティショニングを組み合わせた構成を紹介したいと思います。Spiderを用いることでパーティション毎に異なるサーバにデータを格納することでスケールアウトが可能になります。
Horizontal Partitioning(水平パーティショニング)を適用した場合には、パーティション毎に異なるサーバに処理を分散することでスケールアウトが可能になると同時にパーティションを跨がったジョインなどの処理も可能です。これは、大規模な分析基盤などを構築する場合には、非常に役立つ機能ですね。

また、Vertical Partitioning(垂直パーティショニング)をSpiderストレージエンジンと組み合わせることでパーティションを担うテーブル毎にカラム型ストレージエンジンやMroongaなどの全文検索エンジンを組み合わせることが可能になり、カラムのデータ特性毎に適切なストレージエンジンを割り当てることで高速な検索データベースを構築することが出来るので無いかと夢が広がります。これについては、弊社内でもPink Shiftと呼ぶプロジェクトとして検証を行っています。

パラレル処理比較

パーティショニングと関連の深いパラレルクエリは、Oracle/PostgreSQLでは実装されていますがMySQLでは、実装されていません。但し、Oracleのパラレルクエリは、Enterprise Editionのみで使用出来る高価な機能になります。パラレル処理は、クエリだけで無くソーティングなどにも有効な処理方式になります。処理対象件数が多くなればなるほど有効な機能です。PostgreSQLのパラレル処理は、実装されたばかりですがパラレル処理の有無で大規模な処理件数を扱う場合には、以前に比べて大きな改善が見られました。

統計情報比較

RDBMSのパフォーマンスを計る上で重要なのはSQL実行計画ですが、その実行計画を立てる元になるのは、統計情報と呼ばれるデータベースのデータの種類やデータ分布などのデータ特性の情報です。各データベースとも良い実行計画を立てるために色々な情報を収集しているのですが収集している情報は、方式が異なりますが内容は大きく変わることはありません。違いがあるのは、ヒストグラムと呼ばれるデータ分布の情報取得です。Oracleでは、上位頻度ヒストグラムなどの高精度なヒストグラムを求めていますがMySQLでは、ヒストグラムは、収集していません。但し、次期MySQLでヒストグラムがサポートされる予定です。

SQL実行計画

実際の実行計画の種別ですが、OracleではINDEX FAST FULL SCANやINDEX SKIP SCANといった高度なINDEX検索計画を持っていますが、基本的にな実行計画としてはOracleとPostgreSQLでは大きな差はありません。最も特徴的なのは、MySQLで結合がNESTED LOOPしかありません。これは、Oracleをメインに扱ってきた人たちからすると大丈夫か?というような気にさせられます。
但し、MySQLの派生データベースであるMariaDBでは、HASH JOINがサポートされています。
ヒント文は、各データベースともサポートしていますが、細かい指定が出来るのはOracleで、PostgreSQL/MySQLでは少し限定的な指定しか出来ません。


次回は、このような機能をもったデータベースで、実際にTPC-Hベンチマークを実行してみて実行計画や処理時間について比較してみます。


【2017年データベースの選択は?】連載一覧

2017年データベースの選択は?(第1回)

  • どんなデータベースがあるの?
  • データベースライセンス比較
  • データベース機能比較

2017年データベースの選択は?(第2回)

  • データベース機能比較(続き)
  • Spiderによるスケールアウトパーティショニング

2017年データベースの選択は?(第3回)

  • TPCベンチマークで実行計画と処理時間を比較してみた
  • TPCベンチマークで実行計画と処理時間を比較してみた結果
  • 全体的にみると
  • どのデータベースを使いますか?