74
1 オープンソースRDBMS新機能 ランダウン(Firebird3.0/ MySQL 5.7/PostgreSQL 9.6) OSC2017TokyoSpring セミナー Firebird日本ユーザ会 木村明治(@meijik)

オープンソースRDBMS新機能ランダウンOSC2017TokyoSpring

Embed Size (px)

Citation preview

免責事項

• 本プレゼンテーションにおいて示されている見解は、私自身の見解であって、私の所属する会社・団体の見解を必ずしも反映したものではありません。ご了承ください。

2

アジェンダ

• 自己紹介

• オープンソースRDBMS御三家の紹介

• 都市伝説

• イマドキ! の機能

– VLDB、NoSQL、GIS、便利なSQL、HA、組込、ツール、セキュリティ、クラウド、etc

• オープンソースRDBMS御三家最新版、バージョン別機能

自己紹介

• 日本オラクルでMySQLサポートをしています。 – 漢と書いてオトコの同僚。

– 漢は「理論から学ぶデータベース実践入門 ~

リレーショナルモデルによる効率的なSQL」の著者

• DB関連のブログや書籍を書いてます。 – キムラデービーブログ

– 「おうちで学べるデータベースのきほん(共著)」

• ミックさんの知り合い。外人じゃないよ。

• MyNA会員、Neo4Jユーザ会会員

• Firebird日本ユーザ会の理事長

私とRDBMS

• 新卒にて日立関連会社に就職。HiRDBの開発にチョット関わる。

• 転職して独立系ソフトウエアベンダーに

–デスクトップRDBMSの開発に関わる。OCI/ODBCを利用したOracle/SQL Server,

Accessドライバを作成。

–製品バンドル用のRDBMSとしてPostgreSQL/MySQL/InterBase Open

Edition(Firebirdの前身)を評価。InterBase採用。

–製品PMとして、独自DBからMySQLへの移行。

OSS RDBMS御三家の紹介

• 日本ではPostgreSQL, MySQLが有名ですが、ロシア・ヨーロッパ・南米ではFirebirdも有名です。

