Entendendo como o WordPress usa o MySQL

Publicados: 2014-09-30

De um modo geral, o WordPress pode ser dividido em dois segmentos:

  • a lógica e os modelos que geram a aparência de um site WordPress
  • o banco de dados MySQL que armazena todo o conteúdo e alimenta tudo

Mas o que é MySQL?

O MySQL é incrivelmente poderoso, mas o banco de dados de ações que alimenta o WordPress também é leve e robusto. Uma das melhores partes de um CMS poderoso como o WordPress é que ele lida com todo o gerenciamento de banco de dados para o usuário e o abstrai do usuário final. Usuários do WordPress, e até designers, não precisam estar familiarizados com o funcionamento do banco de dados. No entanto, se você estiver interessado em realmente entender como o WordPress funciona, este post é para você.

Primeiro, vamos falar sobre o que é o MySQL. Especificamente, o MySQL é um sistema de gerenciamento de banco de dados relacional, ou RDBMS para abreviar. Um RDBMS é um contêiner projetado para manipular e executar a Linguagem de Consulta Estruturada (SQL). SQL é o que alimenta um banco de dados - ele controla a estrutura e a forma do banco de dados e também registra inserções, exclusões, modificações e assim por diante que são executadas nesse banco de dados.

Como funciona o MySQL?

No entanto, isso é um pouco técnico, então vamos dar um passo atrás e considerar como seria um banco de dados SQL.

SQL é organizado em tabelas de informações. De um modo geral, pense em uma tabela como uma planilha no Excel. Linhas e colunas armazenam informações de acordo com uma estrutura predeterminada. No entanto, ao contrário de uma planilha do Excel, as colunas (chamadas de chaves ou às vezes campos ) de um banco de dados SQL são predefinidas e categorizadas antecipadamente.

A estrutura definida, ou colunas, das tabelas no WordPress são definidas com antecedência - elas não mudam à medida que o site cresce, a menos que um plugin ou atualização principal as altere especificamente. Uma coluna não é apenas definida antecipadamente, mas seu tipo também é definido antes que os registros sejam colocados nela. Tipos como números (INT para números inteiros), caixas de palavras (TEXT ou VARCHAR para campos de texto) e outros (DATETIME para data e hora) são predefinidos no banco de dados. Se o WordPress (ou um hacker) tentar adicionar dados ao banco de dados que não correspondam ao padrão pré-especificado, o banco de dados não aceitará os dados.

Outro grande recurso dos bancos de dados SQL é encontrado na sigla RDBMS: o recurso relacional.

Tabelas SQL e até mesmo chaves específicas em uma tabela têm a capacidade de se relacionar com outras tabelas e chaves. Isso permite que os usuários construam bancos de dados que se relacionam estreitamente uns com os outros, o que significa melhor organização e maior eficiência.

Digamos que você queira construir um banco de dados de tweets para ver mais tarde. Você pode construir uma tabela que contenha informações sobre tweets específicos que você salvou, como o conteúdo do tweet, quantos favoritos ele tem e assim por diante. Você também gostaria de salvar dados sobre a pessoa que twittou – qual é o nome dela, quantos seguidores ela tem, coisas assim.

Usando bancos de dados relacionais, você pode criar uma tabela de tweets que contém todos os dados sobre tweets específicos e, em seguida, pode criar uma tabela de usuários que contém todas as informações sobre a pessoa que enviou o tweet em questão. Você poderia então relacionar as chaves nas duas tabelas, para que o banco de dados (e, portanto, você) saiba qual usuário está associado a qual tweet.

O WordPress utiliza tabelas relacionais para relacionar muitos dados. Por exemplo, a tabela wp_posts contém todos os dados relevantes sobre um único post no WordPress. A tabela wp_comments contém todos os comentários que alguém deixou em um post do WordPress, mas wp_posts e wp_comments são duas tabelas diferentes no mesmo banco de dados. O WordPress cria um relacionamento entre certas chaves na tabela wp_comments e a tabela wp_posts para que o WordPress possa descobrir qual comentário pertence a qual postagem do blog.

Esse banco de dados e estrutura de tabelas são construídos em um banco de dados MySQL quando você configura inicialmente o WordPress. A partir daí, o WordPress apenas manipula os valores, ou linhas, em cada tabela para fazer seu site funcionar.

Por exemplo, quando você cria um novo usuário, uma linha contendo todos os dados sobre o usuário (como nome de usuário, senha e nível de permissão) é inserida na tabela wp_users. Quando um usuário faz login, o WordPress acessa o banco de dados e verifica as informações fornecidas na tela de login em relação ao banco de dados. Se eles não corresponderem, o login será rejeitado.

Como o MySQL usa o cache

WP Sem Cache

WordPress e MySQL sem cache.

