58
Enter The Dolphin Enter The Dolphin 奥野 幹也 @nippondanji mikiya (dot) okuno (at) gmail (dot) com 〜今すぐはじめたい人のための MySQL 超入門〜

Enter the-dolphine

Embed Size (px)

Citation preview

Page 1: Enter the-dolphine

Enter The DolphinEnter The Dolphin

奥野 幹也@nippondanjimikiya (dot) okuno (at) gmail (dot) com

〜今すぐはじめたい人のためのMySQL超入門〜

Page 2: Enter the-dolphine

免責事項● 本プレゼンテーションにおいて示されている見解は、私自身の見解であって、オラクル・コーポレーションの見解を必ずしも反映したものではありません。ご了承ください。

Page 3: Enter the-dolphine

自己紹介● 今日は個人として来ています。

– http://nippondanji.blogspot.com/– Twitter: @nippondanji

● 現職はMySQLサポートエンジニア。– 2000年にサン・マイクロシステムズ入社– 2007年にMySQL KKへ転職– 気付くとまたサン・マイクロシステムズに・・・– 現在は日本オラクルに在席。

● 日々のしごと– MySQLトラブルシューティング全般– Q&A回答など

Page 4: Enter the-dolphine

MySQLとは?!

Page 5: Enter the-dolphine

MySQLとは● オープンソースのリレーショナル・データベース・マネージメント・システム

● MySQL AB => Sun Microsystems => Oracle によって開発。

● Web開発においては圧倒的なシェア● 各種言語をサポート。

– PHP/Perl/Java/Ruby/C/C++/ODBC...● 使い易く、安定して、高速に動作するのがウリ

http://www-jp.mysql.com/http://dev.mysql.com/

Page 6: Enter the-dolphine

難しい話はおいといて・・・

簡単高速安定

Page 7: Enter the-dolphine

ライセンス● GPLv2

– Community版– サブスクリプションで利用可能な Enterprise版

● コマーシャルライセンス– OEMライセンス– サブスクリプションで利用可能な Enterprise版

サブスクリプションではライセンスを選択可能!

Page 8: Enter the-dolphine

GPL - GNU General Public License● リチャード・ストールマン氏により考案されたソフトウェアライセンス

– 1989年〜– 世界で最も用いられているオープンソースライセンス– フリー(自由な)ソフトウェアを実現するために考えられた。

● 現在の著作権法の上に立脚● Copyleft <===> Copyright

– ユーザーに完全な自由を認める。– 再配布物(派生物や 2次利用した作品)のライセンスを同じものにすることを要求。

Page 9: Enter the-dolphine

GPLの適用範囲● ライセンスを GPLにする必要がある場合

– GPLのソフトウェアを改造してまたはそのまま再配布– GPLのソフトウェアを利用したソフトウェアを再配布

● GPLのライブラリをリンク● GPLのソースコードを拝借● プロセス間通信で GPLのプログラムと協調動作。(グレーゾーン中のグレーゾーン!)

● ライセンスを GPLにする必要がない場合– ソフトウェアを頒布しない場合。– ネットワーク経由で GPLのプログラムと協調動作。– 単独で動作するプロセスとしてバンドル– GPLの OS上で動作する– GPLのシステムライブラリを利用する

Page 10: Enter the-dolphine

MySQLの機能的特徴● ANSI SQL標準に準拠(一部の文法を除く。)

● 種々のプラットフォームをサポート(Windows、 Linux、Mac、各種 UNIX系 OS)

● ストレージエンジンによりデータを格納するレイヤーを仮想化

● ACID準拠のトランザクション● XAトランザクション● 非同期Master/Slave型レプリケーション

● 水平パーティショニング( Range、 List、 Hash、 Key)

● ストアドプロシージャ、ストアドファンクション、トリガ

● UNION● ビュー● サブクエリ● INFORMATION_SCHEMA● SSLによる通信● Unicodeをはじめとした各種文字コードのサポート

● 全文検索● タイムゾーンのサポート● 多種多様な開発言語のサポート( C、 C++、 Java、 Perl、 PHP、 Python、 Rubyなど)

● ODBCによる接続のサポート

Page 11: Enter the-dolphine

MySQLの構造的特徴● モノリシックカーネル● シングルプロセス・マルチスレッド● 1セッション= 1スレッド● ストレージエンジン APIによるデータストアの仮想化● プラグイン API● GNU Bisonによる Lexical Scanner● コストベースのオプティマイザ● 全ての更新系クエリを保存するバイナリログ● 2種類のスレッドで実装された非同期型レプリケーション● 移植性の高い関数群(MySQLシステムライブラリ -

mysys)を使って実装● ソースコードは C/C++ 混在( 100 万行程度)

