問題描述
我開發了一個與 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。