• P M F でオープンソースRDBMS御三家と呼びましょう。(と私が提唱してました

• 詳しく話しているとそれだけで一時間かかるので「オープンソースDBの成熟度を計る」で検索してみてください。

オープンソースDBの成熟度を計る

• 2007年の雑誌記事、後にweb化された。

• オープンソースDBの成熟度を計る[前編]

–概略、MySQL(5.1まで), PostgreSQL(8.3まで)

– https://osdn.jp/magazine/07/09/20/023210

• オープンソースDBの成熟度を計る[後編]

– Firebird(2.1まで), JavaDB, 進化の方向性

– https://osdn.jp/magazine/07/09/20/0544256

都市伝説

• MySQL都市伝説

–バイナリカラムのバックアップがとれない。

–サブクエリがない。トランザクションがない

– MyISAMがInnoDBよりはやい、機能が多い。

• PostgreSQL都市伝説

– Windows版がない。

–バキューム必要で動作時「世界が止まる」。

– MySQLより遅い

• Firebird 都市伝説。自体がない。。。

イマドキ! の機能

• 都市伝説はすでに解消され、オープンソースRDBMSはイマドキ!の機能を実装・提供しはじめる。

• イマドキ! の機能

– VLDB、NoSQL、GIS、便利なSQL、HA、組込、ツール、クラウド

VLDB

• VLDB(Very Large Data Base)

–どのくらいがVery Largeなのかは時代による。

• パーティショニング機能

–巨大な表をキーを元に水平分割する

– PostgreSQLは8.0から。ただしテーブルの継承やトリガを利用する「なんちゃって」なもの。

• 専用構文・実装は9.6の次(10.0予定)から

– MySQL は5.1から。

• マテリアライズドビュー

– PostgreSQL9.3から

NoSQL

• JSONが扱えればいいよね! ということなら

– PostgreSQL 9.2でJSONサポート, 9.4でJSONB,

9.5で部分更新

– MySQL 5.7でJSONサポート。

• 外部とのデータ連携なら

– PostgreSQL 9.x のFDW(Foreign Data

Wrapper): dblinkや他DBの外部表と違って柔軟。

• Memcachedのプロトコル使いたいなら

– MySQL 5.6のInnoDB memcached プラグイン。5.7でさらに性能UP

GIS

• GIS(Geographic Information System:地理情報システム)

• PostgreSQL拡張のPostGISがデファクト。

– PostGIS リリース1.0.0RC1(2005)->1.5.0(2010)

–現在は2.3 が最新。2.4を開発中

• MySQLは4.xで初期実装したものの、その後長い間進展なし。

– MySQL 5.7で生まれ変わった(re-born)

–拡張ではなく本体組み込み

便利なSQL

• もともとMySQLでは便利な独自SQLが多々ある

–他のRDBMSやSQL標準にも影響

• PostgreSQLはもともと積極的にSQL標準をサポートしてきた。

–高塚さんによるとSQL:2008準拠相当

–最近は他のRDBMSの便利な機能も実装

• FirebirdもSQL標準には追随している

SQL標準(SQL:1999より後)

• SQL:2003, 2008, 2011, 2016

– SQL:2003

• XML関連機能 (SQL/XML)

• ウインドウ関数

• シーケンスジェネレータ

• 新しいカラム型: auto-generated values と identity-

columns

• MERGE ステートメント

• SQL/MED, SQL/MM

• TABLESAMPLE

• 等々 14

SQL:2003 SQL/MED

• PostgreSQL

– dblink

– FDW(Foreign Data Wrapper)9.1でサポート。9.2で拡張(postgres_fdw)。9.3からは更新も可。

• Firebird

– 2.5で外部クエリ(External Query)として実装。

• MySQL

– Federatedテーブルがあるが新規開発は停止。

–後継となるFederatedXがMariaDBにより開発。 15

SQL:2003 SQL/MM

• 全文検索(日本語)

• PostgreSQL/MySQL(5.6まで)/Firebird

–本体にはなし。

• MySQL 5.7からInnoDBのFTS(Full Text

Search)

• Groonga

– MySQLバインディング: Mroonga(むるーんが)

– PostgreSQLバインディング: PGroonga(ぴーじーるんが)

16

SQL: 2008

• MERGE と DIAGNOSTIC の拡張

• TRUNCATE TABLE ステートメント

• CASEのカンマ区切りWHEN句

• INSTEAD OF データベーストリガー

• partitioned JOINテーブル,

• いろいろなXQuery regular expression/pattern-

matching 機能のサポート

• 導出カラム名の拡張

17

SQL: 2011

• Temporal データベース

• その他しみじみとした機能改善

– MERGE内でのDELETE

–パイプラインDML

– CALL文の拡張

– Limited fetch

– Collection type拡張

– Non-enforcedテーブル制約

–ウインドウ関数の拡張、等 18

Limited Fetchの例

• SELECTの結果行数を制限

• SQL標準ではSQL2008にてFETCH FIRST

m ROWSの構文が定められ、同構文を元々利用していたIBM DB2と、DB2以外の商用RDBMSの最近のバージョン(MS SQL

Server 2012, Oracle 12c)でサポートされている。

• LIMIT句はSQL標準ではありませんが、MySQLとPostgreSQL、IBMのMySQL互換モードONにて利用できます。 19

SQL:2016

• 行間パターン認識機能「Row pattern

recognition」

• 「JSON」への対応

• 外部ソースにアクセスし、表形式で出力する「Polymorphic table functions」

20

行間パターン認識(RPR)

• RPR: Row Pattern Recognition

– 2008年に提出されたプロポーザルの規格化

• MATCH_RECOGNIZE句

• Oracle Database 12cのみ実装

• 詳細や利用例はこれから順に日本語になっていくと思います。

21

近年SQL標準の最大の功績

•CASE式

•ウインドウ関数

22

最近のロードマップ

2010 2011 2012 2013 2014 2015 2016

PostgreS

QL

9.0 9.1 9.2 9.3 9.4 9.5 9.6

(10.0)

MySQL 5.5 5.6 5.7

DMR

5.7 8.0

DMR

Firebird 2.5 3.0

Beta1

3.0

SQL標準 SQL:201

1

SQL:201

1/Cor1

2013

SQL:20

16

24

安定版 2.5.5

2015年11月リリース

InterBase

6.0 OE

Firebird

1.5

Firebird

2.0

Vulcan

Firebird

3.0

2016年~ 2006年

2002年

2004年

SMPへの最適化、

DBMS本体リデザイン

Firebird 2.x, Vulcan

の成果+αを統合

【SAS組込版】

Firebirdロードマップ

Firebird

1.0

2008年

Firebird

2.5

2010年

現在最新版

Firebird

2.1

25

Firebirdでサポート: MERGE文

MERGE INTO shain U

USING m_shain N

ON (U.ID = N.ID)

WHEN MATCHED THEN

UPDATE SET u.name = n.name

WHEN NOT MATCHED THEN

INSERT (U.ID, U.NAME)

VALUES(N.ID, N.NAME)

26

対照表と差分表をMERGE

• 対象表 差分表

1 みやはら 2 きむら 3 かまたき

id name id name 2 加藤 4 小笠原

1 みやはら 2 きむら 3 かまたき 2 加藤

4 小笠原

27

MySQLの場合

• (1) INSERT … ON DUPLICATE KEY

UPDATE構文

– INSERT INTO shain(id, name) select id, name

FROM m_shain ON DUPLICATE KEY

UPDATE name = m_shain.name;

• (2) REPLACE構文

– REPLACE INTO shain(id, name) select id,

name FROM m_shain;

• 最新の環境では(1)を使ってください。

28

PostgreSQLの場合 • PostgreSQL 9.5からサポート

• INSERT INTO shain(id, name) select id,

name FROM m_shain ON CONFLICT ON

CONSTRAINT 制約名 DO UPDATE set

name = EXCLUDED.name;

• MySQLと違って制約名が必要。

• 表名(m_shain)修飾ではなく、EXCLUDED

• PostgreSQL9.5より前ではCTE(PostgreSQl

9.1からサポート)もしくはトリガで。。。

29

レコードを差分追加する

(重複は無視) • 対象表 差分表

1 みやはら 2 きむら 3 かまたき

id name id name 2 加藤 4 小笠原

1 みやはら 2 きむら 3 かまたき 4 小笠原

30

MERGE文の例

MERGE INTO shain U ¥ USING m_shain N ¥ ON (U.ID = N.ID) ¥ WHEN MATCHED THEN ¥ UPDATE SET u.name = n.name ¥ WHEN NOT MATCHED THEN ¥ INSERT (U.ID, U.NAME) VALUES(N.ID, N.NAME)

31

MySQLの場合

• INSERT IGNOREを使う。

• INSERT IGNORE shain(id, name) select

id, name FROM m_shain;

• すごーく古いMySQLではINSERTのデフォルト動作がIGNORE(!)だったが、最新のMySQLでは明示的に指定する必要有り。

32

PostgreSQLの場合

• これも9.5以降

• “DO アクション”でアクションにNOTHING

• INSERT INTO shain(id, name) select id,

name FROM m_shain ON CONFLICT ON

CONSTRAINT 制約名 DO NOTHING;

33

CTE(共通表式)

• 共通表式は、ひとつのSQL文中に限り「何回でも」参照可能なローカルな表のことです。例えば、以下のようなSQLがあるとします。 – SELECT ID, NAME FROM (副問い合わせ);

• 共通表式で書き直すと以下のようになります。

WITH 副問い合わせ名 AS

(

副問い合わせ内容

)

SELECT ID, NAME FROM 副問い合わせ名

34

共通表式の例

WITH T AS ( SELECT B.部署名, E.社員名, E.給与 FROM 部署 B, 社員 E WHERE B.ID = E.ID ) SELECT * FROM T WHERE T.給与 > 200000

35

再帰クエリ

• 共通表形式を使う一番の利点は、これを用いて再帰的なSQL文を実行できること。

• 次ページのような社員表があるとすると、各社員はユニークな社員番号を持ち、mgridに直属の上司の社員番号が格納されている。社長‘みやはら’は上司がいないため、mgrid

はNULLとなる。

• このような形式は隣接リスト(Adjacency List)

モデルといい階層構造をRDBで利用するのによく使われます。

36

再帰クエリ

CREATE TABLE shain(empid INT PRIMARY KEY, name

VARCHAR(20), mgrid INTEGER);

INSERT INTO shain VALUES ( 1, 'みやはら', NULL);

INSERT INTO shain VALUES ( 2, 'きむら', 1);

INSERT INTO shain VALUES ( 3, 'かまたき', 1);

INSERT INTO shain VALUES ( 4, '加藤', 2);

INSERT INTO shain VALUES ( 5, '林', 2);

INSERT INTO shain VALUES ( 6, '三浦', 5);

37

階層構造を隣接リストで表現

1 みやはら

2 きむら 3 かまたき

4 加藤 5 林

6 三浦

38

再帰クエリ

• 通常のSQL文では、直属の部下を求めるのは簡単ですが、直接、間接(部下の部下)を一度に求めるのは困難でした。これを再帰的なSQL文で検索できます。再帰的なSQL文は以下のように記述できます。

WITH RECURSIVE 共通表名 AS (

初期集合を求めるSELECT

UNION ALL

再帰集合を求めるSELECT

) SELECT * FROM 共通表名

39

再帰クエリ

• 例) きむら自身と直接・間接の部下を求める。 SQL> WITH RECURSIVE n AS

