Binlerce kullanıcı için WordPress kullanıcı meta ölçeği


11

WordPress kullanıcı yönetimi ile entegre bir istemci için bir CRM eklentisi geliştirdim ve her kullanıcı için ek bilgileri wp_usermetamasanın altında sakladım.

Bununla birlikte, müşterinin müşteri veritabanı katlanarak büyüyor ve şu anda binlerce kişiyiz, bu da bize on binlerce satır veriyor wp_usermeta: bu noktada bu mimarinin ölçeklenebilirliği konusunda endişelenmeye başlıyorum .

WordPress'in bu kadar çok kullanıcıyı yönetme konusunda deneyimi olan var mı? Tabloya wp_usersgüvenmek yerine tabloya sütun eklemeli miyim wp_usermeta? Bu aşamada WordPress'i ve kendi kod performansımı nasıl tanılayabilir / profilleyebilirim?

Hiç böyle bir miktarda veri üzerinde ve bu artan oranda çalışmadı ve herhangi bir işaretçi değerli olurdu.

Yanıtlar:


16

Tablonun boyutu gerçekten sorun değil, bu tabloda çalıştırdığınız sorgular olabilir.

Örneğin, kullanıcı meta tablosunda depolanan verilere dayalı olarak kullanıcı seçerseniz, meta_değer, dizine alınmış bir alan olmadığından bu sorgu son derece optimize edilmeyecektir. Bu durumda, ekstra dizinler eklemeniz veya bu verileri özel bir sınıflandırma gibi farklı bir şekilde depolamayı düşünmeniz gerekebilir.

Genel olarak konuşursak, meta olarak sakladığınız şeyler hiçbir zaman yalnızca özel olarak arayacağınız bir şey olmamalıdır. Bu, WordPress'teki tüm meta tablolarda geçerlidir. Meta, meta_value tarafından değil, esas olarak meta_key tarafından çıkarılacak şekilde tasarlanmıştır. Taksonomiler olası değerleri bir kümeyle sınırlar ve bilgileri farklı şekilde düzenler, böylece "değer" seçtiğiniz gibi sayıldığında daha iyi olur.

Hem meta_key hem de meta_value tarafından seçim genellikle uygundur, çünkü mySQL, sorguyu önce meta_key'e göre optimize edecek ve (umarım) yönetilebilir bir sınıra kadar arama yapılacak veri miktarını azaltacaktır. Bu bile bir sorun haline gelirse, meta tabloya dizinde meta_key ve meta_value ile yeni bir dizin ekleyerek "düzeltebilirsiniz", ancak meta_value LONGTEXT olduğundan, bu dizinin uzunluğunu makul bir şeyle sınırlamanız gerekir, verilerinize bağlı olarak 20-30 gibi bir şey. Bu dizinin gerçek verilerinizden çok, çok daha büyük olabileceğini ve gereken depolama alanını önemli ölçüde artıracağını unutmayın. Ancak, bu tür sorgularda çok daha hızlı olacaktır. Gerçek bir sorun haline gelirse nitelikli bir DBA'ya danışın.

Referans olarak, WordPress.org'da yaklaşık 11 milyon kullanıcımız var. Meta miktarı, kullanıcı başına değişir, muhtemelen en az 8 satır ve belki de en fazla 250 ish'dir. Kullanıcı tablosu 2,5 GB, kullanıcı tablosu 4 GB civarındadır. Çoğunlukla iyi çalışıyor gibi görünüyor, ama arada bir optimize etmek zorunda olduğumuz tuhaf bir sorgu buluyoruz.


1
wordpress.org meta tabloyu dizine ekliyor mu? ve eğer öyleyse, nasıl yapılandırıldığına dair örnekler verebilir misiniz?
dwenaus

1
Usermeta tablosunun WordPress.org üzerinde varsayılandan daha fazla dizine eklenmesi gerekmez. BbPress'te kullanılan ve meta formdan fazladan bir ANAHTAR eklediğimiz bir meta tablo var(object_type,meta_key,meta_value(50))
Otto

Teşekkürler Otto. Wordpress sorgu performansımı profillemek / teşhis etmek için özel bir ipucunuz var mı?
Sunyatasattva

2
Gerçekten WordPress ile ilgili bir soru değil, daha fazla MySQL profili ve benzerlerine bakın. WordPress'in yaptığı sorguları ve zamanlarını görmek için Debug Bar eklentisi gibi bazı basit araçları kullanabilirsiniz, ancak bu araçlar ilkeldir ve gerçek bir MySQL profil oluşturma mekanizması daha iyi olurdu. Optimizasyon yapmadan önce gerçek darboğazları tanımlamanız gerekir.
Otto

5

API kullanmak yerine kendi sorgularınızı çalıştırmadığınız sürece, tablonun boyutu wordpress'in sorguları tablonun dizinleri ile çalıştırması ve MYSQL'in bu tür sorguları optimize etmesi gerektiği önemli değildir. Her sorgu aynı zamanda bir sorgudaki tüm meta bilgileri getirir.

Kullanıcı adı tablosunu, kullanıcı adı üzerindeki bir karma değerini tablo adı olarak kullanarak birkaç tabloya bölebileceğiniz konusunda ısrar ederseniz, sorguya dayalı olarak sağ tabloya erişmek için muhtemelen wp_db sınıfına bir yedek yazmanız gerekecektir. Bu yolu takip etmek istiyorsanız, birçok blog ile büyük ağ kurulumlarını ele almak için çözümler arayın.

Ancak şu anda herhangi bir performans sorununuz yoksa, önemli bir ayarlama yapmadan çok daha fazla büyüyebilirsiniz. Performans sorunları almaya başladığınızda, DB'yi daha hızlı bir sunucuya taşıyın, WP'nin bu bilgilere erişme yolunda yapabileceğiniz herhangi bir manipülasyondan daha uygun maliyetli olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.