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