Понимание того, как WordPress использует MySQL

Опубликовано: 2014-09-30

Вообще говоря, WordPress можно разделить на два сегмента:

  • логика и шаблоны, которые создают внешний вид сайта WordPress
  • база данных MySQL, в которой хранится весь контент и все это приводится в действие

Но что такое MySQL?

MySQL невероятно мощный, но базовая база данных, на которой работает WordPress, также оказывается легкой и надежной. Одна из лучших частей мощной CMS, такой как WordPress, заключается в том, что она обрабатывает все управление базой данных для пользователя и абстрагирует его от конечного пользователя. Пользователям WordPress и даже дизайнерам не нужно хорошо разбираться в том, как работает база данных. Однако, если вы действительно хотите понять, как работает WordPress, этот пост для вас.

Сначала поговорим о том, что такое MySQL. В частности, MySQL — это система управления реляционными базами данных, или сокращенно РСУБД. СУБД — это контейнер, предназначенный для обработки и запуска языка структурированных запросов (SQL). SQL — это то, что управляет базой данных — он управляет структурой и формой базы данных, а также записывает вставки, удаления, модификации и т. д., которые выполняются в этой базе данных.

Как работает MySQL?

Однако это все немного технические подробности, поэтому давайте сделаем шаг назад и рассмотрим, как будет выглядеть база данных SQL.

SQL организован в виде информационных таблиц. Вообще говоря, подумайте о таблице как о электронной таблице в Excel. Строки и столбцы хранят информацию в соответствии с заранее определенной структурой. Однако, в отличие от электронной таблицы Excel, столбцы (называемые ключами или иногда полями ) базы данных SQL предопределены и классифицированы заранее.

Определенная структура или столбцы таблиц в WordPress устанавливаются заранее — они не будут меняться по мере роста сайта, если их специально не изменит плагин или обновление ядра. Столбец не только определяется заранее, но и его тип также определяется до того, как в него будут помещены записи. В базе данных предустановлены такие типы, как числа (INT для целых чисел), текстовые поля (TEXT или VARCHAR для текстовых полей) и другие (DATETIME для даты и времени). Если WordPress (или хакер) попытается добавить данные в базу данных, которые не соответствуют предварительно заданному шаблону, база данных не примет данные.

Еще одна важная особенность баз данных SQL содержится в аббревиатуре РСУБД: реляционная функция.

Таблицы SQL и даже определенные ключи в таблице могут быть связаны с другими таблицами и ключами. Это позволяет пользователям создавать базы данных, которые тесно связаны друг с другом, что означает лучшую организацию и большую эффективность.

Допустим, вы хотите создать базу данных твитов, чтобы просмотреть их позже. Вы можете создать таблицу, содержащую информацию о конкретных твитах, которые вы сохранили, например, содержание твита, сколько у него избранного и так далее. Вы также хотели бы сохранить данные о человеке, который написал твит — как его зовут, сколько у него подписчиков и тому подобное.

Используя реляционные базы данных, вы можете создать таблицу твитов, содержащую все данные о конкретных твитах, а затем вы можете создать пользовательскую таблицу, содержащую всю информацию о человеке, который отправил рассматриваемый твит. Затем вы можете связать ключи в двух таблицах, чтобы база данных (и, следовательно, вы) знали, какой пользователь связан с каким твитом.

WordPress использует реляционные таблицы для связи большого количества данных. Например, таблица wp_posts содержит все релевантные данные об одном посте в WordPress. Таблица wp_comments содержит все комментарии, которые кто-либо оставил к сообщению WordPress, но wp_posts и wp_comments — это две разные таблицы в одной базе данных. WordPress строит отношения между определенными ключами в таблице wp_comments и таблице wp_posts, чтобы WordPress мог определить, какой комментарий относится к какому сообщению в блоге.

Эта база данных и структура таблиц создаются в базе данных MySQL при первоначальной настройке WordPress. Оттуда WordPress просто манипулирует значениями или строками в каждой таблице, чтобы ваш сайт работал.

Например, когда вы создаете нового пользователя, строка, содержащая все данные о пользователе (например, имя пользователя, пароль и уровень разрешений), вставляется в таблицу wp_users. Когда пользователь входит в систему, WordPress обращается к базе данных и сверяет информацию, предоставленную на экране входа в систему, с базой данных. Если они не совпадают, вход в систему отклоняется.

Как MySQL использует кэширование

WP без кэширования

WordPress и MySQL без кэширования.

Та же концепция применима к сообщениям: когда вы пишете и сохраняете новое сообщение, WordPress сохраняет его как строку в базе данных wp_posts. Важно отметить, что верно и обратное: когда человек, просматривающий веб-сайт, получает доступ к странице с содержимым, WordPress должен получить доступ к базе данных, получить данные из таблиц, а затем отобразить их на своем экране. Для нескольких посетителей обычный сервер вполне справляется с такой нагрузкой. Но если много людей запрашивают контент с веб-сайта, WordPress и база данных не смогут справиться со всеми запросами, и сайт может закрыться. Вот почему использование механизма кэширования или плагина так важно.

Чтобы снова немного углубиться в технические подробности, важно понимать вычислительные затраты. В данном случае стоимость не означает трату денег или покупку вещей. Это означает оценку нескольких различных факторов, важных для скорости вычислений, таких как время, доступная память и количество дисковых операций, которые необходимо выполнить.

MySQL хранит всю эту информацию в базе данных на жестком диске компьютера, на котором она хранится. Это действительно отличная система, потому что она устойчива к сбоям, имеет много места для хранения и не разрушает память компьютера, на котором она работает. По сравнению с базой данных, такой как Redis, которая хранит все в оперативной памяти компьютера, на котором она запущена, MySQL предлагает большую стабильность и избавляет от беспокойства о потере данных.

Однако за стабильность MySQL приходится платить: скоростью. Постоянное обращение WordPress к одним и тем же ключам в базе данных снова и снова следует рассматривать как «дорого». Доступ к базе данных, выполнение операции с диском, возврат этих данных, а затем их рендеринг стоят дорого.
Кэширование WP

WordPress и MySQL с кэшированием. Примечание: веб-серверы, серверы MySQL и кэширования обычно работают одновременно на одном сервере. На этой диаграмме они разделены в иллюстративных целях.

Кэширование — отличное решение этой проблемы. Он берет этот окончательный отрендеренный HTML и удерживает его в течение короткого периода времени, может быть, 30 секунд или около того. Если кто-то запрашивает ту же страницу, механизм кэширования предоставит ему эту уже отрендеренную страницу, пропуская весь процесс взаимодействия с базой данных. Вот почему крайне важно либо установить плагины для кэширования WordPress, либо использовать службу управляемого хостинга, которая обрабатывает кэширование для вас при создании веб-сайтов. Например, если сообщение окажется на главной странице Reddit, ваш сайт свернется под давлением всего нового трафика без установленного кэширования.

Одиннадцать таблиц MySQL в WordPress

WP3.8-ERD

Таблицы MySQL по умолчанию в WordPress 3.8. Изображение предоставлено Кодексом WordPress, под лицензией GPL.

Теперь, когда мы понимаем, как на самом деле работают некоторые из этих баз данных и таблиц, давайте поговорим об одиннадцати конкретных таблицах, которые WordPress создает и использует по умолчанию:

  • 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, на которой работает сайт. Полное понимание базы данных сайта может сделать ваш сайт безопасным, надежным и чрезвычайно эффективным.