• 検索結果がありません。

マルチデータモデルDBのためのSQLクエリ処理効率化

N/A
N/A
Protected

Academic year: 2021

シェア "マルチデータモデルDBのためのSQLクエリ処理効率化"

Copied!
26
0
0

読み込み中.... (全文を見る)

全文

(1)

マルチデータモデルDBのための

SQLクエリ処理効率化

2018年12月12日

富士通株式会社

菅原 久嗣

(2)

自己紹介

菅原 久嗣

富士通株式会社でビッグデータ活用製品を開発

Big Data Integration Server

NoSQL、Hadoop/Spark、ストリーム処理

(3)

Agenda

ビッグデータ活用に必要なマルチデータモデルDB

富士通のマルチデータモデルへの取組み

Sparkクエリアクセラレーション

(4)

ビッグデータ活用に必要な

マルチデータモデルDB

(5)

「PostgreSQL」の進化

ビッグデータ活用に向けた機能の強化

v6.0 PostgreSQL初回リリース 1986年から続いていたカリフォルニア大学バークレー校におけるPostgresプロジェクトを継承 v9.5 UPSERT v9.4 jsonb型 v9.3 外部データラッパ(FDW)への更新 v9.2 CPUスケール対応 Index Only Scan json型 v9.0 Streaming Replication v9.1 同期レプリケーション v9.6

Parallel Seq Scan 複数同期スレーブ 完全同期モード v10 宣言的パーティションニング ロジカルレプリケーション v11 ハッシュパーティショニング Parallel-Append ストアドプロシージャ 運用性 信頼性 データ型の拡充・スケーラビリティ強化 v8.3 SQL/XML

(6)

分析アプリケーションから構造化・非構造化データにアクセス

NoSQL :非構造(センサー/IoT)、リアルタイム活用

RDB

:構造(業務データなど)、バッチ活用

Analysis

ビッグデータ活用のためのデータベース

Ingest Store Process Model

ETL HDFS 多次元分析 モニタリング 機械学習・AI Spark

データモデル別に複数のデータベースを使用

Kafka RDB NoSQL センサー/IoT 業務データ

(7)

事例:建設機械の稼働データ分析システム

現場の稼働データとマスタデータを活用し、配車最適化・燃費改善を実現

① SQLとNoSQLそれぞれのI/Fを使い、データ検索のアプリケーション開発が必要 ② NoSQL上の稼働データの結合や集計処理ロジックの作り込みが必要 ③ 不要なデータを削除するとき、複数DB上のデータの整合性を担保する必要 アプリ アプリ アプリ NoSQL 稼働データ お客様 代理店 RDB マスタデータ Parse Join non-SQL API SQL API 稼働率・燃費情報 分析アプリ Analyze 不要データ削除 (定期バッチ) Tran Ctrl Sum Avg. Check アプリ開発者

(8)

① データベース毎にアプリケーションを作成→分析アプリケーションをPostgreSQLに1本化 ② サイロ化したデータの横断的なデータ活用が困難→PostgreSQL側でモデル間の結合・集計 ③ 複数データベース間のデータ整合性の確保→PostgreSQL側でデータの一貫性を保証

PostgreSQLによるマルチデータモデル

アプリ側で実装していた処理をDB機能で実現

RDB 分析アプリケーション NoSQL Document Graph Key-value etc・・・ PostgreSQL 開発コミュニティにて 提案・開発中 マルチデータモデル PostgreSQL アプリ開発者

② ③

(9)

Sparkクエリアクセラレーション

実行計画修正によるJSON処理改善

(10)

富士通の取組み

PostgreSQLの進化に合わせてビッグデータ活用領域に拡大

Symfoware Server (Postgres) / Enterprise Postgres

PostgreSQLベースのオープンなRDB。自社カラムナ技術によるOLAP強化

2012

2014

Symfoware Analytics Server

PostgreSQL I/Fでアクセス可能なカラムストア型DWH PostgreSQL採用

2018Big Data Integration ServerOSSと自社AI技術を活用したデータレイク

DB多重化 インメモリカラムナ

DWH対応 FDW改善 In-DB分析 function改善

ビッグデータ対応 透過的暗号化