Page 12: Enter the-dolphine

MySQLの仕組み

MySQLサーバ

ストレージエンジン API

コネクションスレッド

クライアントJava

MyISAM

table_name.MYItable_name.MYD

InnoDB MySQLCluster

パーサー・オプティマイザ・アクセス管理 等

テーブルスペース

ログファイル

コネクションスレッド

コネクションスレッド

NDBAPI

クライアントPHP

クライアントODBC

SQLの解析と最適化は共通

データノードデータノードデータノードデータノード

データの格納やアクセス方法はストレージエンジンごとに違う

Page 13: Enter the-dolphine

History Of MySQL● 1979: MySQLの原形となるレポーティングツールが BASICで書かれた

– 後に Cで書き直されることになる● 1985: Michael Wideniusが TCX DataKonsultという会社をおこす。

– データウェアハウスの会社● 1990年代 : SQLインターフェイスを望む声● 1995: 最初のバージョンとしてMySQL 1.0がリリース

– 一部のユーザーに向けた限定的なリリース– SQLのサブセットをサポート– Solaris 向け– オープンソースではなかった。

● 1996: バージョン 3.11– Linux 向け– オープンソースに!

● 2000: バージョン 3.23β版が登場

Page 14: Enter the-dolphine

History Of MySQL - つづき● 2001: バージョン 3.23 正式リリース

– Berkeley DBをバックエンドとして利用可能– レプリケーションを実装( 1スレッド)

● 1999〜 2000 頃 : MySQL AB 設立● 2001: 4.0α版リリース● 2003: バージョン 4.0 正式リリース

– InnoDBを採用– SSLによる通信のサポート– UNION– レプリケーションの改善( 2スレッド)

● 2003: バージョン 4.1α版、バージョン 5.0α版● 2004: バージョン 4.1 正式リリース

– サブクエリ– Unicodeのサポート– 空間インデックス– プリペアードステートメントのサポート

Page 15: Enter the-dolphine

History Of MySQL - つづき 2● 2005: バージョン 5.0 正式リリース

– ビュー– ストアドプロシージャ&ファンクション– トリガ– カーソル– INFORMATION_SCHEMA– XAトランザクション– ARCHIVE、 FEDERATEDストレージエンジン

● 2005: バージョン 5.1α版● 2008: バージョン 5.1 正式リリース

– パーティショニング– 行ベースレプリケーション– XML 関数– イベントスケジューラー

Page 16: Enter the-dolphine

History Of MySQL - つづき 2● 2005: バージョン 5.0 正式リリース

– ビュー– ストアドプロシージャ&ファンクション– トリガ– カーソル– INFORMATION_SCHEMA– XAトランザクション– ARCHIVE、 FEDERATEDストレージエンジン

● 2005: バージョン 5.1α版● 2008: バージョン 5.1 正式リリース

– パーティショニング– 行ベースレプリケーション– XML 関数– イベントスケジューラー

Page 17: Enter the-dolphine

History Of MySQL - つづき 3● 2009: リリースモデルの変更

– 開発版には成熟した機能から順に追加– 一定期間経過後にバージョン番号を変更

● 2009: バージョン 5.4開発版– DTraceサポート– 性能改善

● 2009: バージョン 5.5開発版– InnoDB 性能改善– Semi-Synchronous Replication– 4バイト UTF-8 対応– RANGE/LIST COLUMNSパーティショニング– PERFORMANCE_SCHEMA– XML機能の拡充( LOAD XML文など)– SIGNAL/RESIGNAL

Page 18: Enter the-dolphine

免責事項 - その 2● 現時点( 2010年 7 月)の段階では、MySQL 5.5はマイルストーンリリース(β版)です。機能や実装については、予告無く変更される場合がありますのでご注意ください。

Page 19: Enter the-dolphine

インストール。

Page 20: Enter the-dolphine

インストールは 15 分 !!● 3ステップ

– ダウンロード● http://dev.mysql.com/downloads

– パッケージのインストール /unzip– 起動!!

● 慣れれば 5 分でインストール可能● Windows版はインストールウィザードあり。● GUI ツール : MySQL Workbench

– データモデリング( EER 図)– サーバー管理– データ操作

Page 21: Enter the-dolphine

