वर्डप्रेस usermeta हजारों उपयोगकर्ताओं के लिए स्केलिंग


11

मैंने वर्डप्रेस उपयोगकर्ता प्रबंधन के साथ एकीकृत क्लाइंट के लिए एक सीआरएम प्लगइन विकसित किया है और मैंने wp_usermetaतालिका के तहत प्रत्येक उपयोगकर्ता के लिए अतिरिक्त जानकारी संग्रहीत की है।

हालांकि, ग्राहक का ग्राहक डेटाबेस तेजी से बढ़ रहा है, और हम अब हजारों में हैं , जो हमें कई दसियों हजारों पंक्तियां देता है wp_usermeta: इस बिंदु पर मैं इस वास्तुकला की मापनीयता के बारे में चिंतित होना शुरू कर रहा हूं ।

क्या किसी के पास वर्डप्रेस तरीके से उपयोगकर्ताओं की इतनी मात्रा का प्रबंधन करने का कोई अनुभव है? क्या मुझे एक wp_usersपर निर्भर रहने के बजाय तालिका में कॉलम जोड़ना चाहिए wp_usermeta? मैं इस स्तर पर वर्डप्रेस और अपने स्वयं के कोड प्रदर्शन का निदान कैसे कर सकता / सकती हूं?

मैंने कभी भी इस तरह के डेटा और इस बढ़ती दर पर काम नहीं किया है, और कोई भी सूचक मूल्यवान होगा।

जवाबों:


16

तालिका का आकार वास्तव में समस्या नहीं है, उस तालिका पर आपके द्वारा चलाए जा रहे प्रश्न हो सकते हैं।

उदाहरण के लिए, यदि आप उपयोगकर्ता-मेटा तालिका में संग्रहीत डेटा के आधार पर उपयोगकर्ताओं का चयन कर रहे हैं, तो उस क्वेरी को अत्यधिक अनधिकृत किया जाएगा, क्योंकि meta_value अनुक्रमित फ़ील्ड नहीं है। जिस स्थिति में आपको अतिरिक्त अनुक्रमित जोड़ने या उस विशेष डेटा को एक अलग तरीके से संग्रहीत करने पर विचार करना पड़ सकता है, जैसे कि कस्टम टैक्सोनॉमी के साथ।

आम तौर पर, सामान जिसे आप मेटा के रूप में संग्रहीत करते हैं, कभी भी ऐसा कुछ नहीं होना चाहिए जिसे आप विशेष रूप से आधार पर खोज करेंगे। यह वर्डप्रेस में सभी मेटा टेबल पर लागू होता है। मेटा मुख्य रूप से मेटा_की द्वारा बाहर निकालने के लिए डिज़ाइन किया गया है, मेटा_वल्यू द्वारा नहीं। टैक्सोनॉमी संभव मानों को एक सेट में सीमित करते हैं और जानकारी को अलग तरीके से व्यवस्थित करते हैं, इसलिए वे बेहतर करते हैं जब "मूल्य" के रूप में गिना जाता है कि उसे क्या चुनना है।

ध्यान दें, मेटा_की और मेटा_वल्यू दोनों द्वारा चयन करना आम तौर पर ठीक है, क्योंकि mySQL सबसे पहले मेटा_की पर आधारित क्वेरी को ऑप्टिमाइज़ करेगा, डेटा की मात्रा को कम करके (उम्मीद) प्रबंधनीय सीमा तक खोज करेगा। यदि यहां तक ​​कि यह एक समस्या बन जाती है, तो आप मेटा टेबल पर एक नया सूचकांक जोड़कर इसे "ठीक" कर सकते हैं और दोनों मेटा_की और मेटाऑवल्यू के साथ इंडेक्स पर कर सकते हैं, हालांकि क्योंकि मेटा_वल्यू लॉन्गटैक्स है, आपको उस इंडेक्स की लंबाई को कुछ उचित तक सीमित करने की आवश्यकता है, आपके डेटा पर निर्भर करता है, जैसे 20-30 या कुछ। ध्यान दें कि यह सूचकांक आपके वास्तविक डेटा की तुलना में बहुत अधिक हो सकता है, और आवश्यक रूप से भंडारण स्थान को बढ़ाएगा। हालाँकि, यह उन प्रकार के प्रश्नों पर अधिक तेज़ होगा। एक योग्य डीबीए से परामर्श करें यदि यह कभी भी एक वास्तविक मुद्दा बन जाता है।