(11)

データモデルの異なるデータベースを仮想的に統合

RDBとNoSQLに対して、同じPostgreSQL構文でアクセス可能

FDWでマルチデータモデルを実現

RDB NoSQL RDB用 FDW NoSQL用 FDW 検索処理 非構造化データ メモリ配置 メモリ配置 構造化データ 検索処理 PostgreSQL I/F

CREATE FOREIGN TABLE json_table { id INT options (field ‘$.user.id’),

name TEXT options (field ‘$.name’)

}; SELECT id FROM json_table;

(12)
(13)

外部DB 外部DB

FDWによるマルチデータモデルの性能課題

外部DBのデータ統合処理部分

 インデックス・統計情報等による改善が不可  実データは外部DBが所有、PostgreSQLはデータを仮想統合している 外部DB PostgreSQL 結果返却 SELECT文実行 ソート 結合 集計 PostgreSQL側でデータ統合 抽出 加工 データ統合処理がネック

(14)

外部DB 外部DB PostgreSQL 外部DB 外部DB

FDWによるマルチデータモデルの性能課題

Sparkにクエリ処理をすべてオフロードして高速化

 クエリをSparkSQLに変換し、Sparkクラスタにオフロードしてサーバ並列で処理  Sparkは”パーティション”毎に外部DBを直接スキャンすることでデータを取得

→ Sparkオフロード時は外部DBスキャンが性能ネックに

外部DB Spark ソート 結合 加工 集計 結果受領 Sparkにオフロード 抽出 外部DBスキャンがネック Sparkで並列分散

(15)

Sparkは細分化されたタスクを各サーバに振り分けることで並列分散

 Sparkタスク: 並列分散用に分割されたデータ(レコード群)・処理のセット  データ読込みタスクを順次振分け・実行することで、並列な外部DBスキャンを実現 Sparkクラスタ

Sparkによる外部DBスキャンの仕組み

Task1 (partition 1) 1 <= id <= 100 Task2 (partition 2) 101 <= id <= 200 Last Task 9901 <= id <= 10000 ・・・ slave server 外部DB id value 1 123 2 456 … … 10000 789 slave server slave server partitionの範囲でselect ※例:idカラムをキーにパーティションを作成し、Sparkが外部DBスキャン slaveが空いたら、 次の検索タスクを再割当て データ読込みタスク

(16)

レコード内のカラムをキーにして分割すると、ランダムアクセスが発生

 テーブルのフルスキャン時、キーの順にデータが配置されているとは限らない  データ更新が高頻度で発生した場合に顕著

シーケンシャルアクセスするパーティショニング機構が必要

 格納順に、かつデータ量を平準化することで実現 外部DB内テーブル 外部DB内テーブル Sparkクラスタ Sparkクラスタ

外部DBスキャンの性能課題

slave server slave server slave server slave server slave server slave server random access

(17)

シーケンシャルアクセスを可能にする自動パーティショニング

外部DBをPostgreSQLとして実装

ctidを基準に自動パーティショニング

1. 外部PostgreSQLから、読込み対象テーブルのctid範囲を取得 2. 1パーティションのレコード数がユーザ指定の行数になるようctid範囲を分割 - ユーザの指定は行数のみ、各パーティションのctid範囲を意識しない 3. 分割したctid範囲を、外部PostgreSQLスキャン時のwhere句に変換 ctid = (0,1) レコード ctid = (0,2) レコード … … ctid = (1,1) レコード … … ctid = (N,1) レコード … … ctid = (N, M) レコード block 0 block 1 block N partition1: ‘(0,1)’ <= ctid <= ‘(10, 2)’ partition 2: ‘(10, 3)’ <= ctid <= ‘(20, 4)’ Last partition : ‘(.., ..)’ <= ctid < ‘(N, M)’ ・・・ 1 partition= 1000 rows 1000 rows 1000 rows ≤1000 rows 読込み対象テーブル

(18)

Sparkクエリアクセラレーションの効果検証

Sparkオフロードなし(FDWのみ)と比較

 TPC-H (SF=100), 8core/64GB RAM Server x 4 nodes

10倍~34倍の高速化を達成

