WordPressがMySQLをどのように使用するかを理解する

公開: 2014-09-30

大まかに言えば、WordPressは2つのセグメントに分けることができます。

  • WordPressサイトのルックアンドフィールを生成するロジックとテンプレート
  • すべてのコンテンツを保存し、すべてを強化するMySQLデータベース

しかし、MySQLとは何ですか?

MySQLは非常に強力ですが、WordPressを強化するストックデータベースも軽量で堅牢です。 WordPressのような強力なCMSの最も優れた部分の1つは、ユーザーのすべてのデータベース管理を処理し、エンドユーザーからそれを抽象化することです。 WordPressユーザー、そしてデザイナーでさえ、データベースがどのように機能するかを熟知している必要はありません。 ただし、WordPressがどのように機能するかを本当に理解したい場合は、この投稿が役に立ちます。

まず、MySQLとは何かについて話しましょう。 具体的には、MySQLはリレーショナルデータベース管理システム、または略してRDBMSです。 RDBMSは、構造化照会言語(SQL)を処理および実行するために設計されたコンテナーです。 SQLは、データベースを強化するものです。SQLは、データベースの構造と形式を制御し、そのデータベースで実行される挿入、削除、変更なども記録します。

MySQLはどのように機能しますか?

ただし、これは少し技術的なことなので、一歩下がってSQLデータベースがどのようになるかを考えてみましょう。

SQLは情報のテーブルに編成されています。 大まかに言えば、テーブルをExcelのスプレッドシートと考えてください。 行と列には、事前に定義された構造に従って情報が格納されます。 ただし、Excelスプレッドシートとは異なり、SQLデータベースの列(キーまたはフィールドと呼ばれることもあります)は事前に定義され、事前に分類されています。

WordPressで定義されたテーブルの構造、つまり列は事前に設定されています。プラグインまたはコアの更新によって具体的に変更されない限り、サイトが大きくなっても変更されません。 列は事前に定義されるだけでなく、レコードが挿入される前にそのタイプも定義されます。 数値(整数の場合はINT)、ワードボックス(テキストフィールドの場合はTEXTまたはVARCHAR)、その他(日付と時刻の場合はDATETIME)などのタイプがデータベースに事前設定されています。 WordPress(またはハッカー)が事前に指定されたパターンと一致しないデータをデータベースに追加しようとすると、データベースはデータを受け入れません。

SQLデータベースのもう1つの大きな機能は、RDBMSの頭字語であるリレーショナル機能です。

SQLテーブルおよびテーブル内の特定のキーでさえ、他のテーブルおよびキーに関連付ける機能があります。 これにより、ユーザーは相互に密接に関連するデータベースを構築できます。これは、組織の改善と効率の向上を意味します。

後で見るためにツイートのデータベースを構築したいとします。 ツイートの内容、お気に入りの数など、保存した特定のツイートに関する情報を含むテーブルを作成できます。 また、ツイートした人のデータ(名前、フォロワー数など)も保存したいと思います。

リレーショナルデータベースを使用すると、特定のツイートに関するすべてのデータを含むツイートテーブルを作成できます。次に、問題のツイートを送信した人に関するすべての情報を含むユーザーテーブルを作成できます。 次に、2つのテーブルのキーを関連付けることができるため、データベース(したがってユーザー)は、どのユーザーがどのツイートに関連付けられているかを知ることができます。

WordPressは、リレーショナルテーブルを利用して多くのデータを関連付けます。 たとえば、テーブルwp_postsには、WordPressの1つの投稿に関連するすべてのデータが含まれています。 テーブルwp_commentsには、WordPressの投稿に誰もが残したすべてのコメントが含まれていますが、wp_postsとwp_commentsは、同じデータベース上の2つの異なるテーブルです。 WordPressは、wp_commentsテーブルとwp_postsテーブルの特定のキーの間に関係を構築し、WordPressがどのコメントがどのブログ投稿に属しているかを把握できるようにします。

このデータベースとテーブルの構造は、WordPressを最初にセットアップしたときにMySQLデータベース内に構築されます。 そこから、WordPressは各テーブルの値または行を操作して、サイトを操作します。

たとえば、新しいユーザーを作成すると、ユーザーに関するすべてのデータ(ユーザー名、パスワード、アクセス許可レベルなど)を含む行がwp_usersテーブルに挿入されます。 ユーザーがログインすると、WordPressはデータベースにアクセスし、ログイン画面で提供された情報をデータベースと照合します。 それらが一致しない場合、ログインは拒否されます。

MySQLがキャッシングを使用する方法

WPキャッシングなし

キャッシュなしのWordPressとMySQL。

これと同じ概念が投稿にも当てはまります。新しい投稿を作成して保存すると、WordPressはそれをwp_postsデータベースの行として保存します。 これの逆も当てはまることに注意することが重要です。Webサイトを表示している人がコンテンツを含むページにアクセスする場合、WordPressはデータベースにアクセスし、テーブルからデータを取得して、画面にレンダリングする必要があります。 数人の訪問者にとって、通常のサーバーはこの負荷をうまく処理できます。 しかし、多くの人がWebサイトからコンテンツを要求している場合、WordPressとデータベースはすべての要求に対応できず、サイトが折りたたまれる可能性があります。 そのため、キャッシングエンジンまたはプラグインを使用することが非常に重要です。