Esse mesmo conceito se aplica aos posts: quando você escreve e salva um novo post, o WordPress o salva como uma linha no banco de dados wp_posts. É importante notar que o inverso disso também é verdadeiro: quando uma pessoa que visualiza um site acessa uma página com conteúdo, o WordPress precisa acessar o banco de dados, obter os dados das tabelas e renderizá-los na tela. Para alguns visitantes, um servidor normal pode lidar bem com essa carga. Mas se muitas pessoas estão solicitando conteúdo do site, o WordPress e o banco de dados não conseguirão acompanhar todas as solicitações e o site pode dobrar. É por isso que usar um mecanismo de cache ou plugin é tão importante.

Para ficar um pouco técnico novamente, é importante entender o custo computacional. Nesse caso, custo não significa gastar dinheiro ou comprar coisas. Significa avaliar vários fatores diferentes que são importantes para a velocidade da computação, como tempo, memória disponível e número de operações de disco que precisam ser executadas.

O MySQL armazena todas essas informações em um banco de dados no disco rígido do computador em que está armazenado. Este é um sistema realmente ótimo porque é resistente a falhas, tem muito espaço de armazenamento e não destrói a memória do computador em que está sendo executado. Comparado a um banco de dados como o Redis, que armazena tudo na RAM do computador em que está sendo executado, o MySQL oferece muita estabilidade e elimina a preocupação com a perda de dados.

No entanto, a estabilidade do MySQL vem com um custo: velocidade. Ter o WordPress acessando continuamente as mesmas chaves em um banco de dados repetidamente deve ser visto como “caro”. Custa muito acessar o banco de dados, realizar uma operação de disco, trazer esses dados de volta e renderizá-los.
Cache WP

WordPress e MySQL com cache. Observação: os servidores web, MySQL e de cache geralmente são executados simultaneamente no mesmo servidor. Este diagrama os separa para fins de ilustração.

O cache é uma ótima solução para esse problema. Ele pega esse HTML renderizado final e o mantém por um curto período de tempo, talvez 30 segundos ou mais. Se alguém solicitar essa mesma página, o mecanismo de armazenamento em cache servirá essa página já renderizada para eles, ignorando todo o processo de interação com o banco de dados. É por isso que é crucial instalar plugins de cache do WordPress ou usar um serviço de hospedagem gerenciada que lide com o cache para você ao criar sites. Se um post acabar na primeira página do Reddit, por exemplo, seu site irá dobrar sob a pressão de todo o novo tráfego sem o cache instalado.

As onze tabelas MySQL do WordPress

WP3.8-ERD

Tabelas MySQL padrão do WordPress 3.8. Imagem cortesia do WordPress Codex, licenciado sob GPL

Agora que entendemos como alguns desses bancos de dados e tabelas realmente funcionam, vamos falar sobre as onze tabelas específicas que o WordPress estabelece e usa por padrão:

  • wp_commentmeta – Quaisquer metadados associados a comentários, como chaves e valores, são armazenados neste banco de dados. Ele não contém metadados como autor e data de envio, mas sim dados diversos que o WordPress usa ocasionalmente. Esses dados às vezes são opcionais ou não são usados. Relaciona-se diretamente com wp_comments.

  • wp_comments – Esta tabela contém todos os comentários feitos nas postagens e páginas do WordPress, bem como todos os dados associados, como o autor, seu endereço de e-mail, a data de envio e a postagem em que o comentário foi deixado.

  • wp_links – Este banco de dados é usado para conter dados de links em postagens do WordPress, mas foi retirado de algumas versões do WordPress atrás. Embora ainda esteja lá, é duvidoso que você veja este sendo usado.

  • wp_options – Todas as opções que foram definidas no painel de configurações são armazenadas neste banco de dados.

  • wp_postmeta – Assim como wp_commentmeta, wp_postmeta inclui dados opcionais sobre postagens. A menos que haja um caso de uso específico, este provavelmente não será muito utilizado.

  • wp_posts – wp_posts contém todos os dados sobre postagens e seus dados associados. Esta tabela é muito usada e contém todo o conteúdo de um site.

  • wp_terms – Esta tabela armazena conteúdo como tags e categorias com as quais as postagens são classificadas.

  • wp_term_relationships – Esta tabela é responsável por manter os relacionamentos entre as postagens e suas categorias e tags associadas. Há um relacionamento MySQL configurado aqui também: a tabela está realmente conectada a ambos os posts e termos através da tabela wp_term_taxonomy.

  • wp_term_taxonomy – Isso lida com o rastreamento de que tipo de taxonomias estão associadas às postagens. Ele liga de volta para wp_terms, bem como wp_term_relationships e apenas registra associações com categorias, tags e assim por diante.

  • wp_usermeta – Outra meta tabela, wp_usermeta lida com quaisquer metadados opcionais associados a wp_users.

  • wp_users – wp_users contém todos os dados pertencentes aos usuários do WordPress, incluindo informações como nomes de usuário, direitos de administrador e senhas criptografadas.

O MySQL pode parecer intimidante no começo, mas com o WordPress, as tabelas são dispostas de uma maneira que não apenas faz muito sentido, mas também promove velocidade e eficiência. Na próxima vez que você estiver trabalhando em um site WordPress, pense na estrutura do banco de dados MySQL que alimenta o site. Uma compreensão completa do banco de dados do site pode garantir que seu site seja seguro, sólido e extremamente eficiente.