SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

MySQLのシステムアーキテクチャ

MySQL内部構造ガイド

CおよびC++のプログラミング用語

 本稿では、CおよびC++のさまざまなプログラミングパラダイムを扱います。Cのソースコードファイルは、配布物の中で「.c」という拡張子が付いているファイルです。C++のソースファイルには「.cc」という拡張子が付いていますが、Windowsの一部のシステムでは「.cpp」という拡張子が付いている場合もあります。CとC++のどちらのソースファイルでも、「.h」という拡張子を持つヘッダーファイルを#includeディレクティブでインクルードすることができます。CおよびC++では、ソースファイルで使用する関数と変数をヘッダーファイルで定義するのが習わしになっています。

 通常、ヘッダーファイルにはソースファイルと同じ名前を付けて「.h」という拡張子を付けますが、必ずしもそうでないこともあります。システムのソースコードを見るときに最初にすることの1つは、変数と関数が「どこで」定義されているかを確認することです。ときには、ヘッダーファイルの広大な階層を調べて、変数や関数がどこで公式に定義されているかを見つけることが必要になります。

 当然、読者は変数や関数がどのようなものかをよく知っているはずなので、ここではあまり詳しく解説しません。ただし、CおよびC++のプログラミングでは、それ以外のデータ型と用語が頻繁に使われます。特に、本稿では次の用語を使います。

  • 構造体
  • クラス
  • メンバ変数
  • メンバメソッド

 「構造体」は、本質的に一連のデータのコンテナです。構造体は一般に次のような形で定義されます。

typedef struct st_heapinfo /* Struct heap_info */
{
   ulong records; /* Records in database */
   ulong deleted; /* Deleted records in database */
   ulong max_records;
   ulong data_length;
   ulong index_length;
   uint reclength; /* Length of one record */
   int errkey;
   ulonglong auto_increment;
} HEAPINFO;

 ここに示したのは、/include/heap.hで定義されている構造体です。ここでは、struct (st_heapinfo)を構成するさまざまなデータ型のメンバ変数(recordsmax_recordsなど)をいくつか定義し、このst_heapinfo構造体をHEAPINFOという別名で表すことをtypedefで定義しています。Cコードのコメントは、//または/* ... */という文字で表します。

 一方、「クラス」はCの構造体に似たC++のオブジェクト指向構造ですが、「メンバ変数」の他に「メンバメソッド」を持つことができます。メンバメソッドはクラスの関数で、クラスの「インスタンス」を通じて呼び出すことができます。

ソースコードの分析に役立つDoxygen

 ソースコードの分析には、Doxygenなどのツールを使うことをお勧めします。Doxygenを使うと、ソース配布物からコードの構造を調べることができます。このツールは、MySQLのように、1つの実行処理で何百ものクラスメンバと関数を呼び出す巨大なソース配布物の関数を調査するのにきわめて有効です。ドキュメント形式の出力を見ると、クラスや構造体がどこで定義され、どこで実装されているかがわかります。

 Doxygenでは、このツールで生成されるドキュメントの出力形式を必要に応じて設定でき、UMLの継承図やコラボレーション図を生成することさえできます。ソースコード内のクラス階層を示すだけでなく、関数が定義および実装されている場所へのリンクも生成できます。

 Unixマシンでは、DoxygenのWebサイトからソースコードをダウンロードし、手順に従ってインストールします(インストール方法の説明もWebサイトから入手できます)。グラフィカルな出力を生成するには、先にGraph Visualizationツールキットをhttp://www.graphviz.org/からダウンロードしてインストールします。Doxygenをインストールしたら、次のコマンドを実行し、Doxygenが処理するデフォルトの設定ファイルを作成します。

# doxygen -g -s /path/to/newconfig.file

 /path/to/newconfig.fileオプションには、Doxygenのドキュメントの生成先となるディレクトリを指定します。設定ファイルが作成されたら、好みのエディタで設定ファイルを開き、必要なセクションを編集します。変更する必要があるのは、通常はOUTPUT_DIRECTORYINPUT、およびPROJECT_NAMEの設定だけです。設定ファイルを編集したら、次のコマンドを実行します。

# doxygen </path/to/config-file>

 参考のために、MySQL 5.0.2のDoxygenの出力例をhttp://www.jpipes.com/mysqldox/で公開しています。

MySQLのドキュメント

 システムの内部構造のドキュメントは、MySQLのソースコードをダウンロードすると利用できるようになります。ファイルはソースツリーのDocsディレクトリにあり、「internals.texi」というTEXIドキュメントになっています。

 このTEXIドキュメントでは、次のトピックが詳しく説明されています。

  • コーディングのガイドライン
  • オプティマイザ(必読)
  • 重要なアルゴリズムと構造
  • 文字セットとそれに関連する問題
  • MySQLがさまざまなSELECT処理を実行する方法(必読)
  • MySQLがクエリを変換する方法
  • 通信プロトコル
  • レプリケーション
  • MyISAMのレコード構造
  • .MYIファイル構造
  • InnoDBのレコード構造
  • InnoDBのページ構造

 内部構造のドキュメントは、サーバの特定の主要な要素(特にクエリオプティマイザ)を調べるうえで非常に役立ちますが、各サブシステムが相互にやりとりする方法には直接触れていないことに注意してください。このやりとりの方法を調べるには、ソースコード自体と開発者のコメントを確認する必要があります(※2)。

※2
 サブシステムの通信の変化に対応できるように、開発者が通信に関する説明を意図的に省いたかどうかが議論を呼ぶところです。
注意
 最新の「internals.texi」ドキュメントにも、誤ったハイパーリンク、参照、および不正確なファイル名やパスが数多く含まれるため、すべての内容をそのまま受け入れずにきちんと確認する必要があります。「internals.texi」ドキュメントは、使用しているMySQLサーバのバージョンよりも古いことがあります。

次のページ
TEXIおよびtexi2htmlの表示

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Mike Kruckenberg(Mike Kruckenberg)

古くからのMySQLの愛好者で、Webベースのアプリケーションの初期の時代からMySQLを公私ともに利用してきた。本業で長年にわたってMySQL全般の大黒柱となってきただけでなく、MySQLコミュニティの活発なメンバーでもある。『Pro MySQL』の共同執筆の他に、『MySQL Cluster C...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Jay Pipes(Jay Pipes)

MySQLのNorth American Community Relations Manager。『Pro MySQL』(Apress、2005年)の共同執筆者で、『Linux Magazine』誌でも記事を書いている。また、ソフトウェア開発者がMySQLを最も有効に活用する方法を見いだすための支援...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1539 2007/08/09 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー