了解 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 數據庫的結構。 對站點數據庫的透徹了解可以確保您的站點安全、堅如磐石並且極其高效。