オープンソース・データベースの
最新事情@JustTechTalk#06
2016年05月27日
日本オラクル株式会社
MySQL Global Business Unit
テクニカルアナリスト 木村明治(KIMURA, Meiji)
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
免責事項
• 本プレゼンテーションにおいて示されている見解は、私自身の見解であっ
て、私の所属する会社・団体の見解を必ずしも反映したものではありませ
ん。ご了承ください。
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
アジェンダ
• 自己紹介
• 私とRDBMS, 私と??
• オープンソースRDBMS御三家の紹介
• 都市伝説
• イマドキ! の機能
– VLDB、NoSQL、GIS、便利なSQL、HA、組込、ツール、セキュリティ、クラウド、etc
• オープンソースRDBMS御三家の次期版
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
自己紹介
• 日本オラクルにてMySQL技術サポートを行っています。
– 漢と書いてオトコの同僚。
– 漢は「理論から学ぶデータベース実践入門 ~
リレーショナルモデルによる効率的なSQL」の著者
• DB関連のブログや書籍を書いてます。
– キムラデービーブログ
– 「おうちで学べるデータベースのきほん」
• ミックさんの知り合い。外人じゃないよ。
• MyNA会員、Neo4Jユーザ会会員
• Firebird日本ユーザ会の理事長
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
私とRDBMS
• 新卒にて日立関連会社に就職。HiRDBの開発に関わる。
• 転職して独立系ソフトウエアベンダーに
– デスクトップRDBMSの開発に関わる。OCI/ODBCを利用したOracle/SQL Server, Access
ドライバを作成。
– 製品バンドル用のRDBMSとしてPostgreSQL/MySQL/InterBase Open Edition(Firebird
の前身)を評価。InterBase採用。
– 製品PMとして、独自DBからMySQLへの移行。
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
私と某氏(同級生)
• 実は小学生くらいからゲームがやりたくてマイコンを独学
• 高校生になったタイミングでNEC-PC6001(愛称パピコン)を購入、遊びはじ
める。とりあえずゲームをつくる。
• あまりプログラミングは得意ではなかったので、同級生にプログラミングを
押し付けて、主にグラフィックと音楽を担当。
• 結局ゲームで一攫千金できなかったため、まともな社会人にもどる。
• 社会人になってプログラミングするも、やはり得意ではなかったため中間
管理職になる。もっとむいてなかったので、無職のあと自営業、MySQL AB
日本支社に参加→サンマイクロシステムズ,Oracleによる統合により現職。
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
同級生と昔作った代表的なゲーム
7
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 8
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
OSS RDBMS御三家の紹介
• 日本ではPostgreSQL, MySQLが有名ですが、ロシア・ヨーロッパ・南米では
Firebirdも有名です。
• P M F でオープンソースRDBMS御三家と呼びましょう。(と私が提唱してまし
た 
• 詳しく話しているとそれだけで一時間かかるので「オープンソースDBの成
熟度を計る」で検索してみてください。
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
オープンソース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
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
都市伝説
• MySQL都市伝説
– バイナリカラムのバックアップがとれない。
– サブクエリがない。トランザクションがない
– MyISAMがInnoDBよりはやい、機能が多い。
• PostgreSQL都市伝説
– Windows版がない。
– バキューム必要で動作時「世界が止まる」。
– MySQLより遅い
• Firebird 都市伝説
– ブラウザ
– なにそれおいしいの?
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
イマドキ! の機能
• 都市伝説はすでに解消され、オープンソースRDBMSはイマドキ!の機能を
実装・提供しはじめる。
• イマドキ! の機能
– VLDB、NoSQL、GIS、便利なSQL、HA、組込、ツール、クラウド
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
VLDB
• VLDB(Very Large Data Base)
– どのくらいがVery Largeなのかは時代による。
• パーティショニング機能
– 巨大な表をキーを元に水平分割する
– PostgreSQL 8.0から
– MySQL 5.1から
• マテリアライズドビュー
– ビューを実体化してパフォーマンスをあげる
– PostgreSQL9.3から
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
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
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
GIS
• GIS(Geographic Information System:地理情報システム)
• PostgreSQL拡張のPostGISがデファクト。
– PostGIS リリース1.0.0RC1(2005)->1.5.0(2010)
– 現在は2.2 が最新。2.3を開発中
• postgis-2.2.2.tar.gz pdf html (Release Notes)
• postgis-2.1.8.tar.gz pdf html (Release Notes)
• postgis-2.0.7.tar.gz pdf html (Release Notes)
• postgis-1.5.8.tar.gz pdf html (Release Notes)
• MySQLは4.xで初期実装したものの、その後長い間進展なし。
– MySQL 5.7で生まれ変わった(re-born)
– 拡張ではなく本体組み込み
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
MySQL 5.7 : 生まれ変わったGIS
• GIS チーム専任の専門家を雇用
• 古いアルゴリズムと関連するコードの多くを破棄
– FOSS Boost.Geometry library (1.58)で置き換え
• OGC 空間関数サポートを完了
– 標準化されたnamespace
• ネイティブのGEOMETRYデータ型をInnoDBでサポート
– SPATIAL INDEX サポートをInnoDB に追加(R-treeを利用)
• Geohash と GeoJSON のサポートを追加
• ヘルパー関数の追加: ST_Distance_Sphere(), ST_MakeEnvelope(),
ST_IsValid(), ST_Validate(), ST_Simplify, …
16
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
便利なSQL
• もともとMySQLでは便利な独自SQLが多々ある
– 他のRDBMSやSQL標準にも影響
• PostgreSQLはもともと積極的にSQL標準をサポートしてきた。
– 最近は他のRDBMSの便利な機能も実装
• FirebirdもSQL標準には追随している
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
SQL標準(SQL:1999より後)
• SQL:2003, 2008, 2011, 2012
– SQL:2003
• XML関連機能 (SQL/XML)
• ウインドウ関数
• シーケンスジェネレータ
• 新しいカラム型: auto-generated values と identity-columns
• MERGE ステートメント
• SQL/MED, SQL/MM
• TABLESAMPLE
• Etc…
18
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
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により開発。
19
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
SQL:2003 SQL/MM
• 全文検索(日本語)
• PostgreSQL/MySQL(5.6まで)/Firebird
– 本体にはなし。
• MySQL 5.7からInnoDBのFTS(Full Text Search)
• Groonga
– MySQLバインディング: Mroonga(むるーんが)
– PostgreSQLバインディング: PGroonga(ぴーじーるんが)
20
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
SQL: 2008
• MERGE と DIAGNOSTIC の拡張
• TRUNCATE TABLE ステートメント
• CASEのカンマ区切りWHEN句
• INSTEAD OF データベーストリガー
• partitioned JOINテーブル,
• いろいろなXQuery regular expression/pattern-matching 機能のサポート
• 導出カラム名の拡張
21
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
SQL: 2011
• Temporal データベース
• その他しみじみとした機能改善
– MERGE内でのDELETE
– パイプラインDML
– CALL文の拡張
– Limited fetch
– Collection type拡張
– Non-enforcedテーブル制約
– Window関数の拡張、等
22
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
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にて利用できます。
23
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
SQL:2012/RPR
• RPR: Row Pattern Recognition
– 2008年に提出されたプロポーザルの規格化
• MATCH_RECOGNIZE句
• Oracle Database 12cのみ実装
• 詳細や利用例はこれから順に日本語になっていくと思います。
24
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
近年SQL標準の最大の功績といえば
•CASE式
と
•ウインドウ関数
25
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
最近のロードマップ
2010 2011 2012 2013 2014 2015~現在
PostgreSQL 9.0 9.1 9.2 9.3 9.4 9.5
MySQL 5.5 5.6 5.7 DMR 5.7
Firebird 2.5 3.0 Beta1 3.0
SQL標準 SQL:2011 SQL:2012/RP
R
(SQL:2016 策
定中?)
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 27
安定版 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ロードマップ(2016まで)
Firebird
1.0
2008年
Firebird
2.5
2010年
現在最新版
Firebird
2.1
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 28
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)
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 29
対照表と差分表をMERGE
• 対象表 差分表
1 みやはら
2 きむら
3 かまたき
id name id name
2 加藤
4 小笠原
1 みやはら
2 きむら
3 かまたき
2 加藤
4 小笠原
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 30
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)を使ってください。
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 31
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からサポート)もしくはトリガ
で。。。
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 32
レコードを差分追加する
(重複は無視)
• 対象表 差分表
1 みやはら
2 きむら
3 かまたき
id name id name
2 加藤
4 小笠原
1 みやはら
2 きむら
3 かまたき
4 小笠原
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 33
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)
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 34
MySQLの場合
• INSERT IGNOREを使う。
• INSERT IGNORE shain(id, name) select id, name FROM m_shain;
• 以前はINSERTのデフォルト動作がIGNOREだったが、最新のMySQLでは明
示的に指定する必要有り。
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 35
PostgreSQLの場合
• これも9.5以降
• “DO アクション”でアクションにNOTHING
• INSERT INTO shain(id, name) select id, name FROM m_shain ON CONFLICT
ON CONSTRAINT 制約名 DO NOTHING;
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 36
CTE(共通表式)
• 共通表式は、ひとつのSQL文中に限り「何回でも」参照可能なローカルな
表のことです。例えば、以下のようなSQLがあるとします。
– SELECT ID, NAME FROM (副問い合わせ);
• 共通表式で書き直すと以下のようになります。
WITH 副問い合わせ名 AS
(
副問い合わせ内容
)
SELECT ID, NAME FROM 副問い合わせ名
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 37
共通表式の例
WITH T AS (
SELECT B.部署名, E.社員名, E.給与
FROM 部署 B, 社員 E
WHERE B.ID = E.ID
)
SELECT * FROM T WHERE T.給与 > 200000
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 38
再帰クエリ
• 共通表形式を使う一番の利点は、これを用いて再帰的なSQL文を実行で
きること。
• 次ページのような社員表があるとすると、各社員はユニークな社員番号を
持ち、mgridに直属の上司の社員番号が格納されている。社長‘みやはら’
は上司がいないため、mgridはNULLとなる。
• このような形式は隣接リスト(Adjacency List)モデルといい階層構造をRDB
で利用するのによく使われます。
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 39
再帰クエリ
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);
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 40
階層構造を隣接リストで表現
1 みやはら
2 きむら 3 かまたき
4 加藤 5 林
6 三浦
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 41
再帰クエリ
• 通常のSQL文では、直属の部下を求めるのは簡単ですが、直接、間接(部
下の部下)を一度に求めるのは困難でした。これを再帰的なSQL文で検索
できます。再帰的なSQL文は以下のように記述できます。
WITH RECURSIVE 共通表名 AS (
初期集合を求めるSELECT
UNION ALL
再帰集合を求めるSELECT
) SELECT * FROM 共通表名
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 42
再帰クエリ
• 例) きむらの直接・間接の部下を求める。
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
====================
きむら
加藤
林
三浦
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 43
再帰クエリ
• このような階層的なデータを扱うSQL拡張は、各商用データベースでは必
要に応じて行われてきました。
• 例えば、Oracleの場合、CONNECT BYという独自拡張で、上記と同様の内
容を以下のSQL文で得ることができます。
– SELECT name FROM shain START WITH name = 'きむら' CONNECT BY PRIOR empid =
mgrid;
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
CTE・再帰クエリ(PostgreSQL)
• 8.4でサポート
• 9.1で拡張。WITH (...) の中や末尾のクエリにて INSERT/UPDATE/DELETE が
できるように。
– MERGE 文はPostgreSQLは未サポートですが、UPDATE できなかったキーを持つ行の
み後から INSERT を行うと、他DBの MERGE や REPLACE 文と同等の機能をCTEでも実
現できます。
44
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
CTE・再帰クエリ(Firebird/MySQL)
• Firebirdは2.1からCTE・再帰クエリをサポート
• MySQL
– CTEやCTEを使った再帰クエリの機能はない。
– 次に紹介するウインドウ関数的なものもない。
45
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 46
順位の簡単な求め方
• SQLパズル的なものはいろいろあれど。
• ウインドウ関数
– RANK()
– DENSE_RANK()
• オープンソースRDBMSではPostgreSQL以外(8.4以降で対応)まだ対応が遅
れ気味「だった」
– Firebirdは3.0で対応 !
– MariaDB(MySQLからのフォーク)は、次期版10.2で対応(現在アルファ版)
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
HA(High Availability)
• レプリケーション
– MySQLの代名詞。バージョン3.xよりサポート
• 5.5で準同期。5.6でGTID対応。
– PostgreSQLは外部ツール(pg-pool, slony)で従来対応していたが、バージョン9.0から
本体にレプリケーションの機能が実装された(ストリーミング・レプリケーション)
– Firebirdは別途市販されているIB-Replicatorで対応。
– 参照の負荷分散や、マスターがダウンしたときのスレーブ昇格など。
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
MySQLのレプリケーション
• MySQL 3.xの頃から標準搭載
• ユーザの自由度が高く柔軟な構成が可能
• 基本非同期、文ベースのレプリケーションだったが、行ベースや準同期の
機能がつき、GTIDトランザクション、クラッシュセーフのレプリケーション、ス
レーブでのマルチスレッドでの実行、遅延レプリケーション、マルチマスタ
など、想像力の限り(?) の構成が可能。。。。
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
レプリケーションとは?
• レプリケーションは一つのMySQLデータベースサーバ(マスター)から一つ
以上のMySQLデータベースサーバにデータを複製(レプリケート)します。
Master Slave
binlog relay log
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
バイナリログ
• マスターで複数の接続で並列で行われた更新をcommit順にシリアルに
並べています。
Master Slave
binlog relay log
time
↑
SQLスレッドでシリアルに実行
commit
commit
commit
rollback
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
タイプとフォーマット
• タイプ:
– 非同期 – マスターから更新を受け取るために、スレーブはずっと接続しておく必要が
ない。
– 準同期 – マスターからスレーブのうち最低一つがコミットをリレーログに書き込んだ
ことを確認する。
– (完全)同期 –全てのスレーブがコミットをデータベースにまで書込んだことを確認す
る->MySQLにはない。
• フォーマット:
– 文ベース – SQL文をマスターからスレーブに伝搬する
– 行ベース – 各行の変更をマスターからスレーブに伝搬
– Mixed – 文ベースと行ベースの混合
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
MySQLレプリケーションの短所?
• 真の高可用性(High Availability)ではない – システムダウンの際データが
ロストする
 一つ以上のスレーブのフェイルオーバー/フェイルバックが複雑
 リカバリしたマスターはバイナリログ(binlog)に記録されなかった変更が