少し技術的になるには、計算コストを理解することが重要です。 この場合、コストはお金を使うことや物を買うことを意味するものではありません。 これは、時間、使用可能なメモリ、実行する必要のあるディスク操作の数など、コンピューティングの速度にとって重要ないくつかの異なる要素を評価することを意味します。

MySQLは、このすべての情報を、保存されているコンピューターのハードドライブ上のデータベースに保存します。 これは、障害に強く、多くのストレージスペースがあり、実行中のコンピューターのメモリを破壊しないため、非常に優れたシステムです。 実行されているコンピューターのRAMにすべてを格納するRedisのようなデータベースと比較して、MySQLは多くの安定性を提供し、データ損失の心配を取り除きます。

ただし、MySQLの安定性には、速度というコストが伴います。 WordPressがデータベース内の同じキーに何度もアクセスし続けることは、「高価」と見なされるべきです。 データベースにアクセスし、ディスク操作を実行し、そのデータを元に戻し、レンダリングするのに多くの費用がかかります。
WPキャッシング

キャッシュ付きのWordPressとMySQL。 注:Web、MySQL、およびキャッシングサーバーは、通常、同じサーバー上で同時に実行されます。 この図は、説明のためにそれらを分離しています。

キャッシングは、この問題の優れた解決策です。 最終的にレンダリングされたHTMLを取得し、それを短期間、おそらく30秒程度保持します。 誰かが同じページを要求した場合、キャッシュエンジンは、データベースとの対話プロセス全体をスキップして、すでにレンダリングされたページを提供します。 そのため、WordPressキャッシングプラグインをインストールするか、Webサイトを構築するときにキャッシングを処理するマネージドホスティングサービスを使用することが重要です。 たとえば、投稿がRedditのフロントページに表示された場合、キャッシュがインストールされていない状態で、すべての新しいトラフィックのプレッシャーの下でサイトが折りたたまれます。

WordPressの11のMySQLテーブル

WP3.8-ERD

WordPress3.8のデフォルトのMySQLテーブル。 画像提供:WordPress Codex、GPLの下でライセンス供与

これらのデータベースとテーブルのいくつかが実際にどのように機能するかを理解したので、WordPressがデフォルトで確立して使用する11の特定のテーブルについて話しましょう。

  • wp_commentmeta –キーや値など、コメントに関連付けられたメタデータはすべてこのデータベースに保存されます。 著者や提出日などのメタデータではなく、WordPressが時折使用するその他のデータを保持します。 このデータはオプションであるか、使用されていない場合があります。 これは、wp_commentsに直接関連しています。

  • wp_comments –このテーブルには、WordPressの投稿とページに対して行われたすべてのコメントのほか、作成者、メールアドレス、送信日、コメントが残された投稿などの関連データがすべて含まれています。

  • wp_links –このデータベースは、WordPressの投稿にリンクデータを含めるために使用されますが、WordPressのいくつかのバージョンの前に廃止されました。 それはまだそこにありますが、これが使用されているのを見るのは疑わしいです。

  • wp_options –設定パネルで設定されたオプションはすべてこのデータベースに保存されます。

  • wp_postmeta – wp_commentmetaと同様に、wp_postmetaには投稿に関するオプションのデータが含まれます。 特定のユースケースがない限り、これはあまり利用されない可能性があります。

  • wp_posts – wp_postsには、投稿とそれに関連するデータに関するすべてのデータが含まれています。 このテーブルは非常に頻繁に使用され、サイトのすべてのコンテンツが含まれています。

  • wp_terms –このテーブルには、投稿が分類されるタグやカテゴリなどのコンテンツが格納されます。

  • wp_term_relationships –このテーブルは、投稿とそれに関連するカテゴリおよびタグの間の関係を維持する役割を果たします。 ここにもMySQLの関係が設定されています。テーブルは実際にはwp_term_taxonomyテーブルを介して投稿と用語の両方に接続されています。

  • wp_term_taxonomy –これは投稿に関連付けられている分類のタイプの追跡を処理します。 wp_termsとwp_term_relationshipsにリンクし、カテゴリやタグなどとの関連付けをログに記録します。

  • wp_usermeta –別のメタテーブルであるwp_usermetaは、wp_usersに関連付けられたオプションのメタデータを処理します。

  • wp_users – wp_usersには、ユーザー名、管理者権限、暗号化されたパスワードなどの情報を含む、WordPressユーザーに関連するすべてのデータが含まれています。

MySQLは最初は威圧的に見えるかもしれませんが、WordPressを使用すると、テーブルは非常に理にかなっているだけでなく、速度と効率を向上させる方法でレイアウトされます。 次回WordPressサイトで作業するときは、サイトを強化するMySQLデータベースの構造について考えてください。 サイトのデータベースを完全に理解することで、サイトが安全で、堅実で、非常に効率的であることを確認できます。