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