矢印はブロック同士の相関関係(シグナルの送受信など)を示すのだが、この絵に描かれているものは非常に省略されたものであり、実際にはもっと複雑に絡み合っているのだということを覚えておいて欲しい。例えばQMGRやDBDICTといったブロックは、他のブロック全てとシグナル交換をするのだが、それを全て描くと何が何だか分からなくなるので省いているわけである。もし全てを描いたなら、思わず「それ何てスパゲティ?」と叫んでしまうこと請け合いである。
というわけで、以下淡々と各ブロックについて簡単に説明しよう。MySQL Clusterの各ブロックは、いくつかのカテゴリに分類することが出来るので、以下ではそのカテゴリごとに説明している。
NDBカーネルを管理するブロック
- CMVMI・・・Cluster Manager Virtual Machine Interfaceの略。OSへのリクエストを処理したり、ndb_mgmd(管理ノード)と通信をしてndbdの構成を決定する。
- NDBCNTR・・・NDB CordiNaToRの略。NDBコントローラーか?と思ってしまいがちだが、コーディネーターの意味。役割はndbd起動時の初期化とシャットダウン。
- QMGR・・・クラスタマネージャブロック。ハートビートを通じて各ブロックの状態を管理している。NDBカーネルの親玉的存在。
- NDBFS・・・ファイルシステムへのI/Oを一手に引き受けるブロック。このブロックのおかげでファイルへの非同期I/Oが容易に実装できている。
- DBLQH・・・ローカル・クエリ・ハンドラ。自ノードに対するトランザクションを処理する。MySQL Clusterのndbmtdでマルチスレッド化されたのはこのブロック。図を見れば分かると思うが、このブロックの負荷はかなり高い。(次いで負荷が高いのはDBTC)
- DBACC・・・自ノードの主キーを管理するブロック。ACCはアクセスの意味。
- DBTUP・・・データを管理するブロック。TUPはタプルの意味。
- DBTUX・・・TUple indeXの略。OrderedIndexを管理する。
- DBUTIL・・・トランザクション管理やデータ管理のための便利な機能が詰まったユーティリティブロック。
- DBDICT・・・ディクショナリブロック。テーブルやテーブルスペース、ログファイルのメタデータの管理を一手に引き受ける。SQLノードが直接アクセス出来るブロックである。
- DBTC・・・Transaction Cordinatorの略。SQLノードからリクエストされたトランザクションの面倒を始まりから終わりまで面倒を見るブロックである。該当するデータが自ノードの担当でなければ、別のデータノードへ要求を送ったりする。
- DBDIH・・・DIstribution Handlerの略。レプリカを管理し、どのフラグメント(パーティション)がどのノードに格納されているかについて責任を持つ。また、LCPやGCPといった処理を行うのもこのノードである。
- TRIX・・・TRansactions and IndeXesの略。このブロックは内部的なトリガとユニークインデックスを管理する。MySQL Clusterはデータが複数のノードに分散しているので、行の一意性を保証するのにはどうしても分割の対象となる主キーが必要となるため、サポートテーブルという別の内部テーブルが作成される。実テーブルと内部テーブルは、トリガによって同期されるというわけである。
- PGMAN・・・バッファページを管理するブロック。名前の由来はPaGe MANagerである。
- TSMAN・・・テーブルスペースを管理するブロック。名前の由来はTableSpace MANagerである。
- LGMAN・・・ログファイルグループを管理するブロック。名前の由来はLogfile Group MANagerである。
- BACKUP・・・オンラインバックアップの実行。
- RESTORE・・・取得したバックアップのリストア。ndb_restoreコマンドからデータを受け取ってリストアする。ndb_restoreコマンドは、一種のSQLノードとして動作する。
- SUMA・・・SUbscription MAnager。MySQL Server(mysqld)へバイナリログの元になるデータを送信する。
ブロック同士がシグナルを交換して実現しているのは「データベース管理システム」である。各カーネルブロックは、データベース管理システムに必要な機能の要素ひとつひとつを具現化したものであると考えられるので、どのようなブロックが存在するかということはデータベースエンジニアにとって興味深いものとなっているのではないだろうか。また、MySQL Clusterのログにはブロック名がたくさん登場するので、ブロックの役割について知っていればログを見る際に役立つはずである。次回は、MySQL Clusterのソースコードのレイアウトについて説明する予定である。
0 コメント:
コメントを投稿