CON> (SELECT empid, name

CON> FROM shain

CON> WHERE name = 'きむら'

CON> UNION ALL

CON> SELECT nnext.empid, nnext.name

CON> FROM shain as nnext, n

CON> WHERE n.empid = nnext.mgrid)

CON> SELECT name FROM n;

NAME ==================== きむら 加藤 林 三浦

40

再帰クエリ

• このような階層的なデータを扱うSQL拡張は、各商用データベースでは必要に応じて行われてきました。

• 例えば、Oracleの場合、CONNECT BYという独自拡張で、上記と同様の内容を以下のSQL文で得ることができます。

– SELECT name FROM shain START WITH

name = 'きむら' CONNECT BY PRIOR empid

= mgrid;

CTE・再帰クエリ(PostgreSQL)

• 8.4でサポート

• 9.1で拡張。WITH (...) の中や末尾のクエリにて INSERT/UPDATE/DELETE ができるように。

– MERGE 文はPostgreSQLは未サポートですが、UPDATE できなかったキーを持つ行のみ後から

INSERT を行うと、他DBの MERGE や

REPLACE 文と同等の機能をCTEでも実現できます。

41

CTE・再帰クエリ(Firebird/MySQL)

• Firebirdは2.1からCTE・再帰クエリをサポート

• MySQL