レプリケーション。

Page 22: Enter the-dolphine

レプリケーションの仕組み

Page 23: Enter the-dolphine

MySQLレプリケーションの特徴● マスター/スレーブ型

– 1:N、多段型、サークル型、マルチマスターなどの多彩なトポロジ

● マスターでは更新を断続的に記録– バイナリログ– 更新に用いた SQL文そのものを記録するタイプのものと、行データを記録するタイプのものアリ。

● スレーブの 2 つのスレッド– I/Oスレッド : マスターからバイナリログの差分を受信。リレーログへ記録。

– SQLスレッド : リレーログの内容をテーブルへ反映

Page 24: Enter the-dolphine

スケールアウト戦略

マスター

スレーブ スレーブ スレーブスレーブ

アプリケーション

更新処理

参照処理

スレーブ スレーブ

Page 25: Enter the-dolphine

レプリケーション進化の軌跡● バージョン 3.23

– シングルスレッド– ステートメントベース

● バージョン 4.0– バイナリログの受信と適用が別スレッドに

● 遅延の解消!● バージョン 5.1

– 行ベースレプリケーション– MySQL Clusterレプリケーション

● バージョン 5.5– Semi-Synchronous!!

Page 26: Enter the-dolphine

MySQL 5.1のレプリケーション

Page 27: Enter the-dolphine

Semi-Synchronousレプリケーション

Page 28: Enter the-dolphine

ストレージエンジン!

Page 29: Enter the-dolphine

MySQLの仕組み(再掲)

MySQLサーバ

ストレージエンジン API

コネクションスレッド

クライアントJava

MyISAM

table_name.MYItable_name.MYD

InnoDB MySQLCluster

パーサー・オプティマイザ・アクセス管理 等

テーブルスペース

ログファイル

コネクションスレッド

コネクションスレッド

NDBAPI

クライアントPHP

クライアントODBC

SQLの解析と最適化は共通

データノードデータノードデータノードデータノード

データの格納やアクセス方法はストレージエンジンごとに違う

Page 30: Enter the-dolphine

ストレージエンジンとは。● データを格納するレイヤーを仮想化する API

– テーブルの作成● メタデータ● インデックス

– レコードの挿入、検索、削除、更新– トランザクション管理– クラッシュリカバリ

● 上位のレイヤーで処理するもの– SQLの構文解析– 実行計画– JOIN– 集計処理– クライアントとの通信– レプリケーション

Page 31: Enter the-dolphine

MySQLにおけるトランザクションの実装● トランザクションの管理はストレージエンジンが行う

– 対応している分離レベルはストレージエンジン次第● トランザクション対応のストレージエンジン

– InnoDB– MySQL Cluster– IBMDB2I– SPIDER– PBXT

Page 32: Enter the-dolphine

InnoDB!!

Page 33: Enter the-dolphine

InnoDBの特徴● トランザクション対応!

– ACID準拠– MVCCと行レベルロックによる高い並列性– デッドロック自動検出– 更新ログによるクラッシュリカバリ– セーブポイント– グループコミット– XAトランザクション

● 外部キー制約● クラスタインデックス● 最大容量 64TB● データ圧縮

Page 34: Enter the-dolphine

InnoDBの動作イメージ

Page 35: Enter the-dolphine

InnoDBの分離レベル

分離レベル 分離性 性能 ダーティリード

反復不可能読み取り

ファントム

READ-UNCOMMITTED

低 低 O O O

READ-COMMITTED

高 X O O

REPEATABLE-READ

高 X X X

SERIALIZABLE 高 低 X X X

Page 36: Enter the-dolphine

MyISAM!!

Page 37: Enter the-dolphine

MyISAMの特徴● トランザクション非対応● テーブルレベルロック

– 参照は共有ロック、更新は排他ロック– 更新性能は高くない

● SELECTをブロックしない INSERTは可能● テーブルごとに別のファイルを作成● フルテキストインデックス

– 日本語を使う場合には Sennaストレージエンジンを● 空間インデックス● 内部的にテンポラリテーブルとして利用される。

Page 38: Enter the-dolphine

テンポラリテーブル● JOIN+ソート処理などで利用される。

– ソート条件が駆動表以外のカラムになっている場合。● サイズが小さいうちはMEMORYストレージエンジンを利用

● サイズが大きくなるとMyISAMへ自動的に変換

Page 39: Enter the-dolphine

MySQLCluster!!

Page 40: Enter the-dolphine

