Comprender cómo WordPress usa MySQL

Publicado: 2014-09-30

A grandes rasgos, WordPress se puede dividir en dos segmentos:

  • la lógica y las plantillas que generan la apariencia de un sitio de WordPress
  • la base de datos MySQL que almacena todo el contenido y lo potencia todo

Pero, ¿qué es MySQL?

MySQL es increíblemente poderoso, pero la base de datos de stock que impulsa WordPress también es liviana y robusta. Una de las mejores partes de un CMS poderoso como WordPress es que maneja toda la administración de la base de datos para el usuario y la abstrae del usuario final. Los usuarios de WordPress, e incluso los diseñadores, no tienen que estar íntimamente familiarizados con el funcionamiento de la base de datos. Sin embargo, si está interesado en comprender realmente cómo funciona WordPress, esta publicación es para usted.

Primero, hablemos de lo que es MySQL. Específicamente, MySQL es un sistema de administración de bases de datos relacionales, o RDBMS para abreviar. Un RDBMS es un contenedor diseñado para manejar y ejecutar lenguaje de consulta estructurado (SQL). SQL es lo que impulsa una base de datos: controla la estructura y la forma de la base de datos, y también registra las inserciones, eliminaciones, modificaciones, etc., que se realizan en esa base de datos.

¿Cómo funciona MySQL?

Sin embargo, todo eso es un poco técnico, así que demos un paso atrás y consideremos cómo sería una base de datos SQL.

SQL está organizado en tablas de información. En términos generales, piense en una tabla como una hoja de cálculo en Excel. Las filas y columnas almacenan información de acuerdo con una estructura predeterminada. Sin embargo, a diferencia de una hoja de cálculo de Excel, las columnas (llamadas claves o, a veces , campos ) de una base de datos SQL están predefinidas y categorizadas de antemano.

La estructura definida, o las columnas, de las tablas en WordPress se establecen de antemano; no cambiarán a medida que crezca un sitio, a menos que un complemento o una actualización del núcleo las cambie específicamente. Una columna no solo se define de antemano, sino que su tipo también se define antes de que se coloquen registros en ella. Tipos como números (INT para enteros), cuadros de texto (TEXT o VARCHAR para campos de texto) y otros (DATETIME para fecha y hora) están predeterminados en la base de datos. Si WordPress (o un pirata informático) intenta agregar datos a la base de datos que no coinciden con el patrón preespecificado, la base de datos no aceptará los datos.

Otra gran característica de las bases de datos SQL se encuentra en el acrónimo RDBMS: la característica relacional.

Las tablas SQL e incluso claves específicas en una tabla tienen la capacidad de relacionarse con otras tablas y claves. Esto permite a los usuarios crear bases de datos estrechamente relacionadas entre sí, lo que significa una mejor organización y una mayor eficiencia.

Digamos que desea crear una base de datos de tweets para ver más tarde. Puede crear una tabla que contenga información sobre tweets específicos que haya guardado, como el contenido del tweet, cuántos favoritos tiene, etc. También le gustaría guardar datos sobre la persona que lo tuiteó: cuál es su nombre, cuántos seguidores tiene, cosas así.

Usando bases de datos relacionales, puede crear una tabla de tweets que contenga todos los datos sobre tweets específicos y luego puede crear una tabla de usuarios que contenga toda la información sobre la persona que envió el tweet en cuestión. Luego podría relacionar las claves en las dos tablas, para que la base de datos (y por lo tanto usted) sepa qué usuario está asociado con qué tweet.

WordPress utiliza tablas relacionales para relacionar una gran cantidad de datos. Por ejemplo, la tabla wp_posts contiene todos los datos relevantes sobre una sola publicación en WordPress. La tabla wp_comments contiene todos los comentarios que alguien dejó en una publicación de WordPress, pero wp_posts y wp_comments son dos tablas diferentes en la misma base de datos. WordPress crea una relación entre ciertas claves en la tabla wp_comments y la tabla wp_posts para que WordPress pueda determinar qué comentario pertenece a qué publicación de blog.

Esta base de datos y la estructura de la tabla se crean dentro de una base de datos MySQL cuando configura inicialmente WordPress. A partir de ahí, WordPress simplemente manipula los valores, o filas, en cada tabla para que su sitio funcione.

Por ejemplo, cuando crea un nuevo usuario, se inserta una fila que contiene todos los datos sobre el usuario (como nombre de usuario, contraseña y nivel de permiso) en la tabla wp_users. Cuando un usuario inicia sesión, WordPress accede a la base de datos y compara la información proporcionada en la pantalla de inicio de sesión con la base de datos. Si no coinciden, se rechaza el inicio de sesión.

Cómo utiliza MySQL el almacenamiento en caché

WP sin almacenamiento en caché

WordPress y MySQL sin almacenamiento en caché.

Este mismo concepto se aplica a las publicaciones: cuando escribe y guarda una nueva publicación, WordPress la guarda como una fila en la base de datos wp_posts. Es importante tener en cuenta que lo contrario de esto también es cierto: cuando una persona que ve un sitio web accede a una página con contenido, WordPress tiene que acceder a la base de datos, sacar los datos de las tablas y luego mostrarlos en su pantalla. Para unos pocos visitantes, un servidor normal puede manejar esta carga sin problemas. Pero si muchas personas solicitan contenido del sitio web, WordPress y la base de datos no podrán mantenerse al día con todas las solicitudes y el sitio puede colapsar. Es por eso que es tan importante usar un motor de almacenamiento en caché o un complemento.

