問題描述
我開發了一個與 Wordpress 用户管理集成的客户端的 CRM 插件,併為 wp_usermeta
表下的每個用户存儲了附加信息。
然而,客户的客户數據庫呈指數級增長,現在我們已經上千,這給了 wp_usermeta
幾萬行:在這一點上,我開始擔心這種架構的可擴展性。
有沒有人管理這麼多用户的 Wordpress 方法的經驗?我應該向 wp_users
表添加列,而不是依靠 wp_usermeta
表嗎?在現階段我如何診斷/介紹 Wordpress 和我自己的代碼性能?
我從來沒有在這麼多的數據上工作,而且這個數字越來越多,任何一個指針都是有價值的。
最佳解決方案
表的大小不是真正的問題,您在該表上運行的查詢可能是。
例如,如果您根據存儲在 user-meta 表中的數據選擇用户,那麼該查詢將被高度未優化,因為 meta_value 不是索引字段。在這種情況下,您可能需要添加額外的索引或考慮以不同的方式存儲特定數據,例如使用自定義分類法。
一般來説,您作為 meta 存儲的內容不應該是您根據的專門搜索的內容。這適用於 WordPress 中的所有元表。 Meta 主要設計為由 meta_key 拉出,而不是由 meta_value 拉出。分類法將可能的值限制為一組,並以不同的方式組織信息,因此當”value” 計入您所選擇的內容時,它們會更好。
注意,meta_key 和 meta_value 都是可以選擇的,因為 mySQL 將首先將查詢優化為基於 meta_key,從而減少搜索到 (希望) 可管理限制的數據量。如果即使這是一個問題,您可以通過在索引上使用 meta_key 和 meta_value 的元表添加新索引來 「修復」,但是由於 meta_value 是 LONGTEXT,您需要將該索引的長度限制在合理的範圍內,像 20-30 或者某些東西,這取決於你的數據。請注意,該索引可能遠遠大於實際數據,並將大大增加所需的存儲空間。但是,在這些類型的查詢中,速度會更快。如果這成為一個真正的問題,請諮詢合格的 DBA 。
作為參考,在 WordPress.org 上,我們有大約 1100 萬用户註冊。每個用户的元數量有所不同,每行最少可能有 8 行,也可能是最多約 250 行。用户表約 2.5 GB,usermeta 表約 4 GB 。似乎運行良好,在很大程度上,但每隔一段時間,我們發現一些奇怪的查詢,我們必須去優化。
次佳解決方案
除非您運行自己的查詢而不是使用 API,否則表的大小並不重要,因為 Wordpress 通過表的索引運行查詢,而 MYSQL 應優化此類查詢。每個查詢也會在一個查詢中獲取所有元信息。
如果您堅持使用用户 ID 上的哈希表將用户元表拆分為多個表作為表名,那麼您可能需要為 wp_db 類寫一個替換,以便根據查詢訪問正確的表。如果您有興趣遵循此路徑,請尋找解決方案來處理大量網絡安裝與許多博客。
但是,如果您現在沒有任何性能問題,那麼您可以進一步增長,而不進行任何重大調整。當您開始獲得性能問題時,只需將數據庫移動到一個更快的服務器,這將比 WP 訪問該信息的任何操作更有成本效益。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。