MySQL Cluster 概要

SQLノード

データノード

データノード

データノード

NDB API管理ノード

SQLノード

SQLノード

アプリケーション

データノード

管理ノード

Page 41: Enter the-dolphine

MySQL Clusterの特徴● 並列分散型リアルタイム RDBMS

– 複数のノードが連動– シェアードナッシング型アーキテクチャ– ハイアベイラビリティ

● リアルタイムデータベース– インメモリ型とディスク型のテーブル– 短い応答時間– 高いスループット性能

● トランザクション対応– 分離レベルは READ-COMMITTEDのみ

● NoSQLアクセス– NDBAPI

Page 42: Enter the-dolphine

IBMDB2I!!

Page 43: Enter the-dolphine

IBMDB2の概要

DB2

MySQL

アプリケーション

System i

Page 44: Enter the-dolphine

IBMDB2の特徴● サポートしているプラットフォームは System iのみ

– MySQLは PASEで動作● DB2のテーブルへアクセス可能● トランザクション対応● 既存のデータを使いつつ MySQLを使ってアプリを構

築したいユーザー向けか?

Page 45: Enter the-dolphine

その他の便利なストレージエンジン。

Page 46: Enter the-dolphine

Built-in By Default!● CSV

– テーブルの実体が CSVファイル– CSVファイルを使ったインポート /エクスポート

● FEDERATED– リモートのMySQLサーバ上へデータを格納

● BLACKHOLE– 全てのデータが消えてしまう。。。

● MERGE– 複数のMyISAMテーブルをまとめて一つの大きなテーブルに。(パーティショニングより小回りが利く?)

● ARCHIVE– 追記専用に最適化されたエンジン。

Page 47: Enter the-dolphine

CommunityDriven!!

Page 48: Enter the-dolphine

社外製ストレージエンジン● SPIDER

– リモートのMySQLサーバーへデータを格納– パーティションごとに異なるサーバーを指定

● 大規模負荷分散● SHARDING

● PBXT– 汎用型ストレージエンジン– トランザクションや FKに対応– 追記型アーキテクチャ

● Senna/Tritonn– 日本語全文検索エンジン SennaをMySQLで使えるようにしたもの。

Page 49: Enter the-dolphine

社外製ストレージエンジン - つづき● Q4M

– ストレージエンジンとしてアクセス可能なメッセージキュー

● KickFire– SQLチップで処理を高速化– DWH 向けアプアイアンス

● RethinkDB– SSDでの利用を前提にデータベースを再設計

● InifniDB– DWH 向け

● TokuDB– フラクタルツリーインデックス

Page 50: Enter the-dolphine

SPIDER動作イメージ

n1SPIDER

n2SPIDER

n3SPIDER

n4SPIDER

n5 n6 n7 n8

INNODB INNODB INNODB INNODB

APP1 APP2 APP3 APP4

Page 51: Enter the-dolphine

MySQL Cluster 概要(再掲)

SQLノード

データノード

データノード

データノード

NDB API管理ノード

SQLノード

SQLノード

アプリケーション

データノード

管理ノード

Page 52: Enter the-dolphine

業務システムでの利用!

Page 53: Enter the-dolphine

典型的な利用イメージ

マスター

スレーブ スレーブ

レポーティング

アプリケーション

マスタースタンバイ

HA

バックアップ

Page 54: Enter the-dolphine

MySQL Enterpriseサブスクリプション● サービスとツールの統合パッケージ

– MySQL Enterprise Server● Quarterly Service Pack● 緊急 Hot fx

– MySQLのエキスパートによるサポートサービス– MySQL Enterprise Monitor– ナレッジベース– テクニカルアラート– 年間契約– お問い合わせは Oracle Directまで。

Page 55: Enter the-dolphine

大規模サイト利用実績!!

Page 56: Enter the-dolphine

多数の大規模 Webサイトが採用!● Yahoo!● Wikipedia● Facebook● Twitter● YouTube● eBay● Booking.com● Digg● del.icio.us● LinkedIn● Flickr● Slashdot● LiveJournal● Obama 2008

Campaign

● Mixi● GREE● モバゲー● はてな● アメーバ● ライブドア● Mapion● ブラウザ三国志● Cocolog● Ficia● Dwango

Page 57: Enter the-dolphine

まとめ

簡単・高速・安定のMySQLなら

小規模から超大規模まで対応可能 !!

Page 58: Enter the-dolphine

Q!!&A!!ご静聴ありがとうございました。