– CTEやCTEを使った再帰クエリの機能はない。

• 8.0 lab版には実装済み

–次に紹介するウインドウ関数的なものも(本家には)ない。。。

42

43

順位の簡単な求め方

• SQLパズル的なものはいろいろあれど。

• ウインドウ関数

– RANK()やDENSE_RANK()

• オープンソースRDBMSではPostgreSQL以外(8.4以降で対応)まだ対応が遅れ気味「だった」

– Firebirdは3.0で対応 !

– MariaDB(MySQLからのフォーク)は、次期版10.2で対応(現在RC版)

HA(High Availability)

• レプリケーション

– MySQLの代名詞。バージョン3.xよりサポート

• 5.5で準同期。5.6でGTID対応。

– PostgreSQLは外部ツール(pg-pool, slony)で従来対応していたが、バージョン9.0から本体にレプリケーションの機能が実装された(ストリーミング・レプリケーション)

– Firebirdは有償のIB-Replicatorで対応。

• 次期4.0で本体に組み込み予定(from Red Database)

–参照の負荷分散や、マスターがダウンしたときのスレーブ昇格など。

MySQLのレプリケーション

• MySQL 3.xの頃から標準搭載

• ユーザの自由度が高く柔軟な構成が可能

• 基本非同期、文ベースのレプリケーションだったが、行ベースや準同期の機能がつき、GTID

トランザクション、クラッシュセーフのレプリケーション、スレーブでのマルチスレッドでの実行、遅延レプリケーション、マルチマスタなど、想像力の限り(?) の構成が可能。。。。

レプリケーションとは?

• レプリケーションは一つのMySQLデータベースサーバ(マスター)から一つ以上のMySQL

データベースサーバにデータを複製(レプリケート)します。

Master Slave

binlog relay log

バイナリログ

• マスターで複数の接続で並列で行われた更新をcommit順にシリアルに並べています。

Master Slave

binlog relay log

time

SQLスレッドでシリアルに実行

commit

commit

commit

rollback

タイプとフォーマット

• タイプ:

– 非同期 – マスターから更新を受け取るために、スレーブはずっと接続しておく必要がない。

– 準同期 – マスターからスレーブのうち最低一つがコミットをリレーログに書き込んだことを確認する。

– (完全)同期 –全てのスレーブがコミットをデータベースにまで書込んだことを確認する->MySQLにはない。

• フォーマット:

– 文ベース – SQL文をマスターからスレーブに伝搬する

– 行ベース – 各行の変更をマスターからスレーブに伝搬

– Mixed – 文ベースと行ベースの混合

古いMySQLレプリケーションの短所

• 真の高可用性(High Availability)ではない – システムダウンの際データがロストする

一つ以上のスレーブのフェイルオーバー/フェイルバックが複雑

リカバリしたマスターはバイナリログ(binlog)に記録されなかった変更が欠損する

スレーブはマスターからのタイムラグがある

MySQLレプリケーション改善点