संदर्भ के लिए, WordPress.org पर हमारे पास लगभग 11 मिलियन उपयोगकर्ता पंजीकृत हैं। मेटा की मात्रा प्रति उपयोगकर्ता भिन्न होती है, जिसमें संभवतः न्यूनतम 8 पंक्तियाँ होती हैं, और शायद अधिकतम 250-ईश। उपयोगकर्ताओं की तालिका लगभग 2.5 जीबी है, 4 जीबी के आसपास वरमेटा तालिका है। ठीक लगता है, अधिकांश भाग के लिए, लेकिन हर बार थोड़ी देर में हमें कुछ विषम प्रश्न मिलते हैं, जिन्हें हमें ऑप्टिमाइज़ करना पड़ता है।


1
क्या wordpress.org मेटा टेबल को इंडेक्स करता है? और यदि हां, तो क्या आप इसका उदाहरण दे सकते हैं कि यह कैसे कॉन्फ़िगर किया गया है?
dwenaus

1
WordPress.org पर डिफ़ॉल्ट की तुलना में usermeta तालिका में कोई अधिक अनुक्रमण नहीं है। BbPress में उपयोग की जाने वाली एक मेटा टेबल है जहाँ हमने एक अतिरिक्त कुंजी जोड़ी है, फॉर्म की(object_type,meta_key,meta_value(50))
ओटो

धन्यवाद ओटो। क्या आपके पास मेरे Wordpress क्वेरी प्रदर्शन की रूपरेखा / निदान के लिए कोई विशेष टिप है?
सूर्यास्तत्त्व

2
वास्तव में एक वर्डप्रेस संबंधित प्रश्न नहीं है, MySQL प्रोफाइलिंग और इस तरह से अधिक देखें। वर्डप्रेस द्वारा किए गए प्रश्नों और उनके समय को देखने के लिए आप डिबग बार प्लगइन जैसे कुछ सरल टूल का उपयोग कर सकते हैं, लेकिन ये उपकरण अल्पविकसित हैं और एक वास्तविक MySQL प्रोफाइलिंग तंत्र बेहतर होगा। आपको अनुकूलन करने से पहले वास्तविक बाधाओं की पहचान करने की आवश्यकता है।
ओट्टो

5

जब तक आप एपीआई का उपयोग करने के बजाय अपने स्वयं के प्रश्नों को नहीं चला रहे हैं, तब तक तालिका का आकार मायने नहीं रखता है, क्योंकि वर्डप्रेस तालिका के अनुक्रमित द्वारा प्रश्नों को चलाता है और MYSQL इस तरह के प्रश्नों का अनुकूलन करने वाला था। प्रत्येक क्वेरी एक मेटा क्वेरी में सभी मेटा जानकारी भी लाती है।

यदि आप जोर देते हैं कि आप उपयोगकर्ता आईडी पर तालिका नाम के रूप में हैश का उपयोग करके उपयोगकर्ता तालिका को कई तालिकाओं में विभाजित कर सकते हैं, लेकिन तब आपको संभवतः क्वेरी के आधार पर सही तालिका तक पहुंचने के लिए wp_db वर्ग को प्रतिस्थापन लिखना होगा। यदि आप इस मार्ग का अनुसरण करने में रुचि रखते हैं, तो कई ब्लॉगों के साथ बड़े नेटवर्क इंस्टॉल को संभालने के लिए समाधान देखें।

लेकिन अगर आपके पास अब कोई प्रदर्शन समस्या नहीं है, तो आप कोई महत्वपूर्ण समायोजन किए बिना बहुत आगे बढ़ सकते हैं। जब आप प्रदर्शन के मुद्दों को प्राप्त करना शुरू करते हैं, तो बस DB को तेज सर्वर में स्थानांतरित करें, यह किसी भी हेरफेर की तुलना में अधिक लागत प्रभावी होगा जो आप उस जानकारी को WP एक्सेस करने के तरीके से कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.