• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Enter the-dolphine
 

Enter the-dolphine

on

  • 2,153 views

 

Statistics

Views

Total Views
2,153
Views on SlideShare
2,153
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Enter the-dolphine Enter the-dolphine Presentation Transcript

    • Enter The Dolphin 〜今すぐはじめたい人のための MySQL 超入門〜 奥野 幹也 @nippondanji mikiya (dot) okuno (at) gmail (dot) com
    • 免責事項 ● 本プレゼンテーションにおいて示されている見解は、 私自身の見解であって、オラクル・コーポレーション の見解を必ずしも反映したものではありません。ご了 承ください。
    • 自己紹介 ● 今日は個人として来ています。 – 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 標準に準拠(一部の文 ● 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 による接続のサポート ● ストアドプロシージャ、ストアド ファンクション、トリガ
    • MySQL の構造的特徴 ● モノリシックカーネル ● シングルプロセス・マルチスレッド ● 1 セッション= 1 スレッド ● ストレージエンジン API によるデータストアの仮想化 ● プラグイン API ● GNU Bison による Lexical Scanner ● コストベースのオプティマイザ ● 全ての更新系クエリを保存するバイナリログ ● 2 種類のスレッドで実装された非同期型レプリケーション ● 移植性の高い関数群( MySQL システムライブラリ - mysys )を使って実装 ● ソースコードは C/C++ 混在( 100 万行程度)
    • MySQL の仕組み クライアント クライアント クライアント Java PHP ODBC コネクション コネクション コネクション スレッド スレッド スレッド SQL の解析と最 適化は共通 パーサー・オプティマイザ・アクセス管理 等 ストレージエンジン API データの格納や MyISAM InnoDB MySQL アクセス方法は Cluster ストレージエン テーブル table_name.MYI スペース ジンごとに違う table_name.MYD NDB ログファイル API MySQL サーバ データノード データノード データノード データノード
    • 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 の仕組み(再掲) クライアント クライアント クライアント Java PHP ODBC コネクション コネクション コネクション スレッド スレッド スレッド SQL の解析と最 適化は共通 パーサー・オプティマイザ・アクセス管理 等 ストレージエンジン API データの格納や MyISAM InnoDB MySQL アクセス方法は Cluster ストレージエン テーブル table_name.MYI スペース ジンごとに違う table_name.MYD NDB ログファイル API MySQL サーバ データノード データノード データノード データノード
    • ストレージエンジンとは。 ● データを格納するレイヤーを仮想化する API – テーブルの作成 ● メタデータ ● インデックス – レコードの挿入、検索、削除、更新 – トランザクション管理 – クラッシュリカバリ ● 上位のレイヤーで処理するもの – SQL の構文解析 – 実行計画 – JOIN – 集計処理 – クライアントとの通信 – レプリケーション
    • MySQL におけるトランザクションの実装 ● トランザクションの管理はストレージエンジンが行う – 対応している分離レベルはストレージエンジン次第 ● トランザクション対応のストレージエンジン – InnoDB – MySQL Cluster – IBMDB2I – SPIDER – PBXT
    • InnoDB!!
    • InnoDB の特徴 ● トランザクション対応! – ACID 準拠 – MVCC と行レベルロックによる高い並列性 – デッドロック自動検出 – 更新ログによるクラッシュリカバリ – セーブポイント – グループコミット – XA トランザクション ● 外部キー制約 ● クラスタインデックス ● 最大容量 64TB ● データ圧縮
    • InnoDB の動作イメージ
    • InnoDB の分離レベル 分離レベル 分離性 性能 ダーティ 反復不可能読 ファントム リード み取り READ- 低 低 O O O UNCOMMITTED READ- 高 X O O COMMITTED REPEATABLE- 高 X X X READ SERIALIZABLE 高 低 X X X
    • MyISAM!!
    • MyISAM の特徴 ● トランザクション非対応 ● テーブルレベルロック – 参照は共有ロック、更新は排他ロック – 更新性能は高くない ● SELECT をブロックしない INSERT は可能 ● テーブルごとに別のファイルを作成 ● フルテキストインデックス – 日本語を使う場合には Senna ストレージエンジンを ● 空間インデックス ● 内部的にテンポラリテーブルとして利用される。
    • テンポラリテーブル ● JOIN+ ソート処理などで利用される。 – ソート条件が駆動表以外のカラムになっている場合。 ● サイズが小さいうちは MEMORY ストレージエンジン を利用 ● サイズが大きくなると MyISAM へ自動的に変換
    • MySQL Cluster!!
    • MySQL Cluster 概要 アプリケーション SQL SQL SQL ノード ノード ノード 管理 NDB API ノード データ データ 管理 ノード ノード ノード データ データ ノード ノード
    • MySQL Cluster の特徴 ● 並列分散型リアルタイム RDBMS – 複数のノードが連動 – シェアードナッシング型アーキテクチャ – ハイアベイラビリティ ● リアルタイムデータベース – インメモリ型とディスク型のテーブル – 短い応答時間 – 高いスループット性能 ● トランザクション対応 – 分離レベルは READ-COMMITTED のみ ● NoSQL アクセス – NDBAPI
    • IBMDB2I!!
    • IBMDB2 の概要 アプリケーション MySQL DB2 System i
    • IBMDB2 の特徴 ● サポートしているプラットフォームは System i のみ – MySQL は PASE で動作 ● DB2 のテーブルへアクセス可能 ● トランザクション対応 ● 既存のデータを使いつつ MySQL を使ってアプリを構 築したいユーザー向けか?
    • その他の便利な ストレージエンジン。
    • Built-in By Default! ● CSV – テーブルの実体が CSV ファイル – CSV ファイルを使ったインポート / エクスポート ● FEDERATED – リモートの MySQL サーバ上へデータを格納 ● BLACKHOLE – 全てのデータが消えてしまう。。。 ● MERGE – 複数の MyISAM テーブルをまとめて一つの大きな テーブルに。(パーティショニングより小回りが利 く?) ● ARCHIVE – 追記専用に最適化されたエンジン。
    • Community Driven!!
    • 社外製ストレージエンジン ● SPIDER – リモートの MySQL サーバーへデータを格納 – パーティションごとに異なるサーバーを指定 ● 大規模負荷分散 ● SHARDING ● PBXT – 汎用型ストレージエンジン – トランザクションや FK に対応 – 追記型アーキテクチャ ● Senna/Tritonn – 日本語全文検索エンジン Senna を MySQL で使える ようにしたもの。
    • 社外製ストレージエンジン - つづき ● Q4M – ストレージエンジンとしてアクセス可能なメッセージ キュー ● KickFire – SQL チップで処理を高速化 – DWH 向けアプアイアンス ● RethinkDB – SSD での利用を前提にデータベースを再設計 ● InifniDB – DWH 向け ● TokuDB – フラクタルツリーインデックス
    • SPIDER 動作イメージ APP1 APP2 APP3 APP4 n1 n2 n3 n4 SPIDER SPIDER SPIDER SPIDER n5 n6 n7 n8 INNODB INNODB INNODB INNODB
    • MySQL Cluster 概要(再掲) アプリケーション SQL SQL SQL ノード ノード ノード 管理 NDB API ノード データ データ 管理 ノード ノード ノード データ データ ノード ノード
    • 業務システム での利用!
    • 典型的な利用イメージ アプリケーション マスター マスター HA スタンバイ バックアップ スレーブ スレーブ レポーティング
    • MySQL Enterprise サブスクリプション ● サービスとツールの統合パッケージ – MySQL Enterprise Server ● Quarterly Service Pack ● 緊急 Hot fx – MySQL のエキスパートによるサポートサービス – MySQL Enterprise Monitor – ナレッジベース – テクニカルアラート – 年間契約 – お問い合わせは Oracle Direct まで。
    • 大規模サイト 利用実績!!
    • 多数の大規模 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
    • まとめ 簡単・高速・安定の MySQL なら 小規模から超大規模まで 対応可能 !!
    • Q!! & ご静聴ありがとうございました。 A!!