• 真の高可用性(High Availability)ではない – システムダウンの際データがロストする→対応 – 準同期レプリケーション(5.5)

– クラッシュセーフなレプリケーション(5.6) • まだMySQL 5.5で消耗してるの?MySQL 5.6でクラッシュセーフなレプリケーションを活用して枕を高くして眠れる日々を満喫する方法

• http://nippondanji.blogspot.jp/2014/12/mysql-55mysql-56.html

一つ以上のスレーブのフェイルオーバー/フェイルバックが複雑→対応 MHAによるフェイルオーバー(5.5)

GTID設定とMySQL Utilitiesのmysqlfailoverの利用(5.6)

レプリケーションの利用法

• 高可用性(High Availability) (フェイルオーバー)

• スケーラビリティ – スケールアウト

• データセキュリティ/バックアップ

• 分析

• 長距離間のデータ配布

• MySQLのより新しいバージョンをスレーブとして追加して新バージョンの既存データでの動作確認

レプリケーションアーキテクチャの基本

Master Slave

binlog

relay log

Clients

I/O Thread

SQL Thread

1

2

dump thread

3 4

5

構成例: マスターと三つのスレーブ

Master

App/Web Server

Slaves Clients

Writes

Reads

レプリケーションのトポロジ

Singleスレーブ

Multipleスレーブ

Chain, Cascade Circular

Multi - Circular Multi - Master

Multi-MasterやCircular構成は運用や障害の対処が難しい事に注意が必要

PostgreSQLレプリの歩み

2010 2011 2012 2013 2014 2015 2016

PostgreS

QL

9.0 9.1 9.2 9.3 9.4 9.5 9.6

非同期

同期 カスケード

スタンバイサーバへの高速切替

レプリケーションスロット, ロジ

カルデコーディング

高速フェイルオーバー

マルチ同期レプリケーション

MySQL 5.5 5.6 5.7

・準同期

・ハートビート

・GTID

・クラッシュセーフ

スレーブ

・マルチソース

・マルチスレッドスレーブ

HA(Cluster)

• クラッシュセーフであれば市販のクラスタソフトウエアで対応できる

–共有ディスクでActive/Standby

– DRBDでActive/Standby

• MySQLではストレージエンジンとしてNDBを利用し、NDB用に拡張したMySQL本体(mysqld)を含めてMySQL Clusterとして提供

• PostgreSQLではPostgre-XC, Postgre-XL,

Postgre-XC2などの開発が続く。。。

• Firebirdは….聞かないでください。。。。

MySQL Cluster: Overview

• 自動シャーディング、マルチマスター

• ACID 準拠のトランザクション, OLTP + Real-Time Analytics 読込み/書込み処理

に対する高い拡張性

• シェアードナッシング、単一障害点無し

• 自動修復 + オンラインオペレーション 99.999% の高可用性

• オープンソース + 商用版

• コモディディハードウェア + 充実した管理ツール、監視ツール 低い TCO

• Key/Value + SQL の柔軟性

• SQL + Memcached + JavaScript + Java + JPA + HTTP/REST & C++ SQL + NoSQL

• インメモリデータベース + ディスクデータ

• 非常に低いレイテンシ、短いアクセス時間 リアルタイム

58

OSSDBの二つのグループ

組み込みから

ミドルレンジまでの機能強化

Firebird

エンタープライズ向けの

機能強化

MySQL, PostgreSQL

商用データベースエンタープライズ

規模

ミドルレンジは用途によりどちらのグループでもOK

組み込み

• FirebirdとMySQLは組み込み用のEmbedded libraryが提供されている

• FirebirdはDBが単一ファイル、ライセンスも緩やかなので組み込みやすい。

59

組み込み(Firebird/LibreOffice)

• Base4.2からFirebirdのEmbedded版が使えるようになり、4.3からは単純にBaseを起動するとDBウィザードが起動し指定できるように!

• Base5.2まではFirebird 2.5, Base5.3以降はFirebird 3.0が利用される。

• 次バージョンのBase5.4ではFirebirdがデフォルトのデータベースエンジンになる?

– http://www.firebirdnews.org/firebird-3-by-

default-in-libreoffice-5-4-base/

60

ツール(1)

• Firebird

–市販のGUIツール。IBExpert , Database

Workbench。無償のFlameRobin

• MySQL

– MySQL Utilities, MySQL Fabric, MySQL

Workbench

– MySQL商用版にのみ含まれるものもあり

– Percona Tools for MySQL, MHA

