マルチデータモデルdbのための - pgconf asia...でマルチデータモデルを実現...

26
Copyright 2018 FUJITSU LIMITED マルチデータモデルDBのための SQLクエリ処理効率化 20181212富士通株式会社 菅原 久嗣 0

Upload: others

Post on 29-May-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

Copyright 2018 FUJITSU LIMITED

マルチデータモデルDBのためのSQLクエリ処理効率化2018年12月12日富士通株式会社菅原 久嗣

0

Page 2: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

Copyright 2018 FUJITSU LIMITED

自己紹介菅原 久嗣富士通株式会社でビッグデータ活用製品を開発Big Data Integration Server

•NoSQL、Hadoop/Spark、ストリーム処理過去はDBアプライアンス、DWH、データ分析基盤等

1

Page 3: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

Agendaビッグデータ活用に必要なマルチデータモデルDB富士通のマルチデータモデルへの取組みSparkクエリアクセラレーション実行計画修正によるJSON処理改善

Copyright 2018 FUJITSU LIMITED2

Page 4: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

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

Copyright 2018 FUJITSU LIMITED3

Page 5: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

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

v6.0PostgreSQL初回リリース1986年から続いていたカリフォルニア大学バークレー校におけるPostgresプロジェクトを継承

v9.5UPSERT

v9.4jsonb型

v9.3外部データラッパ(FDW)への更新

v9.2CPUスケール対応Index Only Scanjson型

v9.0Streaming Replication

v9.1同期レプリケーション

v9.6Parallel Seq Scan複数同期スレーブ完全同期モード

v10宣言的パーティションニングロジカルレプリケーション

v11ハッシュパーティショニングParallel-Appendストアドプロシージャ

運用性 信頼性 データ型の拡充・スケーラビリティ強化

Copyright 2018 FUJITSU LIMITED

v8.3SQL/XML

2000 2005 2010 2015 20184

Page 6: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

分析アプリケーションから構造化・非構造化データにアクセスNoSQL :非構造(センサー/IoT)、リアルタイム活用RDB :構造(業務データなど)、バッチ活用

Analysis

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

Copyright 2018 FUJITSU LIMITED

Ingest Store Process Model

ETL HDFS

多次元分析

モニタリング

機械学習・AI

Spark

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

Kafka

RDB

NoSQLセンサー/IoT

業務データ

5

Page 7: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

事例:建設機械の稼働データ分析システム現場の稼働データとマスタデータを活用し、配車最適化・燃費改善を実現

① SQLとNoSQLそれぞれのI/Fを使い、データ検索のアプリケーション開発が必要② NoSQL上の稼働データの結合や集計処理ロジックの作り込みが必要③ 不要なデータを削除するとき、複数DB上のデータの整合性を担保する必要

Copyright 2018 FUJITSU LIMITED

アプリ

アプリ アプリNoSQL

稼働データ

お客様

代理店RDB

マスタデータ

Parse

Join

non-SQL API

SQL API

稼働率・燃費情報

分析アプリ

Analyze不要データ削除(定期バッチ)

Tran Ctrl

Sum

Avg.

Check

アプリ開発者

6

Page 8: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

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

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

Copyright 2018 FUJITSU LIMITED

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

RDB

分析アプリケーション

NoSQLDocumentGraph Key-value

etc・・・

PostgreSQL開発コミュニティにて

提案・開発中

マルチデータモデル

PostgreSQL

アプリ開発者

②③

7

Page 9: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

Sparkクエリアクセラレーション実行計画修正によるJSON処理改善

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

Copyright 2018 FUJITSU LIMITED8

Page 10: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

富士通の取組み

Copyright 2018 FUJITSU LIMITED

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

Symfoware Server (Postgres) / Enterprise PostgresPostgreSQLベースのオープンなRDB。自社カラムナ技術によるOLAP強化2012

2014

▲ Symfoware Analytics ServerPostgreSQL I/Fでアクセス可能なカラムストア型DWH

PostgreSQL採用

2018▲ Big Data Integration Server

OSSと自社AI技術を活用したデータレイク

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

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

ビッグデータ対応

透過的暗号化

9

Page 11: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

Copyright 2018 FUJITSU LIMITED

データモデルの異なるデータベースを仮想的に統合 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;

各DBのエンジンをいかに協働させて性能最適化させるか?10

Page 12: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

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

Copyright 2018 FUJITSU LIMITED11

Page 13: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

外部DB外部DB

FDWによるマルチデータモデルの性能課題外部DBのデータ統合処理部分インデックス・統計情報等による改善が不可実データは外部DBが所有、PostgreSQLはデータを仮想統合している

外部DB

PostgreSQL

結果返却SELECT文実行

ソート結合 集計

PostgreSQL側でデータ統合

抽出

加工

データ統合処理がネック

Copyright 2018 FUJITSU LIMITED12

Page 14: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

外部DB外部DB

PostgreSQL

外部DB外部DB

FDWによるマルチデータモデルの性能課題 Sparkにクエリ処理をすべてオフロードして高速化クエリをSparkSQLに変換し、Sparkクラスタにオフロードしてサーバ並列で処理 Sparkは”パーティション”毎に外部DBを直接スキャンすることでデータを取得→ Sparkオフロード時は外部DBスキャンが性能ネックに

外部DB

Sparkソート結合 集計加工

結果受領Sparkにオフロード

抽出

外部DBスキャンがネック

