Enter the-dolphine

  • 2,076 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,076
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 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 回答 など
  • 4. MySQL とは?!
  • 5. MySQL とは ● オープンソースのリレーショナル・データベース・マ ネージメント・システム ● MySQL AB => Sun Microsystems => Oracle に よって開発。 ● Web 開発においては圧倒的なシェア ● 各種言語をサポート。 – PHP/Perl/Java/Ruby/C/C++/ODBC... ● 使い易く、安定して、高速に動作するのがウリ http://www-jp.mysql.com/ http://dev.mysql.com/
  • 6. 難しい話はおいといて・・・ 簡単 高速 安定
  • 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 は マイルストーンリリース( β 版)です。機能や実装 については、予告無く変更される場合がありますので ご注意ください。
  • 19. インストール。
  • 20. インストールは 15 分 !! ● 3 ステップ – ダウンロード ● http://dev.mysql.com/downloads – パッケージのインストール /unzip – 起動!! ● 慣れれば 5 分でインストール可能 ● Windows 版はインストールウィザードあり。 ● GUI ツール : MySQL Workbench – データモデリング( EER 図) – サーバー管理 – データ操作
  • 21. レプリケーション。
  • 22. レプリケーションの仕組み
  • 23. MySQL レプリケーションの特徴 ● マスター/スレーブ型 – 1:N 、多段型、サークル型、マルチマスターなどの多彩な トポロジ ● マスターでは更新を断続的に記録 – バイナリログ – 更新に用いた SQL 文そのものを記録するタイプのもの と、行データを記録するタイプのものアリ。 ● スレーブの 2 つのスレッド – I/O スレッド : マスターからバイナリログの差分を受信。 リレーログへ記録。 – SQL スレッド : リレーログの内容をテーブルへ反映
  • 24. スケールアウト戦略 更新処理 アプリケーション マスター スレーブ スレーブ スレーブ スレーブ スレーブ スレーブ 参照処理
  • 25. レプリケーション進化の軌跡 ● バージョン 3.23 – シングルスレッド – ステートメントベース ● バージョン 4.0 – バイナリログの受信と適用が別スレッドに ● 遅延の解消! ● バージョン 5.1 – 行ベースレプリケーション – MySQL Cluster レプリケーション ● バージョン 5.5 – Semi-Synchronous!!
  • 26. MySQL 5.1 のレプリケーション
  • 27. Semi-Synchronous レプリケーション
  • 28. ストレージ エンジン!
  • 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
  • 32. InnoDB!!
  • 33. InnoDB の特徴 ● トランザクション対応! – ACID 準拠 – MVCC と行レベルロックによる高い並列性 – デッドロック自動検出 – 更新ログによるクラッシュリカバリ – セーブポイント – グループコミット – XA トランザクション ● 外部キー制約 ● クラスタインデックス ● 最大容量 64TB ● データ圧縮
  • 34. InnoDB の動作イメージ
  • 35. InnoDB の分離レベル 分離レベル 分離性 性能 ダーティ 反復不可能読 ファントム リード み取り READ- 低 低 O O O UNCOMMITTED READ- 高 X O O COMMITTED REPEATABLE- 高 X X X READ SERIALIZABLE 高 低 X X X
  • 36. MyISAM!!
  • 37. MyISAM の特徴 ● トランザクション非対応 ● テーブルレベルロック – 参照は共有ロック、更新は排他ロック – 更新性能は高くない ● SELECT をブロックしない INSERT は可能 ● テーブルごとに別のファイルを作成 ● フルテキストインデックス – 日本語を使う場合には Senna ストレージエンジンを ● 空間インデックス ● 内部的にテンポラリテーブルとして利用される。
  • 38. テンポラリテーブル ● JOIN+ ソート処理などで利用される。 – ソート条件が駆動表以外のカラムになっている場合。 ● サイズが小さいうちは MEMORY ストレージエンジン を利用 ● サイズが大きくなると MyISAM へ自動的に変換
  • 39. MySQL Cluster!!
  • 40. MySQL Cluster 概要 アプリケーション SQL SQL SQL ノード ノード ノード 管理 NDB API ノード データ データ 管理 ノード ノード ノード データ データ ノード ノード
  • 41. MySQL Cluster の特徴 ● 並列分散型リアルタイム RDBMS – 複数のノードが連動 – シェアードナッシング型アーキテクチャ – ハイアベイラビリティ ● リアルタイムデータベース – インメモリ型とディスク型のテーブル – 短い応答時間 – 高いスループット性能 ● トランザクション対応 – 分離レベルは READ-COMMITTED のみ ● NoSQL アクセス – NDBAPI
  • 42. IBMDB2I!!
  • 43. IBMDB2 の概要 アプリケーション MySQL DB2 System i
  • 44. IBMDB2 の特徴 ● サポートしているプラットフォームは System i のみ – MySQL は PASE で動作 ● DB2 のテーブルへアクセス可能 ● トランザクション対応 ● 既存のデータを使いつつ MySQL を使ってアプリを構 築したいユーザー向けか?
  • 45. その他の便利な ストレージエンジン。
  • 46. Built-in By Default! ● CSV – テーブルの実体が CSV ファイル – CSV ファイルを使ったインポート / エクスポート ● FEDERATED – リモートの MySQL サーバ上へデータを格納 ● BLACKHOLE – 全てのデータが消えてしまう。。。 ● MERGE – 複数の MyISAM テーブルをまとめて一つの大きな テーブルに。(パーティショニングより小回りが利 く?) ● ARCHIVE – 追記専用に最適化されたエンジン。
  • 47. Community Driven!!
  • 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 ノード データ データ 管理 ノード ノード ノード データ データ ノード ノード
  • 52. 業務システム での利用!
  • 53. 典型的な利用イメージ アプリケーション マスター マスター HA スタンバイ バックアップ スレーブ スレーブ レポーティング
  • 54. MySQL Enterprise サブスクリプション ● サービスとツールの統合パッケージ – MySQL Enterprise Server ● Quarterly Service Pack ● 緊急 Hot fx – MySQL のエキスパートによるサポートサービス – MySQL Enterprise Monitor – ナレッジベース – テクニカルアラート – 年間契約 – お問い合わせは Oracle Direct まで。
  • 55. 大規模サイト 利用実績!!
  • 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
  • 57. まとめ 簡単・高速・安定の MySQL なら 小規模から超大規模まで 対応可能 !!
  • 58. Q!! & ご静聴ありがとうございました。 A!!