WordPress解析之数据库
2019獨角獸企業重金招聘Python工程師標準>>>
WordPress已經到了3.2.1版了,不再單純是一個博客系統了,逐步走向了CMS方向。這樣一個功能強大的程序,數據僅僅只有10個表,可見WordPress深厚的功底。
我對WordPress的數據庫表做了一個簡單的分析,版本是3.2.1,簡單的分享一下。
WordPress官方有一個關于數據庫的說明文檔:
http://codex.wordpress.org/zh-cn:數據庫描述
WordPress操作數據庫主要是通過一個封裝好的DB類來實現的,具體可以查看includes目錄下的wp-db.php文件。
良好的頭部注釋習慣:
/**
* WordPress DB Class
*
* Original code from {@link http://php.justinvincent.com Justin Vincent (justin@visunet.ie)}
*
* @package WordPress
* @subpackage Database
* @since 0.71
*/
WordPress核心的數據庫表包括下面10個:
| wp_comments | wp_links | wp_options | wp_postmeta | wp_posts |
| wp_term_relationships | wp_term_taxonomy | wp_terms | wp_usermeta | wp_users |
如果有使用WordPress自帶的防Spam插件akismet的話,會自動創建一個wp_commentmeta表,關于垃圾評論的相關“案底”都是這在這表中,這個表不屬于基本表的范圍。
按照表存儲的信息類型,可以分為以下幾類:
- 用戶信息表:包括wp_users表和wp_usermeta
- 鏈接信息表:包括wp_links表
- 文章信息表:包括wp_posts、wp_postmeta、wp_comments
- 分類標簽表:包含了對分類,鏈接分類,標簽的管理,包括wp_terms,wp_term_relationships和wp_term_taxonomy表
- 全局設置表:包括wp_options表。
用戶信息表wp_users和wp_usermeta,主要存儲系統用戶的相關信息,兩個表是通過user的id進行關聯的。wp_users主要存儲的內容包括:登錄名、密碼、昵稱、Email、URL、用戶狀態、用戶顯示名稱等,應該說是最最基本的一些信息。wp_usermeta主要是存儲用戶自定義的相關資料,如權限等,所有通過網站后臺:用戶->我的個人資料路徑設置的信息都存儲在這個表中。
鏈接信息表wp_links,存儲友情鏈接的相關資料,是最簡單的一個表,與其他表基本沒有什么關聯。
文章信息表,是WordPress的核心,網站的所有文章都是保存在這幾個表中wp_posts、wp_postmeta、wp_comments,分別是文章內容,文章屬性,文章評論。
wp_posts是文章內容表,不過需要注意的是,這個表中存儲的內容不僅僅是發表的博文內容,還包括公告、導航菜單、單頁面、文章附件等內容,是通過post_type這個字段來進行區分的,目前所知的有如下幾種類型:post-博文、page-單頁面、nav_menu_item-導航菜單項、attachment-文章附件、bulletin-公告。當然,自動保存的那些文章也是在這里面了,通過post_status字段進行標識,publish表示公開的文章,draft表示文章草稿,inherit表示繼承,一般用于附件。
wp_postmeta存儲的是文章的一些屬性,表結構很簡單,只有4個字段,其中meta_key是用來標識這個屬性的用途,包括附件、插件、文章等等很多的屬性。這個表也是很容易產生冗余的一個表,如meta_key為 '_edit_lock' 或者 '_edit_last' 或者 '_wp_old_slug' ,建議定期清理,清理的sql語句如下:
wp_comments存儲的是文章的評論內容,其實WordPress自身將很多基礎的信息都存儲下來了,例如評論者瀏覽器、IP等,所有后期如果有相關的插件直接調用即可,評論表中有個字段是“user_id”,一般如果為0,即為非網站用戶留言,不為0,則是對應用戶表中的id。還有比較重要的兩個字段是 comment_post_ID 和 comment_approved,前一個用來指示這條評論隸屬于哪一篇文章,后一個用來記錄審核狀況。
關系最為復雜的三個表是wp_terms,wp_term_relationships和wp_term_taxonomy。在 WordPress 2.2 及以前的版本中是沒有這三個表的,代之的是 wp_categories、wp_post2cat 和 wp_link2cat 這三個表。對數據庫進行重新設計的原因是,在 2.2 版和之前的版本,post 和 link 和 category 的關系都是通過各自單獨的表來記錄的。而在 2.3 版中加入了 tag 的支持,WordPress 把 post、link、tag 的分類都抽象成了統一的形式,用新的三個表來記錄這些信息。
wp_terms用于存儲標簽、文章分類、鏈接分類的基本信息,如名稱、簡寫等。
wp_term_taxonomy是對wp_terms的補充,如某一個term的類型,由taxonomy字段進行標識,link_category表示的是鏈接分類,category表示文章分類,post_tag表示文章標簽。還有相關的信息,如父節點、統計信息、描述等。
wp_term_relationships是一張映射表,object_id是與不同的對象關聯,例如wp_posts中的ID(wp_links中的link_id)等,term_taxonomy_id就是關聯wp_term_taxonomy中的term_taxonomy_id。
這樣可以看到,標簽、分類的查詢是非常耗時的,主要是因為關系比較復雜,涉及到三張表。
wp_options就比較簡單了,就是一些全局的設置項,如主題、插件狀態等信息。
實體數據庫中的基本表就是上述10個表,如有不正確的地方敬請指正。
轉載于:https://my.oschina.net/u/855386/blog/355923
總結
以上是生活随笔為你收集整理的WordPress解析之数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL InnoDB 锁表与锁行
- 下一篇: MySQL主从复制(Master-Sla