Sparkで並列分散

Copyright 2018 FUJITSU LIMITED13

Page 15: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

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

Sparkクラスタ

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

Copyright 2018 FUJITSU LIMITED

Task1 (partition 1)1 <= id <= 100

Task2 (partition 2)101 <= id <= 200

Last Task9901 <= id <= 10000

・・・

slaveserver

外部DB id value

1 123

2 456

… …

10000 789

slaveserver

slaveserver

partitionの範囲でselect

※例:idカラムをキーにパーティションを作成し、Sparkが外部DBスキャン slaveが空いたら、次の検索タスクを再割当て

データ読込みタスク

14

Page 16: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

レコード内のカラムをキーにして分割すると、ランダムアクセスが発生テーブルのフルスキャン時、キーの順にデータが配置されているとは限らないデータ更新が高頻度で発生した場合に顕著

シーケンシャルアクセスするパーティショニング機構が必要格納順に、かつデータ量を平準化することで実現

外部DB内テーブル外部DB内テーブル

SparkクラスタSparkクラスタ

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

Copyright 2018 FUJITSU LIMITED

slaveserver

slaveserver

slaveserver

slaveserver

slaveserver

slaveserver

random access

block block block block block block

15

Page 17: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

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

外部DBをPostgreSQLとして実装 ctidを基準に自動パーティショニング

1. 外部PostgreSQLから、読込み対象テーブルのctid範囲を取得2. 1パーティションのレコード数がユーザ指定の行数になるようctid範囲を分割

- ユーザの指定は行数のみ、各パーティションのctid範囲を意識しない3. 分割したctid範囲を、外部PostgreSQLスキャン時のwhere句に変換

Copyright 2018 FUJITSU LIMITED

ctid = (0,1) レコード

ctid = (0,2) レコード

… …

ctid = (1,1) レコード

… …

ctid = (N,1) レコード

… …

ctid = (N, M) レコード

block0

block1

blockN

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

読込み対象テーブル

16

Page 18: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

Sparkクエリアクセラレーションの効果検証 Sparkオフロードなし(FDWのみ)と比較 TPC-H (SF=100), 8core/64GB RAM Server x 4 nodes

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

Copyright 2018 FUJITSU LIMITED

5430

2133

3412

225

1123

3203

159 86 162 23 69 1750

1000

2000

3000

4000

5000

6000

1 2 3 4 5 6

レスポンス時間

オフロードなし 提案手法

17

Page 19: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

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

Copyright 2018 FUJITSU LIMITED18

Page 20: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

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’)

};SELECT id FROM json_table;

Copyright 2018 FUJITSU LIMITED19

Page 21: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

FDWにおける非構造データのスキーマ設計従来:外部テーブル定義時にfieldとカラム

をmapping Schema before readNoSQLの良さである柔軟さを活かしきれない

Schema on the flyでNoSQLの柔軟性を確保スキーマ定義時にカラムmappingを行わない

•クエリ実行時にアクセス先フィールドを指定データ変更・業務変更時も、アプリ開発者がDML

のみ修正すればよい

CREATE FOREIGN TABLEjson_table( doc json );

CREATE FOREIGN TABLEjson_table(

“id” INTEGER,“name” TEXT,

…“age” INTEGER

)

Copyright 2018 FUJITSU LIMITED20

Page 22: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

FDWにおけるSchema on the fly処理の改善 PostgreSQLは外部DBから

JSONデータを抽出クエリの実行計画は、事前に作成

されたスキーマ情報をもとに生成 JSON内のフィールドはスキーマ

で持たないため、反映できない クエリに指定されたスキーマ情報

を利用して実行計画を修正クエリ解析結果を検証して外部

DB依頼可能か判断外部DBにfield抽出を依頼

Copyright 2018 FUJITSU LIMITED

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

実行計画作成

JSON抽出

id抽出

int型変換

id(int)抽出

実行計画修正

外部DBに依頼

外部DBに依頼

id(int)抽出処理

21

Page 23: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

既存処理は文字列変換、パース、型キャストの処理コストが発生提案手法は上記処理が不要外部DBが自身の格納形式・情報を元に抽出 PostgreSQLはバイナリ値を直接受け取る

PostgreSQL側処理

外部DB側処理

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

Copyright 2018 FUJITSU LIMITED

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)

上位処理

22

Page 24: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

提案手法の有無による効果を比較 TPC-H (SF=10), 6 core/192GB RAM Server

実行計画修正の効果で、すべてのクエリで性能改善(最大約6倍)既存のPostgreSQL処理の改善に成功していることが確認できる

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

6543210

Q1 Q3 Q4 Q5

相対

速度

Q6 Q7 Q8 Q9 Q10

conventionalproposed

Copyright 2018 FUJITSU LIMITED23

Page 25: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

おわりに富士通はビッグデータ活用の現場でPostgreSQL活用を推進 FDWによるマルチデータモデルを実装した製品を2019年4月リリース予定

PostgreSQLそのもののマルチモデルDB化の取組みへと活用コミュニティにフィードバック

Copyright 2018 FUJITSU LIMITED

Multiple Data Model by FDW Multi-Model Database

24

Page 26: マルチデータモデルDBのための - PGConf ASIA...でマルチデータモデルを実現 RDB NoSQL RDB 用 FDW NoSQL 用 FDW 検索処理 構造化データ メモリ配置

Copyright 2018 FUJITSU LIMITED