Para volver a ser un poco técnico, es importante comprender el costo computacional. En este caso, costo no significa gastar dinero o comprar cosas. Significa evaluar varios factores diferentes que son importantes para la velocidad de la computación, como el tiempo, la memoria disponible y la cantidad de operaciones de disco que deben realizarse.

MySQL almacena toda esta información en una base de datos en el disco duro de la computadora en la que está almacenada. Este es un gran sistema porque es resistente a fallas, tiene mucho espacio de almacenamiento y no destruye la memoria de la computadora en la que se está ejecutando. En comparación con una base de datos como Redis que almacena todo en la RAM de la computadora en la que se ejecuta, MySQL ofrece mucha estabilidad y elimina la preocupación de la pérdida de datos.

Sin embargo, la estabilidad de MySQL tiene un costo: la velocidad. Hacer que WordPress acceda continuamente a las mismas claves en una base de datos una y otra vez debe considerarse "caro". Cuesta mucho acceder a la base de datos, realizar una operación de disco, recuperar esos datos y luego procesarlos.
Almacenamiento en caché de WP

WordPress y MySQL con almacenamiento en caché. Nota: los servidores web, MySQL y de almacenamiento en caché generalmente se ejecutan simultáneamente en el mismo servidor. Este diagrama los separa con fines ilustrativos.

El almacenamiento en caché es una gran solución a este problema. Toma ese HTML renderizado final y lo retiene por un corto período de tiempo, tal vez 30 segundos más o menos. Si alguien solicita esa misma página, el motor de almacenamiento en caché le entregará esa página ya renderizada, omitiendo todo el proceso de interacción con la base de datos. Es por eso que es crucial instalar complementos de almacenamiento en caché de WordPress o utilizar un servicio de alojamiento administrado que maneje el almacenamiento en caché por usted al crear sitios web. Si una publicación termina en la página principal de Reddit, por ejemplo, su sitio se plegará bajo la presión de todo el tráfico nuevo sin el almacenamiento en caché instalado.

Las once tablas MySQL de WordPress

WP3.8-ERD

Tablas MySQL predeterminadas de WordPress 3.8. Imagen cortesía de WordPress Codex, con licencia GPL

Ahora que entendemos cómo funcionan realmente algunas de estas bases de datos y tablas, hablemos de las once tablas específicas que WordPress establece y usa de forma predeterminada:

  • wp_commentmeta : todos los metadatos asociados con los comentarios, como claves y valores, se almacenan en esta base de datos. No contiene metadatos como el autor y la fecha de envío, sino datos misceláneos que WordPress usa ocasionalmente. Estos datos a veces son opcionales o no se utilizan. Se relaciona directamente con wp_comments.

  • wp_comments : esta tabla contiene todos los comentarios realizados en las publicaciones y páginas de WordPress, así como todos los datos asociados, como el autor, su dirección de correo electrónico, la fecha de envío y la publicación donde se dejó el comentario.

  • wp_links : esta base de datos se usa para contener datos de enlaces en las publicaciones de WordPress, pero se retiró hace algunas versiones de WordPress. Aunque todavía está allí, es dudoso que vea que se usa.

  • wp_options : cualquier opción que se haya configurado en el panel de configuración se almacena en esta base de datos.

  • wp_postmeta : al igual que wp_commentmeta, wp_postmeta incluye datos opcionales sobre las publicaciones. A menos que haya un caso de uso específico, es probable que este no se utilice mucho.

  • wp_posts : wp_posts contiene todos los datos sobre las publicaciones y sus datos asociados. Esta tabla se usa mucho y contiene todo el contenido de un sitio.

  • wp_terms : esta tabla almacena contenido como etiquetas y categorías con las que se clasifican las publicaciones.

  • wp_term_relationships : esta tabla es responsable de mantener las relaciones entre las publicaciones y sus categorías y etiquetas asociadas. Aquí también se configura una relación MySQL: la tabla está realmente conectada tanto a las publicaciones como a los términos a través de la tabla wp_term_taxonomy.

  • wp_term_taxonomy : maneja el seguimiento de qué tipo de taxonomías están asociadas con las publicaciones. Se vincula a wp_terms, así como a wp_term_relationships y solo registra asociaciones con categorías, etiquetas, etc.

  • wp_usermeta : otra metatabla, wp_usermeta maneja cualquier metadato opcional asociado con wp_users.

  • wp_users : wp_users contiene todos los datos relacionados con los usuarios de WordPress, incluida información como nombres de usuario, derechos de administrador y contraseñas cifradas.

MySQL puede parecer intimidante al principio, pero con WordPress, las tablas se distribuyen de una manera que no solo tiene mucho sentido sino que también promueve la velocidad y la eficiencia. La próxima vez que esté trabajando en un sitio de WordPress, piense en la estructura de la base de datos MySQL que alimenta el sitio. Una comprensión profunda de la base de datos del sitio puede garantizar que su sitio sea seguro, sólido como una roca y extremadamente eficiente.