– Visual StudioとTools, Connector/Netでストアドプロシジャのデバッグが可能

ツール(2)

• PostgreSQL

– Contribに含まれるツール。PotgreSQL Toolkit

– PL/pgSQLデバッガー(Enterprise DB)

セキュリティ(1)

• 権限の強化・細分化

– PostgreSQLのSE-PostgreSQL(contribのsepgsqlモジュール)や本体の機能強化

• 監査(Audit)

– Firebird 2.5からのAudit log

– MySQL商用版のAudit plugin(MySQL5.6以降),

McAfee MySQL Audit Plugin(MySQL 5.1以降,

MariaDB 5.5以降)

セキュリティ(2)

• 暗号化

–基本暗号化・複合化の関数

– PostgreSQL9.3: 透過的暗号化(TDE)モジュール(by NEC)

– MySQL 5.7.12以降: InnoDBテーブルスペース暗号化

クラウド(1)

• MySQLやPostgreSQLはよく使われている

–素のバージョンが使われていたが。。。。

• クラウドのメリットをいかすための、独自の拡張が行われている

クラウド(2)

• MySQL互換

– Amazon Aurora

• 高可用性と耐久性、スケーラビリティ

• MySQL 5.6互換

• PostgreSQL互換

– Amazon Redshift

• ペタバイト級のデータを扱えるデータウエアハウス

– Amazon Aurora with PostgreSQL

Compatibility

• プレビューで利用可能。PostgreSQL 9.6互換

OSS RDBMS 御三家最新版バージョン別機能

• Firebird : 3.0

• MySQL: 5.7

• PostgreSQL: 9.5/9.6

Firebird 3.0の新機能

• 統一バイナリ(CS, SS, SC)

• SS(SuperServer)での真のSMPサポート

• オブジェクト指向C++ APIの提供

• 新しいデータ型(BOOLEAN, IDENTITY)

• SQLパッケージ(一連のSPとファンクションをまとめたもの)のサポート

• DDLトリガー

• ウインドウ関数のサポート 68

MySQL 5.7新機能

• InnoDBパフォーマンス!

–本体のパフォーマンスアップ

–一時テーブルのInnoDB化

• 運用効率化

–オンラインでのデータベースバッファサイズ変更

–オンラインDDLの改善

• FTS (Full Text Search)

• GIS (Boostライブラリ)

• レプリケーションの柔軟な運用

69

MySQL 8.0新機能(?)

• 本日17:15-18:00 同じ506教室にて、yoku0825さんによる以下のセッションあり。

– ここで聞けるかも

• 「MySQL 5.7の次のMySQL 8.0はどんなものになるだろう」

70

PostgreSQL 9.5

• IMPORT FOREIGN SCHEMA構文

• 行レベルのセキュリティポリシー

• BRINインデックス

• 外部テーブルの継承

• GROUPING SETS, CUBE と ROLLUP

• JSONB更新用のオペレータと機能追加

• INSERT ... ON CONFLICT DO

NOTHING/UPDATE (いわゆる"UPSERT")

• pg_rewind

71

PostgreSQL 9.6

• パラレルクエリ(シーケンシャルスキャン、Nested

Loop 結合、ソート・集約のパラレル実行)に対応。

• VACUUM で XID凍結済みの部分を省略して実行可能に(XID周回対策)

• 同期スタンバイサーバを同時に複数持てるように。(9.5までは一台まで)

• 全文検索でフレーズ(隣接した複数語)検索に対応

• postgres_fdw がリモートでの結合、ソート、UPDATE、DELETE に対応。

多CPUサーバでの性能スケーラビリティが改善。

72

PostgreSQLパラレルクエリ進捗 2013 2014 2015 2016 2017

PostgreSQL 9.3 9.4 9.5 9.6

10.0(予定)

独自のワーカプロセス定義・起動可能

ワーカプロセスの動的起動。共有メモリを動的確保。

ワーカプロセスで一貫した情報が見られる機能

【完成】

並列処理結果をまとめる機能。並列処理を意識した実行計画の立案機能

【改善】

インデックススキャン、マージ結合・ハッシュ結合対応、サブクエリ対応

Thanks !

• ご静聴ありがとうございました。

– PotgreSQLは高塚さんや澤田さん、ぬこさんの資料を参考にさせていただきました。

– SQL標準は土田さんの資料を参考にしました。

• OSS RDBMSは適材適所

– NoSQLとRDBMSも適材適所

• NoSQL !

– Redis

– Neo4J

• いろいろ使ってみてください!