# MySQL オープンソースのリレーショナルデータベース管理システム。『ウェブオペレーション』12章の著者[[Baron Schwartz]]は「世界で最も有名なウェブアプリケーションデータベース」と位置づけ、自身が最も得意とするデータベースとして本章全体の議論の中心に据える。(Source: [[@2011__OReillyJapan__ウェブオペレーション - Chapter 12 ウェブにおけるリレーショナルデータベースの戦略と戦術]] §12.3.1) ## 12章での扱い - **レプリケーション**: マスタ(書き込み)からスレーブ(読み取り専用)への非同期レプリケーションが標準であり、この非同期性がレプリケーションラグ・スプリットブレイン・複数マスタ書き込みの危険性など、章全体で繰り返し警告される問題の根本原因になっている。(Source: 同 §12.2.2, §12.4.3.2) - **ストレージエンジン**: トランザクション機能を持つInnoDB(および派生のXtraDB)の使用を推奨し、外部キー・トリガー・ビュー・ストアドプロシージャは避けるべきとする。MyISAMはクラッシュセーフでなく復旧に時間がかかるため使用を推奨しない。(Source: 同 §12.4.2) - **オンラインスキーマ変更**: 通常のALTER TABLEは対象テーブルをロックするため常時稼動アプリケーションには不向きだが、InnoDB plugin/XtraDBはインデックスの追加・削除をオンラインかつ高速に行える。(Source: 同 §12.5.2) - **MySQL Cluster(NDB)**: 名前に反して、NDB(Network Database)という別系統のシェアードナッシング型分散データベースのフロントエンドであり、ウェブアプリケーションで頻用するジョインやGROUP BYの性能が低く、運用の専門知識も稀少である。著者はウェブアプリケーションには不要と結論づける。(Source: 同 §12.3.2) - **パフォーマンス分析**: スロークエリログとMaatkitのmk-query-digestによる集計、OProfileによるバイナリプロファイリングが実務的な診断手順として紹介される。(Source: 同 §12.5.4) ## 9章での扱い [[dealnews.com]](9章執筆者 [[Brian Moon]])は、2006年のキャッシュスタンピード対応の一環として、データベースへの依存を減らすためにMySQL Clusterを検討した。「その頃に出てきた有望なMySQLソリューション」としてデータを複数サーバに配置する方式を評価したが、当時のチームにはその技術への習熟がなく、数か月で使いこなせるようになるとは思えなかったため、次の年まで見送った。(Source: [[@2011__OReillyJapan__ウェブオペレーション - Chapter 9 予期しないトラフィック急増への対応]] §9.8) 代わりに、トランザクションが使えるInnoDB(以前使っていたMyISAMはレプリケーションエラーが問題だった)でレプリケーションを構築し、4台のサーバから読み取り専用でアプリケーションにデータを提供する「読み取り専用データベース」を構築した。アプリケーションからこの4台への書き込みは行わない。(Source: 同 §9.8) > [!note] 12章([[Baron Schwartz]]執筆)はMySQL Cluster(NDB)について「ウェブアプリケーションには不要」という専門家としての結論を述べるが、9章のdealnews.comの記述はこれと矛盾しない。9章がMySQL Clusterを見送った理由は性能上の判断ではなく、チームの習熟に時間がかかるという実務上の制約であり、12章が指摘するジョイン・GROUP BYの性能問題を検証した上での判断ではない。両者は異なる理由から同じ選択(MySQL Clusterを採用しない)に至っている。 ## 18章での扱い 『ウェブオペレーション』18章(2011、[[濱崎 健吾]])では、[[Cookpad|クックパッド]]のリレーショナルデータベース層としてMySQLが使われている。数台のマスタからレプリケーションしたスレーブ群を構築し、マスタはVRRPで冗長化して代表の1台に仮想IPを持たせ、更新系クエリは代表マスタへ、参照系クエリはスレーブ群へ振り分ける構成である。12章・9章が詳述するレプリケーション設計論の実例として、三層構成の一角を担う形で簡潔に触れられている。(Source: [[@2011__OReillyJapan__ウェブオペレーション - Chapter 18 日本の料理のインフラ]] §18.1) ## 関連 - 実体: [[Baron Schwartz]](本章の著者、MySQLエキスパート) / [[Percona]](サードパーティビルド・コンサルティングの提供元) / [[Brian Moon]](9章執筆者) / [[dealnews.com]](9章でMySQL Clusterを評価・見送りInnoDBレプリケーションを構築した組織) / [[Cookpad]](18章でマスタ・スレーブ構成を運用する組織) - 概念: [[単一リーダーレプリケーション]] / [[マルチリーダーレプリケーション]] / [[CAP定理]] - ソース: [[@2011__OReillyJapan__ウェブオペレーション - Chapter 12 ウェブにおけるリレーショナルデータベースの戦略と戦術]] / [[@2011__OReillyJapan__ウェブオペレーション - Chapter 9 予期しないトラフィック急増への対応]] / [[@2011__OReillyJapan__ウェブオペレーション - Chapter 18 日本の料理のインフラ]]