欠損する
 スレーブはマスターからのタイムラグがある
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
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)
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
レプリケーションの利用法
• 高可用性(High Availability) (フェイルオーバー)
• スケーラビリティ – スケールアウト
• データセキュリティ/バックアップ
• 分析
• 長距離間のデータ配布
• MySQLのより新しいバージョンをスレーブとして追加して新バージョンの既
存データでの動作確認
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
レプリケーションアーキテクチャの基本
Master Slave
binlog
relay log
Clients
I/O Thread
SQL Thread
1
2
dump thread
3 4
5
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
構成例: マスターと三つのスレーブ
Master
App/Web
Server
SlavesClients
Writes
Reads
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
レプリケーションのトポロジ
Single
Multiple
Chain Circular
Multi - CircularMulti - Master
Multi-MasterやCircular構成は運用や障害の対処が難しい
事に注意が必要
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
HA(Cluster)
• クラッシュセーフであれば市販のクラスタソフトウエアで対応できる
– 共有ディスクでActive/Standby
– DRBDでActive/Standby
• MySQLではストレージエンジンとしてNDBを利用し、NDB用に拡張した
MySQL本体(mysqld)を含めてMySQL Clusterとして提供
• PostgreSQLではPostgre-XC, Postgre-XL, Postgre-XC2などの開発が続く。。。
• Firebirdは….聞かないでください。。。。
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
MySQL Cluster: Overview
• 自動シャーディング、マルチマスター
• ACID 準拠のトランザクション, OLTP + Real-Time Analytics
読込み/書込み処理
に対する高い拡張性
• シェアードナッシング、単一障害点無し
• 自動修復 + オンラインオペレーション99.999% の高可用性
• オープンソース + 商用版
• コモディディハードウェア + 充実した管理ツール、監視ツール低い TCO
• Key/Value + SQL の柔軟性
• SQL + Memcached + JavaScript + Java + JPA + HTTP/REST & C++SQL + NoSQL
• インメモリデータベース + ディスクデータ
• 非常に低いレイテンシ、短いアクセス時間リアルタイム
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. | 60
OSSDBの二つのグループ
組み込みから
ミドルレンジまでの機能強化
Firebird
エンタープライズ向けの
機能強化
MySQL, PostgreSQL
商用データベースエンタープライズ
規
模
大
小
ミドルレンジは用途により
どちらのグループでもOK
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
組み込み
• FirebirdとMySQLは組み込み用のEmbedded libraryが提供されている
• FirebirdはDBが単一ファイル、ライセンスも緩やかなので組み込みやすい。
– LibreOffice Baseでは4.2からFirebirdのEmbedded版が使えるようになり、4.3からは
単純にBaseを起動するとデータベースウィザードが起動し指定できるように!
– LimbreOffice 4.3からFirebirdを選択することができましたが、昨年末時点の最新版
5.0.x系列(2015-12-25時点では5.0.4)では残念ながらまた「実験的な機能」になってし
まったようです。起動後すぐには選択できませんが、起動後以下の設定をすると次
回から選択利用できるようになります。
オプション - LibreOffice - 詳細
実験的(不安定)なオプション
実験的な機能を有効にする(B)
61
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
ツール
• Firebird
– 市販のGUIツール。IBExpert , Database Workbench
• MySQL
– MySQL Utilities, MySQL Fabric, MySQL Workbench
– MySQL商用版にのみ含まれるものもあり
– Percona Tools for MySQL, MHA
– Visual StudioとTools, Connector/Netでストアドプロシジャのデバッグが可能
• PostgreSQL
– Contribに含まれるツール。PotgreSQL Toolkit
– PL/pgSQLデバッガー(Enterprise DB)
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
セキュリティ
• 権限の強化・細分化
– PostgreSQLのSE-PostgreSQL(contribのsepgsqlモジュール)や本体の機能強化
• 監査(Audit)
– Firebird 2.5からのAudit log
– MySQL商用版のAudit plugin(MySQL5.6以降), McAfee MySQL Audit Plugin(MySQL
5.1以降)
• 暗号化
– 基本暗号化・複合化の関数
– PostgreSQL9.3: 透過的暗号化(TDE)モジュール(by NEC)
– MySQL 5.7.12: InnoDBテーブルスペース暗号化
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
クラウド
• MySQLやPostgreSQLはよく使われている
– 素のバージョンが使われていたが。。。。
• クラウドのメリットをいかすための、独自の拡張が行われている
• MySQL互換のRDS for Aurora
– 高可用性と耐久性、スケーラビリティ
– このセッションのあとAWSの方から直々に
• PostgreSQL互換のAmazon Redshift
– ペタバイト級のデータを扱えるデータウエアハウス
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
OSS RDBMS御三家バージョン別機能
• Firebird : 3.0
• MySQL: 5.7
• PostgreSQL: 9.4/9.5
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
Firebird 3.0の新機能
• 統一バイナリ(CS, SS, SC)
• SS(SuperServer)での真のSMPサポート
• オブジェクト指向C++ APIの提供
• 新しいデータ型(BOOLEAN, IDENTITY)
• SQLパッケージ(一連のSPとファンクションをまとめたもの)のサポート
• DDLトリガー
• Window関数のサポート
66
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
MySQL 5.7新機能
• InnoDBパフォーマンス!
– 本体のパフォーマンスアップ
– 一時テーブルのInnoDB化
• 運用効率化
– オンラインでのデータベースバッファサイズ変更
– オンラインDDLの改善
• FTS (Full Text Search)
• GIS (Boostライブラリ)
• レプリケーションの柔軟な運用
67
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
PostgreSQL 9.4
• マテリアライズドビューの改善
• Logical Decoding
• Background Worker
• JSONB(バイナリ型JSON)のサポート
• postgresql.confへのSQLアクセス
• GIN Indexesのコンパクト化、高速化
• WALのパフォーマンス改善
• Streaming Replicationへのdelayオプション実装
68
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
PostgreSQL 9.5
• IMPORT FOREIGN SCHEMA構文
• 行レベルのセキュリティポリシー
• BRINインデックス
• 外部テーブルの継承
• GROUPING SETS, CUBE と ROLLUP
• JSONB更新用のオペレータと機能追加
• INSERT ... ON CONFLICT DO NOTHING/UPDATE (いわゆる"UPSERT")
• pg_rewind
69
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
Thanks !
• ご静聴ありがとうございました。
• OSS RDBMSは適材適所
– NoSQLとRDBMSも適材適所 
• NoSQL !
– Redis
– Neo4J
• いろいろ使ってみてください!
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
宣伝
• おうちで学べるデータベースのきほん
– DBの初心者はこちらをどうぞ。
– 増刷出来(パチパチ)
– アマゾンでポチるか、じゃんけんに勝つ
– ハッシュタグは
#ouchidb
71
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. | 73
Copyright © 2015 Oracle and/or its affiliates. All rights reserved. |
オープンソース・データベースの最新事情

