Contenu connexe Similaire à Enter the-dolphine Similaire à Enter the-dolphine (20) Plus de Mikiya Okuno (20) Enter the-dolphine1. Enter The Dolphin
〜今すぐはじめたい人のための MySQL 超入門〜
奥野 幹也
@nippondanji
mikiya (dot) okuno (at) gmail (dot) com
2. 免責事項
●
本プレゼンテーションにおいて示されている見解は、
私自身の見解であって、オラクル・コーポレーション
の見解を必ずしも反映したものではありません。ご了
承ください。
3. 自己紹介
●
今日は個人として来ています。
– http://nippondanji.blogspot.com/
– Twitter: @nippondanji
●
現職は MySQL サポートエンジニア。
– 2000 年にサン・マイクロシステムズ入社
– 2007 年に MySQL KK へ転職
– 気付くとまたサン・マイクロシステムズに・・・
– 現在は日本オラクルに在席。
●
日々のしごと
– MySQL トラブルシューティング全般
– Q&A 回答
など
5. MySQL とは
●
オープンソースのリレーショナル・データベース・マ
ネージメント・システム
●
MySQL AB => Sun Microsystems => Oracle に
よって開発。
●
Web 開発においては圧倒的なシェア
●
各種言語をサポート。
– PHP/Perl/Java/Ruby/C/C++/ODBC...
●
使い易く、安定して、高速に動作するのがウリ
http://www-jp.mysql.com/
http://dev.mysql.com/
7. ライセンス
●
GPLv2
– Community 版
– サブスクリプションで利用可能な Enterprise 版
●
コマーシャルライセンス
– OEM ライセンス
– サブスクリプションで利用可能な Enterprise 版
サブスクリプションでは
ライセンスを選択可能!
8. GPL - GNU General Public License
●
リチャード・ストールマン氏により考案されたソフト
ウェアライセンス
– 1989 年〜
– 世界で最も用いられているオープンソースライセンス
– フリー(自由な)ソフトウェアを実現するために考え
られた。
●
現在の著作権法の上に立脚
●
Copyleft <===> Copyright
– ユーザーに完全な自由を認める。
– 再配布物(派生物や 2 次利用した作品)のライセンス
を同じものにすることを要求。
9. GPL の適用範囲
●
ライセンスを GPL にする必要がある場合
– GPL のソフトウェアを改造してまたはそのまま再配布
– GPL のソフトウェアを利用したソフトウェアを再配布
●
GPL のライブラリをリンク
●
GPL のソースコードを拝借
●
プロセス間通信で GPL のプログラムと協調動作。(グ
レーゾーン中のグレーゾーン!)
●
ライセンスを GPL にする必要がない場合
– ソフトウェアを頒布しない場合。
– ネットワーク経由で GPL のプログラムと協調動作。
– 単独で動作するプロセスとしてバンドル
– GPL の OS 上で動作する
– GPL のシステムライブラリを利用する
10. MySQL の機能的特徴
●
ANSI SQL 標準に準拠(一部の文 ●
UNION
法を除く。)
●
ビュー
●
種々のプラットフォームをサポー
●
サブクエリ
ト( Windows 、 Linux 、 Mac 、
●
INFORMATION_SCHEMA
各種 UNIX 系 OS )
●
SSL による通信
●
ストレージエンジンによりデータ
●
Unicode をはじめとした各種文字
を格納するレイヤーを仮想化 コードのサポート
●
ACID 準拠のトランザクション
●
全文検索
●
XA トランザクション
●
タイムゾーンのサポート
●
非同期 Master/Slave 型レプリ
●
多種多様な開発言語のサポート
ケーション ( C 、 C+
+ 、 Java 、 Perl 、 PHP 、 Pytho
●
水平パーティショニング
n 、 Ruby など)
( Range 、 List 、 Hash 、 Key
)
●
ODBC による接続のサポート
●
ストアドプロシージャ、ストアド
ファンクション、トリガ
11. MySQL の構造的特徴
●
モノリシックカーネル
●
シングルプロセス・マルチスレッド
●
1 セッション= 1 スレッド
●
ストレージエンジン API によるデータストアの仮想化
●
プラグイン API
●
GNU Bison による Lexical Scanner
●
コストベースのオプティマイザ
●
全ての更新系クエリを保存するバイナリログ
●
2 種類のスレッドで実装された非同期型レプリケーション
●
移植性の高い関数群( MySQL システムライブラリ -
mysys )を使って実装
●
ソースコードは C/C++ 混在( 100 万行程度)
12. MySQL の仕組み
クライアント クライアント クライアント
Java PHP ODBC
コネクション コネクション コネクション
スレッド スレッド スレッド
SQL の解析と最
適化は共通
パーサー・オプティマイザ・アクセス管理 等
ストレージエンジン API データの格納や
MyISAM InnoDB MySQL アクセス方法は
Cluster ストレージエン
テーブル
table_name.MYI
スペース
ジンごとに違う
table_name.MYD NDB
ログファイル API
MySQL サーバ
データノード
データノード
データノード
データノード
13. 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β 版が登場
14. 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 のサポート
– 空間インデックス
– プリペアードステートメントのサポート
15. History Of MySQL - つづき 2
●
2005: バージョン 5.0 正式リリース
– ビュー
– ストアドプロシージャ&ファンクション
– トリガ
– カーソル
– INFORMATION_SCHEMA
– XA トランザクション
– ARCHIVE 、 FEDERATED ストレージエンジン
●
2005: バージョン 5.1α 版
●
2008: バージョン 5.1 正式リリース
– パーティショニング
– 行ベースレプリケーション
– XML 関数
– イベントスケジューラー
16. History Of MySQL - つづき 2
●
2005: バージョン 5.0 正式リリース
– ビュー
– ストアドプロシージャ&ファンクション
– トリガ
– カーソル
– INFORMATION_SCHEMA
– XA トランザクション
– ARCHIVE 、 FEDERATED ストレージエンジン
●
2005: バージョン 5.1α 版
●
2008: バージョン 5.1 正式リリース
– パーティショニング
– 行ベースレプリケーション
– XML 関数
– イベントスケジューラー
17. 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
18. 免責事項 - その 2
●
現時点( 2010 年 7 月)の段階では、 MySQL 5.5 は
マイルストーンリリース( β 版)です。機能や実装
については、予告無く変更される場合がありますので
ご注意ください。
20. インストールは 15 分 !!
●
3 ステップ
– ダウンロード
●
http://dev.mysql.com/downloads
– パッケージのインストール /unzip
– 起動!!
●
慣れれば 5 分でインストール可能
●
Windows 版はインストールウィザードあり。
●
GUI ツール : MySQL Workbench
– データモデリング( EER 図)
– サーバー管理
– データ操作
23. MySQL レプリケーションの特徴
●
マスター/スレーブ型
– 1:N 、多段型、サークル型、マルチマスターなどの多彩な
トポロジ
●
マスターでは更新を断続的に記録
– バイナリログ
– 更新に用いた SQL 文そのものを記録するタイプのもの
と、行データを記録するタイプのものアリ。
●
スレーブの 2 つのスレッド
– I/O スレッド : マスターからバイナリログの差分を受信。
リレーログへ記録。
– SQL スレッド : リレーログの内容をテーブルへ反映
24. スケールアウト戦略
更新処理
アプリケーション
マスター
スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ
参照処理
25. レプリケーション進化の軌跡
●
バージョン 3.23
– シングルスレッド
– ステートメントベース
●
バージョン 4.0
– バイナリログの受信と適用が別スレッドに
●
遅延の解消!
●
バージョン 5.1
– 行ベースレプリケーション
– MySQL Cluster レプリケーション
●
バージョン 5.5
– Semi-Synchronous!!
29. MySQL の仕組み(再掲)
クライアント クライアント クライアント
Java PHP ODBC
コネクション コネクション コネクション
スレッド スレッド スレッド
SQL の解析と最
適化は共通
パーサー・オプティマイザ・アクセス管理 等
ストレージエンジン API データの格納や
MyISAM InnoDB MySQL アクセス方法は
Cluster ストレージエン
テーブル
table_name.MYI
スペース
ジンごとに違う
table_name.MYD NDB
ログファイル API
MySQL サーバ
データノード
データノード
データノード
データノード
30. ストレージエンジンとは。
●
データを格納するレイヤーを仮想化する API
– テーブルの作成
●
メタデータ
●
インデックス
– レコードの挿入、検索、削除、更新
– トランザクション管理
– クラッシュリカバリ
●
上位のレイヤーで処理するもの
– SQL の構文解析
– 実行計画
– JOIN
– 集計処理
– クライアントとの通信
– レプリケーション
31. MySQL におけるトランザクションの実装
●
トランザクションの管理はストレージエンジンが行う
– 対応している分離レベルはストレージエンジン次第
●
トランザクション対応のストレージエンジン
– InnoDB
– MySQL Cluster
– IBMDB2I
– SPIDER
– PBXT
33. InnoDB の特徴
●
トランザクション対応!
– ACID 準拠
– MVCC と行レベルロックによる高い並列性
– デッドロック自動検出
– 更新ログによるクラッシュリカバリ
– セーブポイント
– グループコミット
– XA トランザクション
●
外部キー制約
●
クラスタインデックス
●
最大容量 64TB
●
データ圧縮
35. InnoDB の分離レベル
分離レベル 分離性 性能 ダーティ 反復不可能読 ファントム
リード み取り
READ- 低 低 O O O
UNCOMMITTED
READ- 高 X O O
COMMITTED
REPEATABLE- 高 X X X
READ
SERIALIZABLE 高 低 X X X
37. MyISAM の特徴
●
トランザクション非対応
●
テーブルレベルロック
– 参照は共有ロック、更新は排他ロック
– 更新性能は高くない
●
SELECT をブロックしない INSERT は可能
●
テーブルごとに別のファイルを作成
●
フルテキストインデックス
– 日本語を使う場合には Senna ストレージエンジンを
●
空間インデックス
●
内部的にテンポラリテーブルとして利用される。
38. テンポラリテーブル
●
JOIN+ ソート処理などで利用される。
– ソート条件が駆動表以外のカラムになっている場合。
●
サイズが小さいうちは MEMORY ストレージエンジン
を利用
●
サイズが大きくなると MyISAM へ自動的に変換
40. MySQL Cluster 概要
アプリケーション
SQL SQL SQL
ノード ノード ノード
管理
NDB API
ノード
データ データ 管理
ノード ノード ノード
データ データ
ノード ノード
41. MySQL Cluster の特徴
●
並列分散型リアルタイム RDBMS
– 複数のノードが連動
– シェアードナッシング型アーキテクチャ
– ハイアベイラビリティ
●
リアルタイムデータベース
– インメモリ型とディスク型のテーブル
– 短い応答時間
– 高いスループット性能
●
トランザクション対応
– 分離レベルは READ-COMMITTED のみ
●
NoSQL アクセス
– NDBAPI
44. IBMDB2 の特徴
●
サポートしているプラットフォームは System i のみ
– MySQL は PASE で動作
●
DB2 のテーブルへアクセス可能
●
トランザクション対応
●
既存のデータを使いつつ MySQL を使ってアプリを構
築したいユーザー向けか?
46. Built-in By Default!
●
CSV
– テーブルの実体が CSV ファイル
– CSV ファイルを使ったインポート / エクスポート
●
FEDERATED
– リモートの MySQL サーバ上へデータを格納
●
BLACKHOLE
– 全てのデータが消えてしまう。。。
●
MERGE
– 複数の MyISAM テーブルをまとめて一つの大きな
テーブルに。(パーティショニングより小回りが利
く?)
●
ARCHIVE
– 追記専用に最適化されたエンジン。
48. 社外製ストレージエンジン
●
SPIDER
– リモートの MySQL サーバーへデータを格納
– パーティションごとに異なるサーバーを指定
●
大規模負荷分散
●
SHARDING
●
PBXT
– 汎用型ストレージエンジン
– トランザクションや FK に対応
– 追記型アーキテクチャ
●
Senna/Tritonn
– 日本語全文検索エンジン Senna を MySQL で使える
ようにしたもの。
49. 社外製ストレージエンジン - つづき
●
Q4M
– ストレージエンジンとしてアクセス可能なメッセージ
キュー
●
KickFire
– SQL チップで処理を高速化
– DWH 向けアプアイアンス
●
RethinkDB
– SSD での利用を前提にデータベースを再設計
●
InifniDB
– DWH 向け
●
TokuDB
– フラクタルツリーインデックス
50. SPIDER 動作イメージ
APP1 APP2 APP3 APP4
n1 n2 n3 n4
SPIDER SPIDER SPIDER SPIDER
n5 n6 n7 n8
INNODB INNODB INNODB INNODB
51. MySQL Cluster 概要(再掲)
アプリケーション
SQL SQL SQL
ノード ノード ノード
管理
NDB API
ノード
データ データ 管理
ノード ノード ノード
データ データ
ノード ノード
53. 典型的な利用イメージ
アプリケーション
マスター
マスター HA
スタンバイ
バックアップ
スレーブ スレーブ
レポーティング
54. MySQL Enterprise サブスクリプション
●
サービスとツールの統合パッケージ
– MySQL Enterprise Server
●
Quarterly Service Pack
●
緊急 Hot fx
– MySQL のエキスパートによるサポートサービス
– MySQL Enterprise Monitor
– ナレッジベース
– テクニカルアラート
– 年間契約
– お問い合わせは Oracle Direct まで。
56. 多数の大規模 Web サイトが採用!
●
Yahoo! ●
Mixi
●
Wikipedia ●
GREE
●
Facebook ●
モバゲー
●
Twitter
はてな
YouTube
●
●
●
eBay ●
アメーバ
●
Booking.com ●
ライブドア
●
Digg ●
Mapion
●
del.icio.us ブラウザ三国志
LinkedIn
●
●
●
Flickr
●
Cocolog
●
Slashdot
●
Ficia
●
LiveJournal
●
Dwango
●
Obama 2008
Campaign
58. Q!!
&
ご静聴ありがとうございました。
A!!