5430 2133 3412 225 1123 3203 159 86 162 23 69 175 0 1000 2000 3000 4000 5000 6000 1 2 3 4 5 6 レスポ ン ス時 間 オフロードなし 提案手法

(19)

実行計画修正によるJSON

処理改善

(20)

FDWにおける非構造化データのスキーマ設計

FDW実装の場合、非構造化データのスキーマ設計の改善が必要

 外部のJSONデータからfieldを取得するケース RDB NoSQL RDB用 FDW NoSQL用 FDW 検索処理 非構造化データ メモリ配置 メモリ配置 構造化データ 検索処理 PostgreSQL I/F

CREATE FOREIGN TABLE json_table { id INT options (field ‘$.user.id’),

name TEXT options (field ‘$.name’)

(21)

FDWにおける非構造データのスキーマ設計

従来:外部テーブル定義時にfieldとカラム

をmapping

 Schema before read

 NoSQLの良さである柔軟さを活かしきれない

Schema on the flyでNoSQLの柔軟性

を確保

 スキーマ定義時にカラムmappingを行わない

•クエリ実行時にアクセス先フィールドを指定

 データ変更・業務変更時も、アプリ開発者がDML

のみ修正すればよい

CREATE FOREIGN TABLE json_table

( doc json );

CREATE FOREIGN TABLE json_table ( “id” INTEGER, “name” TEXT, … “age” INTEGER )

(22)

FDWにおけるSchema on the fly処理の改善

PostgreSQLは外部DBから

JSONデータを抽出

 クエリの実行計画は、事前に作成 されたスキーマ情報をもとに生成  JSON内のフィールドはスキーマ で持たないため、反映できない

クエリに指定されたスキーマ情報

を利用して実行計画を修正

 クエリ解析結果を検証して外部 DB依頼可能か判断  外部DBにfield抽出を依頼

SELECT doc->>’id’::int from json_table 実行計画作成 JSON抽出 id抽出 int型変換 id(int)抽出 実行計画 修正 外部DBに依頼 id(int)抽出処理

(23)

既存処理は文字列変換、パース、型キャストの処理コストが発生

提案手法は上記処理が不要

 外部DBが自身の格納形式・情報を元に抽出  PostgreSQLはバイナリ値を直接受け取る PostgreSQL側 処理 外部DB側処理

実行計画修正による実データ処理削減

SELECT doc->>’id’::int from json_table

PostgreSQL側 処理

外部DB側処理

SELECT doc->>’id’::int from json_table

JSON受領 idパース text → int BSON → JSON 上位処理 BSON → id(int) 上位処理

(24)

提案手法の有無による効果を比較

 TPC-H (SF=10), 6 core/192GB RAM Server

実行計画修正の効果で、すべてのクエリで性能改善(最大約6倍)

 既存のPostgreSQL処理の改善に成功していることが確認できる

Schema on the flyでの性能改善検証

6 5 4 3 2 1 0 Q1 Q3 Q4 Q5 相対速度 Q6 Q7 Q8 Q9 Q10 conventional proposed

(25)

おわりに

富士通はビッグデータ活用の現場でPostgreSQL活用を推進

 FDWによるマルチデータモデルを実装した製品を2019年4月リリース予定

PostgreSQLそのもののマルチモデルDB化の取組みへと活用

 コミュニティにフィードバック

(26)

参照

関連したドキュメント

Adaptive image approximation by linear splines over locally optimal Delaunay triangulations.. IEEE Signal Processing Letters

また適切な音量で音が聞 こえる音響設備を常設設 備として備えている なお、常設設備の効果が適 切に得られない場合、クラ

このエアコンは冷房運転時のドレン(除湿)水を内部で蒸発さ

For control of emerged cocklebur, annual morning- glories and other susceptible broadleaf weeds, apply when broadleaf weeds are actively growing and small (see WEED LIST).. 2,4-DB

Make sure you have the Release version of binary (.elf). Click on Search Project and Qualifier returns Release in the path. For debugging purposes you can build and switch Debug

・圃場排水技術 等 平成 24 年度

人為事象 選定基準 評価要否 備考. 1 航空機落下 A 不要 落下確率は 10

第4版 2019 年4月改訂 関西学院大学