Upgrade to Pro — share decks privately, control downloads, hide ads and more …

カラムナーデータベース徹底比較

Fumihide Nario
November 10, 2014

 カラムナーデータベース徹底比較

db tech showcase Tokyo 2014

Fumihide Nario

November 10, 2014
Tweet

More Decks by Fumihide Nario

Other Decks in Technology

Transcript

  1. カラムナーデータベース徹底比較 / 自己紹介 成尾 文秀 - 株式会社サイバーエージェント 2014年4月にSAP事業部からアドテク本部へ - インフラエンジニア

    サーバ、ミドルウェア、データベースなどの構築、運用 2 2016/07/11 長谷川 誠 - 株式会社サイバーエージェント 2014年4月にアメーバ事業部からアドテク本部へ - インフラエンジニア 基盤の構築、運用 @makocchi https://www.facebook.com/makocchi0923 github.com/makocchi-git https://www.facebook.com/fumihide.nario
  2. カラムナーデータベース徹底比較 / カラムナーデータベースとは 5 2016/07/11 カラムナーデータベースとは① • DBMSの内部構造においてロー(行)ではなくカラム(列)指向で処理を行う 集計時に必要なカラムのみを読み込む事で大量データの解析時にI/Oを減らす カラム単位で同様のデータが格納されているので圧縮率を上げやすい

    ロー単位でのデータの追加・更新・削除が苦手 OLTP(オンライントランザクション処理)的な用途には向いていない ID 名前 年齢 性別 住所 1 AAAA 25 男 東京都渋谷区 2 BBBB 33 女 東京都港区 3 CCCC 25 男 神奈川県川崎市 4 DDDD 33 男 東京都渋谷区 5 EEEE 28 女 埼玉県大宮市 ID 名前 年齢 性別 住所 1 AAAA 25 男 東京都渋谷区 2 BBBB 33 女 東京都港区 3 CCCC 25 男 神奈川県川崎市 4 DDDD 33 男 東京都渋谷区 5 EEEE 28 女 埼玉県大宮市
  3. カラムナーデータベース徹底比較 / 検証の背景 8 2016/07/11 検証の背景 • アドテク領域の各プロダクト/プロジェクトでの課題 • 大量のデータからの解析が必要

    • 一般的なDBMSでの解析では限界 • 各プロダクトにて最適なカラムナーデータベースがわからない • 公開されているカラムナーデータベースの比較・検証結果の課題 • 比較・検証の基準が曖昧 • 検証に利用されているデータの量が少ない 実際に業務で利用しているデータ、Queryを利用し 可能な限り同一コストのインフラ環境にて 比較・検証を独自に行う事となりました
  4. カラムナーデータベース徹底比較 / 検証の方法 10 2016/07/11 検証の方法① • 対象データベースは以下の通り •Redshift (AWSで利用できるSaasのDWH用データベース)

    •Matrix (Redshiftの元になっているActian社製データベース) •InfiniDB (Calpont社製データベース) •Impala (Cloudera Hadoop) •Presto ”connect to Hive”(Facebook社製のHadoop上で動く分散SQLエンジン) •BigQuery (Google Cloud Platformで提供されているSaas)
  5. カラムナーデータベース徹底比較 / 検証の方法 11 2016/07/11 検証の方法② • 検証データについては以下の通り • 実際に本番(Redshift)で利用されている実データを利用

    • 未圧縮状態で約1.5TBと約10TBの2パターンを用意しそれぞれ本番から取得 参考)RedshiftからUnloadコマンドでデータをS3に取得するにかかった時間は、約10TBで約9時間
  6. カラムナーデータベース徹底比較 / 検証の方法③ 12 2016/07/11 検証の方法③ • データインポート(ロード)方法 検証データベース 備考

    Redshift copyコマンドでS3からロード Matrix ETLツールであるKNIMEというGUIツールを利用してインポート (検証当時はバグのためS3からHDFSを経由してロード、現在は修正され直接S3から可能) InfiniDB インポートツールのcpimportを利用してインポート (S3から直接ロードできないため一度ローカルに持ってきてからの実施です) Impala Hueにログインし、Metadataストアから実行 hadoopコマンドにてS3からHDFSへダウンロードし圧縮ファイルを解凍 Presto BigQuery Google Cloud Storageからロード (データをS3からGCEインスタンスへダウンロードし圧縮ファイルを解凍) ※GCS Online Cloud Importは今回利用していません。
  7. カラムナーデータベース徹底比較 / 検証の方法 13 2016/07/11 検証の方法④ • ベンチマークには実際に使われているQueryを利用 • 1.5TBデータに対して1種類、10TBデータに対して4種類用意

    種類 Query説明 1.5TB LIKEで前方一致を行うクエリー 例: SELECT DISTINCT id FROM table WHERE str LIKE 'string%' 10TB① GROUPを行ってcountを行うクエリー 例: SELECT id,count(*) FROM table GROUP BY idx 10TB② GROUP BYされたサブクエリーをさらにサブクエリーするクエリー 例: SELECT id,count() FROM (SELECT id, count() as count FROM table GROUP BY id ORDER BY count DESC LIMIT x) as table WHERE column = column GROUP BY id,count 10TB③ サブクエリーによるテーブル2つをJOINしてWHEREをかけたクエリー 例: SELECT id FROM(SELECT id,count() as count FROM table GROUP BY count DESC LIMIT x) as table,(SELECT id,count() as count FROM table GROUP BY count DESC LIMIT x) as table WHERE table.id = table.id 10TB④ min,count関数を使ったGROUP BYのクエリー 例: SELECT min(id),count(*) FROM table WHERE column = 'string' GROUP BY id ORDER BY count DESC
  8. カラムナーデータベース徹底比較 / 検証の方法 14 2016/07/11 検証の方法④ • 検証環境はBigQuery以外はAWS • 各ミドルウェアで必要なメモリ量・ディスク量などによって構成を変更

    検証データベース 1.5TB 1.5TB(費用/h) 10TB 10TB(費用/h) インスタンス選定理由 Redshift dw1.xlarge x 4 $4.76 dw1.xlarge x 8 Instance $9.52 storage $1.14 元データで使われている 構成と同一 Matrix - - hs1.8xlarge x 3 $13.8 + licence Support インストール要件などの 関係でこの構成に InfiniDB hs1.4xlarge x 1 $3.276 hs1.8xlarge x 1 $4.6 1.5TBはRedshiftと同程 度の金額。10TBは同程 度のスペック。 Impala c1.xlarge x 8 $4.42 c3.4xlarge x 8 $8.17 Redshiftと同程度の金額 Presto c1.xlarge x 8 $4.42 c3.4xlarge x 8 $8.17 Redshiftと同程度の金額 BigQuery - - - Instance $--- Storage $0.37 -
  9. カラムナーデータベース徹底比較 / 検証の結果 16 2016/07/11 検証の結果 (1.5TBの場合) • クエリー実行時間 0

    sec 1,000 sec 2,000 sec 3,000 sec 4,000 sec 5,000 sec 6,000 sec RedShift Matrix InfiniDB Impala Presto BigQuery Compare SQL by 6 products (1.5TB) SQL1
  10. カラムナーデータベース徹底比較 / 検証の結果 17 2016/07/11 検証の結果 (10TBの場合) • クエリー実行時間 0

    sec 1,000 sec 2,000 sec 3,000 sec 4,000 sec 5,000 sec 6,000 sec 7,000 sec 8,000 sec 9,000 sec 10,000 sec RedShift Matrix InfiniDB Impala Presto BigQuery Compare 4 SQL by 6 products (10TB) SQL1 SQL2 SQL3 SQL4
  11. カラムナーデータベース徹底比較 / 検証の結果 18 2016/07/11 検証の結果 (10TBの場合)続き • クエリー実行時間 0

    sec 20 sec 40 sec 60 sec 80 sec 100 sec 120 sec 140 sec 160 sec 180 sec 200 sec RedShift Matrix BigQuery Compare 4 SQL by 3 products (10TB) SQL1 SQL2 SQL3 SQL4
  12. カラムナーデータベース徹底比較 / 検証の結果 19 2016/07/11 検証の結果③ • まとめ 項目 Redshift

    (基準) Matrix InfiniDB Impala Presto BigQuery 環境構築のしやすさ ◦ △ ◦ ◦ ◦ ◎ データロードのしやすさ ◦ ◎ × ◦ ◦ ◦ インスタンスタイプ選択肢 ◦ ◎ ◎ ◎ ◎ - インポート性能 ◦ ◦ ◦ ◎ ◎ ◎ クエリ性能 ◦ ◦ ◦ △ △ ◎ SQL互換性 ◦ ◦ ◦ ◦ ◦ △ コストパフォーマンス ◦ ◦ ◦ △ △ ◎
  13. カラムナーデータベース徹底比較 / 検証の方法 24 2016/07/11 結果の考察④ Impala / Presto 今回の構成では、クエリーがとても遅かったです

    Redshiftと比べるとEC2上でやる場合には コスト的に不利だと思います しかし、HDFSからのデータロードがとても速いのもあり 既存でHadoopを使っている場合には オンプレミス環境で動かすのであれば、選択肢として良さそうです
  14. カラムナーデータベース徹底比較 / 検証の方法 25 2016/07/11 結果の考察⑥ BigQuery クエリーがとにかく速かったです JOINを多様する複雑なクエリーでは処理がタイムアウトしました テーブル設計次第ではビッグデータ最強のデータベースだと思います

    データを貯めておく費用がとても安く データ量が大きくなっても処理時間が変わらないというのは データ分析において非常に重要で、他の製品にはない強みがあります データ量が大きくなればなるほどBigQueryは その優位性を発揮することになると思います