WordPress usermeta scaling สำหรับผู้ใช้หลายพันคน


11

ฉันได้พัฒนาปลั๊กอิน CRM สำหรับลูกค้าที่รวมเข้ากับการจัดการผู้ใช้ WordPress และฉันเก็บข้อมูลเพิ่มเติมสำหรับผู้ใช้แต่ละคนภายใต้wp_usermetaตาราง

อย่างไรก็ตามฐานข้อมูลลูกค้าของลูกค้ามีการเติบโตอย่างทวีคูณและตอนนี้เราอยู่ในหลักพันซึ่งทำให้เรามีหลายหมื่นหลายพันแถวในwp_usermeta: ณ จุดนี้ฉันเริ่มกังวลเกี่ยวกับความยืดหยุ่นของสถาปัตยกรรมนี้

ใครบ้างมีประสบการณ์เกี่ยวกับการจัดการจำนวนผู้ใช้ด้วยวิธี WordPress? ฉันควรเพิ่มคอลัมน์ในwp_usersตารางแทนที่จะใช้คอลัมน์wp_usermetaเดียวหรือไม่ ฉันจะวินิจฉัย / โปรไฟล์ WordPress และประสิทธิภาพโค้ดของฉันเองในขั้นตอนนี้ได้อย่างไร

ฉันไม่เคยทำงานกับข้อมูลจำนวนมากและในอัตราที่เพิ่มขึ้นนี้และตัวชี้ใด ๆ จะมีค่า

คำตอบ:


16

ขนาดของตารางไม่ได้เป็นปัญหาจริง ๆ แบบสอบถามที่คุณใช้บนตารางนั้นอาจเป็น

ตัวอย่างเช่นหากคุณกำลังเลือกผู้ใช้ตามข้อมูลที่เก็บไว้ในตารางผู้ใช้เมตาแบบสอบถามนั้นจะไม่ได้รับการเพิ่มประสิทธิภาพสูงเนื่องจาก meta_value ไม่ใช่เขตข้อมูลที่จัดทำดัชนี ในกรณีนี้คุณอาจต้องเพิ่มดัชนีพิเศษหรือพิจารณาจัดเก็บข้อมูลนั้นในลักษณะที่แตกต่างกันเช่นมีการจัดทำอนุกรมวิธานที่กำหนดเอง

โดยทั่วไปแล้วสิ่งที่คุณจัดเก็บเป็นเมตาไม่ควรเป็นสิ่งที่คุณจะต้องค้นหาโดยเฉพาะ สิ่งนี้ใช้กับตารางเมตาทั้งหมดใน WordPress Meta ถูกออกแบบมาเพื่อดึงออกมาโดย meta_key ไม่ใช่ meta_value Taxonomies จำกัด ค่าที่เป็นไปได้สำหรับชุดและจัดระเบียบข้อมูลต่าง ๆ ดังนั้นพวกเขาจะทำได้ดีกว่าเมื่อ "ค่า" นับเป็นสิ่งที่คุณเลือก

หมายเหตุการเลือกโดยทั้ง meta_key และ meta_value นั้นปกติแล้วเพราะ mySQL จะเพิ่มประสิทธิภาพการสืบค้นให้เป็นไปตาม meta_key ก่อนลดปริมาณข้อมูลเพื่อค้นหาเพื่อ จำกัด การจัดการ (หวังว่า) หากสิ่งนี้กลายเป็นปัญหาคุณสามารถ "แก้ไข" ได้โดยเพิ่มดัชนีใหม่ลงในตารางเมตาที่มีทั้ง meta_key และ meta_value ในดัชนีอย่างไรก็ตามเนื่องจาก meta_value เป็น LONGTEXT คุณจำเป็นต้องจำกัดความยาวของดัชนีนั้นเป็นสิ่งที่สมเหตุสมผล เช่น 20-30 หรือบางอย่างขึ้นอยู่กับข้อมูลของคุณ โปรดทราบว่าดัชนีนี้อาจมีขนาดใหญ่กว่าข้อมูลจริงของคุณและจะเพิ่มพื้นที่เก็บข้อมูลที่จำเป็นอย่างมาก อย่างไรก็ตามการสืบค้นประเภทนั้นจะเร็วขึ้นมาก ปรึกษา DBA ที่ผ่านการรับรองหากเป็นปัญหาจริง

