0
Enter The Dolphin
                     〜今すぐはじめたい人のための MySQL 超入門〜




 奥野 幹也
 @nippondanji
 mikiya (dot) okuno (at) gmail (...
免責事項
●
    本プレゼンテーションにおいて示されている見解は、
    私自身の見解であって、オラクル・コーポレーション
    の見解を必ずしも反映したものではありません。ご了
    承ください。
自己紹介
●
    今日は個人として来ています。
    –   http://nippondanji.blogspot.com/
    –   Twitter: @nippondanji
●
    現職は MySQL サポートエンジニア...
MySQL とは?!
MySQL とは
●
    オープンソースのリレーショナル・データベース・マ
    ネージメント・システム
●
    MySQL AB => Sun Microsystems => Oracle に
    よって開発。
●
    We...
難しい話はおいといて・・・



     簡単
     高速
     安定
ライセンス
●
    GPLv2
     –   Community 版
     –   サブスクリプションで利用可能な Enterprise 版
●
    コマーシャルライセンス
     –   OEM ライセンス
     –  ...
GPL - GNU General Public License
●
    リチャード・ストールマン氏により考案されたソフト
    ウェアライセンス
     –   1989 年〜
     –   世界で最も用いられているオープンソース...
GPL の適用範囲
●
    ライセンスを GPL にする必要がある場合
    –   GPL のソフトウェアを改造してまたはそのまま再配布
    –   GPL のソフトウェアを利用したソフトウェアを再配布
          ●
  ...
MySQL の機能的特徴
●
    ANSI SQL 標準に準拠(一部の文           ●
                                      UNION
    法を除く。)
                ...
MySQL の構造的特徴
●
    モノリシックカーネル
●
    シングルプロセス・マルチスレッド
●
    1 セッション= 1 スレッド
●
    ストレージエンジン API によるデータストアの仮想化
●
    プラグイン A...
MySQL の仕組み
クライアント             クライアント        クライアント
  Java               PHP           ODBC




     コネクション       コネクション   ...
History Of MySQL
●
    1979: MySQL の原形となるレポーティングツールが BASIC で書かれた
      – 後に C で書き直されることになる
●
    1985: Michael Widenius が ...
History Of MySQL - つづき
●
    2001: バージョン 3.23 正式リリース
      – Berkeley DB をバックエンドとして利用可能
      – レプリケーションを実装( 1 スレッド)
●
   ...
History Of MySQL - つづき 2
●
    2005: バージョン 5.0 正式リリース
      – ビュー
      – ストアドプロシージャ&ファンクション
      – トリガ
      – カーソル
    ...
History Of MySQL - つづき 2
●
    2005: バージョン 5.0 正式リリース
      – ビュー
      – ストアドプロシージャ&ファンクション
      – トリガ
      – カーソル
    ...
History Of MySQL - つづき 3
●
    2009: リリースモデルの変更
      – 開発版には成熟した機能から順に追加
      – 一定期間経過後にバージョン番号を変更
●
    2009: バージョン 5.4...
免責事項 - その 2
●
    現時点( 2010 年 7 月)の段階では、 MySQL 5.5 は
    マイルストーンリリース( β 版)です。機能や実装
    については、予告無く変更される場合がありますので
    ご注意くださ...
インストール。
インストールは 15 分 !!
●
    3 ステップ
     –   ダウンロード
           ●
               http://dev.mysql.com/downloads
     –   パッケージのインス...
レプリケーション。
レプリケーションの仕組み
MySQL レプリケーションの特徴
●
    マスター/スレーブ型
     –   1:N 、多段型、サークル型、マルチマスターなどの多彩な
           トポロジ
●
    マスターでは更新を断続的に記録
     –   バイ...
スケールアウト戦略
           更新処理




アプリケーション



                            マスター




            スレーブ   スレーブ   スレーブ   スレーブ   スレー...
レプリケーション進化の軌跡
●
    バージョン 3.23
     –   シングルスレッド
     –   ステートメントベース
●
    バージョン 4.0
     –   バイナリログの受信と適用が別スレッドに
        ...
MySQL 5.1 のレプリケーション
Semi-Synchronous
 レプリケーション
ストレージ
エンジン!
MySQL の仕組み(再掲)
クライアント             クライアント        クライアント
  Java               PHP           ODBC




     コネクション       コネクショ...
ストレージエンジンとは。
●
    データを格納するレイヤーを仮想化する API
     –   テーブルの作成
           ●
               メタデータ
           ●
               イ...
MySQL におけるトランザクションの実装
●
    トランザクションの管理はストレージエンジンが行う
     –   対応している分離レベルはストレージエンジン次第
●
    トランザクション対応のストレージエンジン
     –   ...
InnoDB!!
InnoDB の特徴
●
    トランザクション対応!
    –   ACID 準拠
    –   MVCC と行レベルロックによる高い並列性
    –   デッドロック自動検出
    –   更新ログによるクラッシュリカバリ
   ...
InnoDB の動作イメージ
InnoDB の分離レベル

分離レベル          分離性   性能   ダーティ   反復不可能読   ファントム
                          リード    み取り
READ-           低     ...
MyISAM!!
MyISAM の特徴
●
    トランザクション非対応
●
    テーブルレベルロック
    –   参照は共有ロック、更新は排他ロック
    –   更新性能は高くない
          ●
              SELECT...
テンポラリテーブル
●
    JOIN+ ソート処理などで利用される。
    –   ソート条件が駆動表以外のカラムになっている場合。
●
    サイズが小さいうちは MEMORY ストレージエンジン
    を利用
●
    サイズが...
MySQL
Cluster!!
MySQL Cluster 概要
        アプリケーション




 SQL      SQL      SQL
 ノード      ノード      ノード


                           管理
      ...
MySQL Cluster の特徴
●
    並列分散型リアルタイム RDBMS
     –   複数のノードが連動
     –   シェアードナッシング型アーキテクチャ
     –   ハイアベイラビリティ
●
    リアルタイムデ...
IBMDB2I!!
IBMDB2 の概要

   アプリケーション




MySQL

              DB2


              System i
IBMDB2 の特徴
●
    サポートしているプラットフォームは System i のみ
    –   MySQL は PASE で動作
●
    DB2 のテーブルへアクセス可能
●
    トランザクション対応
●
    既存のデ...
その他の便利な
ストレージエンジン。
Built-in By Default!
●
    CSV
     –   テーブルの実体が CSV ファイル
     –   CSV ファイルを使ったインポート / エクスポート
●
    FEDERATED
     –   リモー...
Community
 Driven!!
社外製ストレージエンジン
●
    SPIDER
     –   リモートの MySQL サーバーへデータを格納
     –   パーティションごとに異なるサーバーを指定
           ●
               大規模負荷...
社外製ストレージエンジン - つづき
●
    Q4M
     –   ストレージエンジンとしてアクセス可能なメッセージ
          キュー
●
    KickFire
     –   SQL チップで処理を高速化
     –...
SPIDER 動作イメージ

APP1       APP2     APP3     APP4

 n1         n2       n3       n4
SPIDER     SPIDER   SPIDER   SPIDER



...
MySQL Cluster 概要(再掲)
          アプリケーション




   SQL      SQL      SQL
   ノード      ノード      ノード


                          ...
業務システム
での利用!
典型的な利用イメージ

      アプリケーション




                       マスター
          マスター   HA
                      スタンバイ




           ...
MySQL Enterprise サブスクリプション
●
    サービスとツールの統合パッケージ
     –   MySQL Enterprise Server
            ●
                Quarterly...
大規模サイト
利用実績!!
多数の大規模 Web サイトが採用!
●
    Yahoo!        ●
                      Mixi
●
    Wikipedia     ●
                      GREE
●
   ...
まとめ



 簡単・高速・安定の
   MySQL なら
小規模から超大規模まで
   対応可能 !!
Q!!
           &
ご静聴ありがとうございました。
                  A!!
Upcoming SlideShare
Loading in...5
×

Enter the-dolphine

2,181

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,181
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Enter the-dolphine"

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

    Clipping is a handy way to collect important slides you want to go back to later.

×