了解 WordPress 如何使用 MySQL

已发表: 2014-09-30

从广义上讲,WordPress可以分为两个部分:

  • 生成 WordPress 网站外观的逻辑和模板
  • 存储所有内容并为所有内容提供支持的 MySQL 数据库

但是什么是 MySQL?

MySQL 非常强大,但支持 WordPress 的库存数据库也恰好是轻量级和健壮的。 像 WordPress 这样强大的 CMS 的最佳部分之一是它为用户处理所有数据库管理并将其从最终用户中抽象出来。 WordPress 用户,甚至设计师,不必非常熟悉数据库的工作原理。 但是,如果您有兴趣真正了解 WordPress 的工作原理,那么这篇文章适合您。

首先,让我们谈谈MySQL是什么。 具体来说,MySQL是一个关系型数据库管理系统,简称RDBMS。 RDBMS 是设计用于处理和运行结构化查询语言 (SQL) 的容器。 SQL 是数据库的动力——它控制数据库的结构和形式,还记录对该数据库执行的插入、删除、修改等操作。

MySQL是如何工作的?

不过,这有点技术性,所以让我们退后一步,考虑一下 SQL 数据库会是什么样子。

SQL 被组织成信息表。 从广义上讲,将表格视为 Excel 中的电子表格。 行和列根据预定的结构存储信息。 但是,与 Excel 电子表格不同的是,SQL 数据库的列(称为或有时称为字段)是预先预定义和分类的。

WordPress 中表的定义结构或列是预先设置的——它们不会随着站点的增长而改变,除非插件或核心更新专门更改它们。 列不仅是预先定义的,而且它的类型也是在记录放入之前定义的。 诸如数字(INT 表示整数)字框、(TEXT 或 VARCHAR 表示文本字段)和其他类型(DATETIME 表示日期和时间)等类型已在数据库中预设。 如果 WordPress(或黑客)试图向数据库添加与预先指定的模式不匹配的数据,数据库将不会接受该数据。

SQL 数据库的另一个巨大特性可以在 RDBMS 的首字母缩写词中找到:关系特性。

SQL 表甚至表中的特定键都可以与其他表和键相关联。 这允许用户构建彼此紧密相关的数据库,这意味着更好的组织和更高的效率。

假设您想构建一个推文数据库以供稍后查看。 您可以构建一个表格,其中包含有关您已保存的特定推文的信息,例如推文的内容、收藏的数量等。 你还想保存发推文的人的数据——他们的名字是什么,他们有多少粉丝,诸如此类。

使用关系数据库,您可以创建一个包含有关特定推文的所有数据的推文表,然后您可以创建一个包含有关发送相关推文的人的所有信息的用户表。 然后,您可以关联两个表中的键,因此数据库(以及您)知道哪个用户与哪个推文相关联。

WordPress 利用关系表来关联大量数据。 例如,表 wp_posts 包含有关 WordPress 上单个帖子的所有相关数据。 表 wp_comments 包含任何人在 WordPress 帖子上留下的每条评论,但 wp_posts 和 wp_comments 是同一数据库上的两个不同表。 WordPress 在 wp_comments 表和 wp_posts 表中的某些键之间建立关系,以便 WordPress 可以确定哪个评论属于哪个博客文章。

当您最初设置 WordPress 时,此数据库和表结构是在 MySQL 数据库中构建的。 从那里,WordPress 只是操纵每个表中的值或行来使您的网站运行。

例如,当您创建一个新用户时,包含有关该用户的所有数据(例如用户名、密码和权限级别)的行将插入到 wp_users 表中。 当用户登录时,WordPress 会访问数据库并根据数据库检查登录屏幕上提供的信息。 如果它们不匹配,则拒绝登录。

MySQL 如何使用缓存

WP无缓存

没有缓存的 WordPress 和 MySQL。

同样的概念也适用于帖子:当您编写并保存新帖子时,WordPress 会将其保存为 wp_posts 数据库中的一行。 重要的是要注意,反之亦然:当查看网站的人访问包含内容的页面时,WordPress 必须访问数据库,从表中获取数据,然后将其呈现在他们的屏幕上。 对于少数访问者,普通服务器可以很好地处理这种负载。 但是,如果很多人从网站请求内容,WordPress 和数据库将无法跟上所有请求,并且网站可能会折叠。 这就是为什么使用缓存引擎或插件如此重要的原因。

为了再次获得一点技术知识,了解计算成本很重要。 在这种情况下,成本并不意味着花钱或买东西。 这意味着评估对计算速度很重要的几个不同因素,例如时间、可用内存和需要执行的磁盘操作的数量。

MySQL 将所有这些信息存储在存储它的计算机硬盘驱动器上的数据库中。 这是一个非常棒的系统,因为它可以抵抗故障,拥有大量存储空间,并且不会破坏运行它的计算机的内存。 与像 Redis 这样将所有内容存储在运行它的计算机的 RAM 中的数据库相比,MySQL 提供了很大的稳定性并消除了数据丢失的担忧。

然而,MySQL 的稳定性是有代价的:速度。 让 WordPress 不断地反复访问数据库中的相同键应该被视为“昂贵的”。 访问数据库、执行磁盘操作、取回数据然后渲染它需要花费很多成本。
WP缓存

带缓存的 WordPress 和 MySQL。 注意:Web、MySQL 和缓存服务器通常在同一台服务器上同时运行。 出于说明目的,此图将它们分开。

缓存是解决这个问题的好方法。 它需要最终呈现的 HTML 并在短时间内保留它,可能是 30 秒左右。 如果有人请求相同的页面,缓存引擎将向他们提供已经呈现的页面,跳过与数据库交互的整个过程。 这就是为什么在构建网站时安装 WordPress 缓存插件或使用为您处理缓存的托管托管服务至关重要的原因。 例如,如果帖子最终出现在 Reddit 的首页上,您的网站将在所有新流量的压力下折叠,而无需安装缓存。

WordPress 的 11 个 MySQL 表

WP3.8-ERD

WordPress 3.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 数据库的结构。 对站点数据库的透彻了解可以确保您的站点安全、坚如磐石并且极其高效。