オープンソース・データベースの最新事情

  • 1.
  • 2.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 免責事項 • 本プレゼンテーションにおいて示されている見解は、私自身の見解であっ て、私の所属する会社・団体の見解を必ずしも反映したものではありませ ん。ご了承ください。
  • 3.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | アジェンダ • 自己紹介 • 私とRDBMS, 私と?? • オープンソースRDBMS御三家の紹介 • 都市伝説 • イマドキ! の機能 – VLDB、NoSQL、GIS、便利なSQL、HA、組込、ツール、セキュリティ、クラウド、etc • オープンソースRDBMS御三家の次期版
  • 4.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 自己紹介 • 日本オラクルにてMySQL技術サポートを行っています。 – 漢と書いてオトコの同僚。 – 漢は「理論から学ぶデータベース実践入門 ~ リレーショナルモデルによる効率的なSQL」の著者 • DB関連のブログや書籍を書いてます。 – キムラデービーブログ – 「おうちで学べるデータベースのきほん」 • ミックさんの知り合い。外人じゃないよ。 • MyNA会員、Neo4Jユーザ会会員 • Firebird日本ユーザ会の理事長
  • 5.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 私とRDBMS • 新卒にて日立関連会社に就職。HiRDBの開発に関わる。 • 転職して独立系ソフトウエアベンダーに – デスクトップRDBMSの開発に関わる。OCI/ODBCを利用したOracle/SQL Server, Access ドライバを作成。 – 製品バンドル用のRDBMSとしてPostgreSQL/MySQL/InterBase Open Edition(Firebird の前身)を評価。InterBase採用。 – 製品PMとして、独自DBからMySQLへの移行。
  • 6.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 私と某氏(同級生) • 実は小学生くらいからゲームがやりたくてマイコンを独学 • 高校生になったタイミングでNEC-PC6001(愛称パピコン)を購入、遊びはじ める。とりあえずゲームをつくる。 • あまりプログラミングは得意ではなかったので、同級生にプログラミングを 押し付けて、主にグラフィックと音楽を担当。 • 結局ゲームで一攫千金できなかったため、まともな社会人にもどる。 • 社会人になってプログラミングするも、やはり得意ではなかったため中間 管理職になる。もっとむいてなかったので、無職のあと自営業、MySQL AB 日本支社に参加→サンマイクロシステムズ,Oracleによる統合により現職。
  • 7.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 同級生と昔作った代表的なゲーム 7
  • 8.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 8
  • 9.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | OSS RDBMS御三家の紹介 • 日本ではPostgreSQL, MySQLが有名ですが、ロシア・ヨーロッパ・南米では Firebirdも有名です。 • P M F でオープンソースRDBMS御三家と呼びましょう。(と私が提唱してまし た  • 詳しく話しているとそれだけで一時間かかるので「オープンソースDBの成 熟度を計る」で検索してみてください。
  • 10.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | オープンソース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
  • 11.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 都市伝説 • MySQL都市伝説 – バイナリカラムのバックアップがとれない。 – サブクエリがない。トランザクションがない – MyISAMがInnoDBよりはやい、機能が多い。 • PostgreSQL都市伝説 – Windows版がない。 – バキューム必要で動作時「世界が止まる」。 – MySQLより遅い • Firebird 都市伝説 – ブラウザ – なにそれおいしいの?
  • 12.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | イマドキ! の機能 • 都市伝説はすでに解消され、オープンソースRDBMSはイマドキ!の機能を 実装・提供しはじめる。 • イマドキ! の機能 – VLDB、NoSQL、GIS、便利なSQL、HA、組込、ツール、クラウド
  • 13.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | VLDB • VLDB(Very Large Data Base) – どのくらいがVery Largeなのかは時代による。 • パーティショニング機能 – 巨大な表をキーを元に水平分割する – PostgreSQL 8.0から – MySQL 5.1から • マテリアライズドビュー – ビューを実体化してパフォーマンスをあげる – PostgreSQL9.3から
  • 14.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 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
  • 15.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | GIS • GIS(Geographic Information System:地理情報システム) • PostgreSQL拡張のPostGISがデファクト。 – PostGIS リリース1.0.0RC1(2005)->1.5.0(2010) – 現在は2.2 が最新。2.3を開発中 • postgis-2.2.2.tar.gz pdf html (Release Notes) • postgis-2.1.8.tar.gz pdf html (Release Notes) • postgis-2.0.7.tar.gz pdf html (Release Notes) • postgis-1.5.8.tar.gz pdf html (Release Notes) • MySQLは4.xで初期実装したものの、その後長い間進展なし。 – MySQL 5.7で生まれ変わった(re-born) – 拡張ではなく本体組み込み
  • 16.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | MySQL 5.7 : 生まれ変わったGIS • GIS チーム専任の専門家を雇用 • 古いアルゴリズムと関連するコードの多くを破棄 – FOSS Boost.Geometry library (1.58)で置き換え • OGC 空間関数サポートを完了 – 標準化されたnamespace • ネイティブのGEOMETRYデータ型をInnoDBでサポート – SPATIAL INDEX サポートをInnoDB に追加(R-treeを利用) • Geohash と GeoJSON のサポートを追加 • ヘルパー関数の追加: ST_Distance_Sphere(), ST_MakeEnvelope(), ST_IsValid(), ST_Validate(), ST_Simplify, … 16
  • 17.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 便利なSQL • もともとMySQLでは便利な独自SQLが多々ある – 他のRDBMSやSQL標準にも影響 • PostgreSQLはもともと積極的にSQL標準をサポートしてきた。 – 最近は他のRDBMSの便利な機能も実装 • FirebirdもSQL標準には追随している
  • 18.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | SQL標準(SQL:1999より後) • SQL:2003, 2008, 2011, 2012 – SQL:2003 • XML関連機能 (SQL/XML) • ウインドウ関数 • シーケンスジェネレータ • 新しいカラム型: auto-generated values と identity-columns • MERGE ステートメント • SQL/MED, SQL/MM • TABLESAMPLE • Etc… 18
  • 19.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 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により開発。 19
  • 20.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | SQL:2003 SQL/MM • 全文検索(日本語) • PostgreSQL/MySQL(5.6まで)/Firebird – 本体にはなし。 • MySQL 5.7からInnoDBのFTS(Full Text Search) • Groonga – MySQLバインディング: Mroonga(むるーんが) – PostgreSQLバインディング: PGroonga(ぴーじーるんが) 20
  • 21.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | SQL: 2008 • MERGE と DIAGNOSTIC の拡張 • TRUNCATE TABLE ステートメント • CASEのカンマ区切りWHEN句 • INSTEAD OF データベーストリガー • partitioned JOINテーブル, • いろいろなXQuery regular expression/pattern-matching 機能のサポート • 導出カラム名の拡張 21
  • 22.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | SQL: 2011 • Temporal データベース • その他しみじみとした機能改善 – MERGE内でのDELETE – パイプラインDML – CALL文の拡張 – Limited fetch – Collection type拡張 – Non-enforcedテーブル制約 – Window関数の拡張、等 22
  • 23.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 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にて利用できます。 23
  • 24.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | SQL:2012/RPR • RPR: Row Pattern Recognition – 2008年に提出されたプロポーザルの規格化 • MATCH_RECOGNIZE句 • Oracle Database 12cのみ実装 • 詳細や利用例はこれから順に日本語になっていくと思います。 24
  • 25.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 近年SQL標準の最大の功績といえば •CASE式 と •ウインドウ関数 25
  • 26.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 最近のロードマップ 2010 2011 2012 2013 2014 2015~現在 PostgreSQL 9.0 9.1 9.2 9.3 9.4 9.5 MySQL 5.5 5.6 5.7 DMR 5.7 Firebird 2.5 3.0 Beta1 3.0 SQL標準 SQL:2011 SQL:2012/RP R (SQL:2016 策 定中?)
  • 27.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 27 安定版 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ロードマップ(2016まで) Firebird 1.0 2008年 Firebird 2.5 2010年 現在最新版 Firebird 2.1
  • 28.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 28 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)
  • 29.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 29 対照表と差分表をMERGE • 対象表 差分表 1 みやはら 2 きむら 3 かまたき id name id name 2 加藤 4 小笠原 1 みやはら 2 きむら 3 かまたき 2 加藤 4 小笠原
  • 30.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 30 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)を使ってください。
  • 31.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 31 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からサポート)もしくはトリガ で。。。
  • 32.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 32 レコードを差分追加する (重複は無視) • 対象表 差分表 1 みやはら 2 きむら 3 かまたき id name id name 2 加藤 4 小笠原 1 みやはら 2 きむら 3 かまたき 4 小笠原
  • 33.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 33 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)
  • 34.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 34 MySQLの場合 • INSERT IGNOREを使う。 • INSERT IGNORE shain(id, name) select id, name FROM m_shain; • 以前はINSERTのデフォルト動作がIGNOREだったが、最新のMySQLでは明 示的に指定する必要有り。
  • 35.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 35 PostgreSQLの場合 • これも9.5以降 • “DO アクション”でアクションにNOTHING • INSERT INTO shain(id, name) select id, name FROM m_shain ON CONFLICT ON CONSTRAINT 制約名 DO NOTHING;
  • 36.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 36 CTE(共通表式) • 共通表式は、ひとつのSQL文中に限り「何回でも」参照可能なローカルな 表のことです。例えば、以下のようなSQLがあるとします。 – SELECT ID, NAME FROM (副問い合わせ); • 共通表式で書き直すと以下のようになります。 WITH 副問い合わせ名 AS ( 副問い合わせ内容 ) SELECT ID, NAME FROM 副問い合わせ名
  • 37.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 37 共通表式の例 WITH T AS ( SELECT B.部署名, E.社員名, E.給与 FROM 部署 B, 社員 E WHERE B.ID = E.ID ) SELECT * FROM T WHERE T.給与 > 200000
  • 38.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 38 再帰クエリ • 共通表形式を使う一番の利点は、これを用いて再帰的なSQL文を実行で きること。 • 次ページのような社員表があるとすると、各社員はユニークな社員番号を 持ち、mgridに直属の上司の社員番号が格納されている。社長‘みやはら’ は上司がいないため、mgridはNULLとなる。 • このような形式は隣接リスト(Adjacency List)モデルといい階層構造をRDB で利用するのによく使われます。
  • 39.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 39 再帰クエリ 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);
  • 40.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 40 階層構造を隣接リストで表現 1 みやはら 2 きむら 3 かまたき 4 加藤 5 林 6 三浦
  • 41.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 41 再帰クエリ • 通常のSQL文では、直属の部下を求めるのは簡単ですが、直接、間接(部 下の部下)を一度に求めるのは困難でした。これを再帰的なSQL文で検索 できます。再帰的なSQL文は以下のように記述できます。 WITH RECURSIVE 共通表名 AS ( 初期集合を求めるSELECT UNION ALL 再帰集合を求めるSELECT ) SELECT * FROM 共通表名
  • 42.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 42 再帰クエリ • 例) きむらの直接・間接の部下を求める。 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 ==================== きむら 加藤 林 三浦
  • 43.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 43 再帰クエリ • このような階層的なデータを扱うSQL拡張は、各商用データベースでは必 要に応じて行われてきました。 • 例えば、Oracleの場合、CONNECT BYという独自拡張で、上記と同様の内 容を以下のSQL文で得ることができます。 – SELECT name FROM shain START WITH name = 'きむら' CONNECT BY PRIOR empid = mgrid;
  • 44.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | CTE・再帰クエリ(PostgreSQL) • 8.4でサポート • 9.1で拡張。WITH (...) の中や末尾のクエリにて INSERT/UPDATE/DELETE が できるように。 – MERGE 文はPostgreSQLは未サポートですが、UPDATE できなかったキーを持つ行の み後から INSERT を行うと、他DBの MERGE や REPLACE 文と同等の機能をCTEでも実 現できます。 44
  • 45.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | CTE・再帰クエリ(Firebird/MySQL) • Firebirdは2.1からCTE・再帰クエリをサポート • MySQL – CTEやCTEを使った再帰クエリの機能はない。 – 次に紹介するウインドウ関数的なものもない。 45
  • 46.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 46 順位の簡単な求め方 • SQLパズル的なものはいろいろあれど。 • ウインドウ関数 – RANK() – DENSE_RANK() • オープンソースRDBMSではPostgreSQL以外(8.4以降で対応)まだ対応が遅 れ気味「だった」 – Firebirdは3.0で対応 ! – MariaDB(MySQLからのフォーク)は、次期版10.2で対応(現在アルファ版)
  • 47.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | HA(High Availability) • レプリケーション – MySQLの代名詞。バージョン3.xよりサポート • 5.5で準同期。5.6でGTID対応。 – PostgreSQLは外部ツール(pg-pool, slony)で従来対応していたが、バージョン9.0から 本体にレプリケーションの機能が実装された(ストリーミング・レプリケーション) – Firebirdは別途市販されているIB-Replicatorで対応。 – 参照の負荷分散や、マスターがダウンしたときのスレーブ昇格など。
  • 48.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | MySQLのレプリケーション • MySQL 3.xの頃から標準搭載 • ユーザの自由度が高く柔軟な構成が可能 • 基本非同期、文ベースのレプリケーションだったが、行ベースや準同期の 機能がつき、GTIDトランザクション、クラッシュセーフのレプリケーション、ス レーブでのマルチスレッドでの実行、遅延レプリケーション、マルチマスタ など、想像力の限り(?) の構成が可能。。。。
  • 49.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | レプリケーションとは? • レプリケーションは一つのMySQLデータベースサーバ(マスター)から一つ 以上のMySQLデータベースサーバにデータを複製(レプリケート)します。 Master Slave binlog relay log
  • 50.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | バイナリログ • マスターで複数の接続で並列で行われた更新をcommit順にシリアルに 並べています。 Master Slave binlog relay log time ↑ SQLスレッドでシリアルに実行 commit commit commit rollback
  • 51.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | タイプとフォーマット • タイプ: – 非同期 – マスターから更新を受け取るために、スレーブはずっと接続しておく必要が ない。 – 準同期 – マスターからスレーブのうち最低一つがコミットをリレーログに書き込んだ ことを確認する。 – (完全)同期 –全てのスレーブがコミットをデータベースにまで書込んだことを確認す る->MySQLにはない。 • フォーマット: – 文ベース – SQL文をマスターからスレーブに伝搬する – 行ベース – 各行の変更をマスターからスレーブに伝搬 – Mixed – 文ベースと行ベースの混合
  • 52.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | MySQLレプリケーションの短所? • 真の高可用性(High Availability)ではない – システムダウンの際データが ロストする  一つ以上のスレーブのフェイルオーバー/フェイルバックが複雑  リカバリしたマスターはバイナリログ(binlog)に記録されなかった変更が 欠損する  スレーブはマスターからのタイムラグがある
  • 53.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 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)
  • 54.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | レプリケーションの利用法 • 高可用性(High Availability) (フェイルオーバー) • スケーラビリティ – スケールアウト • データセキュリティ/バックアップ • 分析 • 長距離間のデータ配布 • MySQLのより新しいバージョンをスレーブとして追加して新バージョンの既 存データでの動作確認
  • 55.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | レプリケーションアーキテクチャの基本 Master Slave binlog relay log Clients I/O Thread SQL Thread 1 2 dump thread 3 4 5
  • 56.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 構成例: マスターと三つのスレーブ Master App/Web Server SlavesClients Writes Reads
  • 57.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | レプリケーションのトポロジ Single Multiple Chain Circular Multi - CircularMulti - Master Multi-MasterやCircular構成は運用や障害の対処が難しい 事に注意が必要
  • 58.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | HA(Cluster) • クラッシュセーフであれば市販のクラスタソフトウエアで対応できる – 共有ディスクでActive/Standby – DRBDでActive/Standby • MySQLではストレージエンジンとしてNDBを利用し、NDB用に拡張した MySQL本体(mysqld)を含めてMySQL Clusterとして提供 • PostgreSQLではPostgre-XC, Postgre-XL, Postgre-XC2などの開発が続く。。。 • Firebirdは….聞かないでください。。。。
  • 59.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | MySQL Cluster: Overview • 自動シャーディング、マルチマスター • ACID 準拠のトランザクション, OLTP + Real-Time Analytics 読込み/書込み処理 に対する高い拡張性 • シェアードナッシング、単一障害点無し • 自動修復 + オンラインオペレーション99.999% の高可用性 • オープンソース + 商用版 • コモディディハードウェア + 充実した管理ツール、監視ツール低い TCO • Key/Value + SQL の柔軟性 • SQL + Memcached + JavaScript + Java + JPA + HTTP/REST & C++SQL + NoSQL • インメモリデータベース + ディスクデータ • 非常に低いレイテンシ、短いアクセス時間リアルタイム
  • 60.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 60 OSSDBの二つのグループ 組み込みから ミドルレンジまでの機能強化 Firebird エンタープライズ向けの 機能強化 MySQL, PostgreSQL 商用データベースエンタープライズ 規 模 大 小 ミドルレンジは用途により どちらのグループでもOK
  • 61.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 組み込み • FirebirdとMySQLは組み込み用のEmbedded libraryが提供されている • FirebirdはDBが単一ファイル、ライセンスも緩やかなので組み込みやすい。 – LibreOffice Baseでは4.2からFirebirdのEmbedded版が使えるようになり、4.3からは 単純にBaseを起動するとデータベースウィザードが起動し指定できるように! – LimbreOffice 4.3からFirebirdを選択することができましたが、昨年末時点の最新版 5.0.x系列(2015-12-25時点では5.0.4)では残念ながらまた「実験的な機能」になってし まったようです。起動後すぐには選択できませんが、起動後以下の設定をすると次 回から選択利用できるようになります。 オプション - LibreOffice - 詳細 実験的(不安定)なオプション 実験的な機能を有効にする(B) 61
  • 62.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | ツール • Firebird – 市販のGUIツール。IBExpert , Database Workbench • MySQL – MySQL Utilities, MySQL Fabric, MySQL Workbench – MySQL商用版にのみ含まれるものもあり – Percona Tools for MySQL, MHA – Visual StudioとTools, Connector/Netでストアドプロシジャのデバッグが可能 • PostgreSQL – Contribに含まれるツール。PotgreSQL Toolkit – PL/pgSQLデバッガー(Enterprise DB)
  • 63.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | セキュリティ • 権限の強化・細分化 – PostgreSQLのSE-PostgreSQL(contribのsepgsqlモジュール)や本体の機能強化 • 監査(Audit) – Firebird 2.5からのAudit log – MySQL商用版のAudit plugin(MySQL5.6以降), McAfee MySQL Audit Plugin(MySQL 5.1以降) • 暗号化 – 基本暗号化・複合化の関数 – PostgreSQL9.3: 透過的暗号化(TDE)モジュール(by NEC) – MySQL 5.7.12: InnoDBテーブルスペース暗号化
  • 64.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | クラウド • MySQLやPostgreSQLはよく使われている – 素のバージョンが使われていたが。。。。 • クラウドのメリットをいかすための、独自の拡張が行われている • MySQL互換のRDS for Aurora – 高可用性と耐久性、スケーラビリティ – このセッションのあとAWSの方から直々に • PostgreSQL互換のAmazon Redshift – ペタバイト級のデータを扱えるデータウエアハウス
  • 65.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | OSS RDBMS御三家バージョン別機能 • Firebird : 3.0 • MySQL: 5.7 • PostgreSQL: 9.4/9.5
  • 66.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | Firebird 3.0の新機能 • 統一バイナリ(CS, SS, SC) • SS(SuperServer)での真のSMPサポート • オブジェクト指向C++ APIの提供 • 新しいデータ型(BOOLEAN, IDENTITY) • SQLパッケージ(一連のSPとファンクションをまとめたもの)のサポート • DDLトリガー • Window関数のサポート 66
  • 67.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | MySQL 5.7新機能 • InnoDBパフォーマンス! – 本体のパフォーマンスアップ – 一時テーブルのInnoDB化 • 運用効率化 – オンラインでのデータベースバッファサイズ変更 – オンラインDDLの改善 • FTS (Full Text Search) • GIS (Boostライブラリ) • レプリケーションの柔軟な運用 67
  • 68.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | PostgreSQL 9.4 • マテリアライズドビューの改善 • Logical Decoding • Background Worker • JSONB(バイナリ型JSON)のサポート • postgresql.confへのSQLアクセス • GIN Indexesのコンパクト化、高速化 • WALのパフォーマンス改善 • Streaming Replicationへのdelayオプション実装 68
  • 69.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | PostgreSQL 9.5 • IMPORT FOREIGN SCHEMA構文 • 行レベルのセキュリティポリシー • BRINインデックス • 外部テーブルの継承 • GROUPING SETS, CUBE と ROLLUP • JSONB更新用のオペレータと機能追加 • INSERT ... ON CONFLICT DO NOTHING/UPDATE (いわゆる"UPSERT") • pg_rewind 69
  • 70.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | Thanks ! • ご静聴ありがとうございました。 • OSS RDBMSは適材適所 – NoSQLとRDBMSも適材適所  • NoSQL ! – Redis – Neo4J • いろいろ使ってみてください!
  • 71.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. | 宣伝 • おうちで学べるデータベースのきほん – DBの初心者はこちらをどうぞ。 – 増刷出来(パチパチ) – アマゾンでポチるか、じゃんけんに勝つ – ハッシュタグは #ouchidb 71
  • 72.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. |
  • 73.
    Copyright © 2015,Oracle and/or its affiliates. All rights reserved. | 73
  • 74.
    Copyright © 2015Oracle and/or its affiliates. All rights reserved. |