สำหรับการอ้างอิงบน WordPress.org เรามีผู้ลงทะเบียนประมาณ 11 ล้านคน จำนวนเมตาจะแตกต่างกันไปตามผู้ใช้โดยอาจมีอย่างน้อย 8 แถวต่อและอาจมีค่าสูงสุดประมาณ 250-ish ตารางผู้ใช้ประมาณ 2.5 GB, ตาราง usermeta ประมาณ 4 GB ดูเหมือนว่าจะทำงานได้ดีส่วนใหญ่ แต่ทุกครั้งในขณะที่เราพบบางคำถามที่เราต้องไปปรับให้เหมาะสม


1
wordpress.org จัดทำดัชนีตารางเมตาหรือไม่ และถ้าเป็นเช่นนั้นคุณสามารถให้ตัวอย่างของวิธีการกำหนดค่า?
dwenaus

1
ตาราง usermeta ไม่มีการจัดทำดัชนีมากกว่าค่าเริ่มต้นใน WordPress.org มีตารางเมตาหนึ่งตารางที่ใช้ใน bbPress ซึ่งเราได้เพิ่มคีย์พิเศษของแบบฟอร์มคือ(object_type,meta_key,meta_value(50))
Otto

ขอบคุณอ็อตโต คุณมีเคล็ดลับเฉพาะสำหรับการทำโปรไฟล์ / การวินิจฉัยประสิทธิภาพการสืบค้น Wordpress ของฉันหรือไม่?
Sunyatasattva

2
ไม่ใช่คำถามที่เกี่ยวข้องกับ WordPress จริงๆให้ดูเพิ่มเติมในโปรไฟล์ของ MySQL และอื่น ๆ คุณสามารถใช้เครื่องมือง่ายๆเช่นปลั๊กอิน Debug Bar เพื่อดูข้อความค้นหาที่ WordPress ทำและเวลาของพวกเขา แต่เครื่องมือเหล่านี้เป็นพื้นฐานและกลไกการทำโปรไฟล์ MySQL จริงจะดีกว่า คุณต้องระบุคอขวดจริงก่อนทำการปรับให้เหมาะสม
อ็อตโต

5

นอกจากว่าคุณกำลังเรียกใช้แบบสอบถามของคุณเองแทนที่จะใช้ API ขนาดของตารางไม่สำคัญเท่าที่ wordpress จะเรียกใช้แบบสอบถามโดยดัชนีของตารางและ MYSQL ควรปรับให้เหมาะสมกับแบบสอบถามชนิดนี้ แต่ละแบบสอบถามจะดึงข้อมูลเมตาทั้งหมดในหนึ่งแบบสอบถาม

หากคุณยืนยันว่าคุณสามารถแยกตารางเมตาผู้ใช้ออกเป็นหลายตารางโดยใช้แฮชใน ID ผู้ใช้เป็นชื่อตาราง แต่คุณอาจต้องเขียนการแทนที่ไปยังคลาส wp_db เพื่อเข้าถึงตารางด้านขวาตามแบบสอบถาม หากคุณสนใจที่จะติดตามเส้นทางนี้ให้มองหาโซลูชันสำหรับการจัดการการติดตั้งเครือข่ายขนาดใหญ่พร้อมกับบล็อกจำนวนมาก

แต่ถ้าคุณไม่มีปัญหาด้านประสิทธิภาพใด ๆ ในตอนนี้คุณสามารถเติบโตได้อีกมากโดยไม่ต้องทำการปรับเปลี่ยนใด ๆ เมื่อคุณเริ่มได้รับปัญหาประสิทธิภาพการทำงานเพียงย้ายฐานข้อมูลไปยังเซิร์ฟเวอร์ที่เร็วกว่านั้นจะมีประสิทธิภาพมากกว่าการจัดการใด ๆ ที่คุณสามารถทำได้เพื่อให้ WP เข้าถึงข้อมูลนั้นได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.