ทำความเข้าใจวิธีที่ WordPress ใช้ MySQL

เผยแพร่แล้ว: 2014-09-30

โดยทั่วไป WordPress สามารถแบ่งออกเป็นสองส่วน:

  • ตรรกะและเทมเพลตที่สร้างรูปลักษณ์ของไซต์ WordPress
  • ฐานข้อมูล MySQL ที่เก็บเนื้อหาทั้งหมดและขับเคลื่อนมันทั้งหมด

แต่ MySQL คืออะไร?

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

ขั้นแรก มาพูดถึงว่า MySQL คืออะไร โดยเฉพาะ MySQL เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์หรือ RDBMS เรียกสั้นๆ ว่า RDBMS คือคอนเทนเนอร์ที่ออกแบบมาเพื่อจัดการและเรียกใช้ Structured Query Language (SQL) SQL คือสิ่งที่ขับเคลื่อนฐานข้อมูล — ควบคุมโครงสร้างและรูปแบบของฐานข้อมูล และยังบันทึกการแทรก การลบ การปรับเปลี่ยน และอื่นๆ ที่ดำเนินการบนฐานข้อมูลนั้น

MySQL ทำงานอย่างไร

นั่นเป็นเทคนิคเล็กน้อย แต่ลองย้อนกลับไปพิจารณาว่าฐานข้อมูล SQL จะเป็นอย่างไร

SQL ถูกจัดระเบียบเป็นตารางข้อมูล พูดกว้างๆ ให้คิดว่าตารางเป็นสเปรดชีตใน Excel แถวและคอลัมน์เก็บข้อมูลตามโครงสร้างที่กำหนดไว้ล่วงหน้า อย่างไรก็ตาม ไม่เหมือนกับสเปรดชีต Excel คอลัมน์ (เรียกว่า คีย์ หรือบางครั้ง ฟิลด์ ) ของฐานข้อมูล SQL ถูกกำหนดไว้ล่วงหน้าและจัดหมวดหมู่ไว้ล่วงหน้า

โครงสร้างหรือคอลัมน์ที่กำหนดไว้ของตารางใน WordPress ถูกกำหนดไว้ล่วงหน้า — จะไม่เปลี่ยนแปลงเมื่อเว็บไซต์เติบโตขึ้น เว้นแต่ปลั๊กอินหรือการอัปเดตหลักจะเปลี่ยนแปลงโครงสร้างเหล่านี้โดยเฉพาะ คอลัมน์ไม่ได้กำหนดไว้ล่วงหน้าเท่านั้น แต่ยังกำหนดประเภทของคอลัมน์ก่อนที่จะใส่ระเบียน กล่องคำประเภทตัวเลข (INT สำหรับจำนวนเต็ม) กล่องคำ (TEXT หรือ VARCHAR สำหรับช่องข้อความ) และอื่นๆ (DATETIME สำหรับวันที่และเวลา) ถูกกำหนดไว้ล่วงหน้าในฐานข้อมูล หาก WordPress (หรือแฮ็กเกอร์) พยายามเพิ่มข้อมูลลงในฐานข้อมูลที่ไม่ตรงกับรูปแบบที่กำหนดไว้ล่วงหน้า ฐานข้อมูลจะไม่ยอมรับข้อมูล

คุณสมบัติที่สำคัญอีกประการหนึ่งของฐานข้อมูล SQL มีอยู่ในตัวย่อ RDBMS: คุณลักษณะเชิงสัมพันธ์

ตาราง SQL และแม้แต่คีย์เฉพาะในตารางก็มีความสามารถในการเชื่อมโยงกับตารางและคีย์อื่นๆ ซึ่งช่วยให้ผู้ใช้สร้างฐานข้อมูลที่เกี่ยวข้องกันอย่างแน่นแฟ้น ซึ่งหมายความว่าองค์กรดีขึ้นและมีประสิทธิภาพมากขึ้น

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

เมื่อใช้ฐานข้อมูลเชิงสัมพันธ์ คุณสามารถสร้างตารางทวีตที่มีข้อมูลทั้งหมดเกี่ยวกับทวีตเฉพาะ จากนั้นจึงสร้างตารางผู้ใช้ที่มีข้อมูลทั้งหมดเกี่ยวกับบุคคลที่ส่งทวีตดังกล่าว จากนั้นคุณสามารถเชื่อมโยงคีย์ต่างๆ ในตารางทั้งสองได้ ดังนั้นฐานข้อมูล (และด้วยเหตุนี้คุณ) จึงรู้ว่าผู้ใช้รายใดเชื่อมโยงกับทวีตใด

WordPress ใช้ตารางเชิงสัมพันธ์เพื่อเชื่อมโยงข้อมูลจำนวนมาก ตัวอย่างเช่น ตาราง wp_posts มีข้อมูลที่เกี่ยวข้องทั้งหมดเกี่ยวกับโพสต์เดียวบน WordPress ตาราง wp_comments มีทุกความคิดเห็นที่ทุกคนแสดงบนโพสต์ WordPress แต่ wp_posts และ wp_comments เป็นตารางสองตารางที่แตกต่างกันในฐานข้อมูลเดียวกัน WordPress สร้างความสัมพันธ์ระหว่างคีย์บางคีย์ในตาราง wp_comments และตาราง wp_posts เพื่อให้ WordPress ทราบว่าความคิดเห็นใดเป็นของโพสต์บล็อกใด

โครงสร้างฐานข้อมูลและตารางนี้สร้างขึ้นภายในฐานข้อมูล MySQL เมื่อคุณตั้งค่า WordPress ครั้งแรก จากนั้น WordPress จะจัดการค่าหรือแถวในแต่ละตารางเพื่อให้ไซต์ของคุณทำงานได้

ตัวอย่างเช่น เมื่อคุณสร้างผู้ใช้ใหม่ แถวที่มีข้อมูลทั้งหมดเกี่ยวกับผู้ใช้ (เช่น ชื่อผู้ใช้ รหัสผ่าน และระดับการอนุญาต) จะถูกแทรกลงในตาราง wp_users เมื่อผู้ใช้เข้าสู่ระบบ WordPress จะเข้าถึงฐานข้อมูลและตรวจสอบข้อมูลที่ให้ไว้ที่หน้าจอเข้าสู่ระบบกับฐานข้อมูล หากไม่ตรงกัน การเข้าสู่ระบบจะถูกปฏิเสธ

วิธีที่ MySQL ใช้การแคช

WP ไม่มีการแคช

WordPress & MySQL โดยไม่ต้องแคช

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

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

MySQL เก็บข้อมูลทั้งหมดนี้ไว้ในฐานข้อมูลบนฮาร์ดไดรฟ์ของคอมพิวเตอร์ที่เก็บไว้ นี่เป็นระบบที่ยอดเยี่ยมมากเพราะทนทานต่อความล้มเหลว มีพื้นที่เก็บข้อมูลมากมาย และไม่ทำลายหน่วยความจำของคอมพิวเตอร์ที่กำลังทำงานอยู่ เมื่อเทียบกับฐานข้อมูลอย่าง Redis ซึ่งจัดเก็บทุกอย่างไว้ใน RAM ของคอมพิวเตอร์ที่กำลังใช้งาน MySQL ให้ความเสถียรอย่างมากและขจัดความกังวลเรื่องข้อมูลสูญหาย

อย่างไรก็ตาม ความเสถียรของ MySQL นั้นมาพร้อมกับต้นทุน: ความเร็ว การให้ WordPress เข้าถึงคีย์เดิมในฐานข้อมูลซ้ำแล้วซ้ำเล่าควรถูกมองว่า "แพง" มีค่าใช้จ่ายจำนวนมากในการเข้าถึงฐานข้อมูล ดำเนินการกับดิสก์ นำข้อมูลนั้นกลับมา แล้วแสดงผล
WP Caching

WordPress & MySQL พร้อมแคช หมายเหตุ: โดยทั่วไปเว็บเซิร์ฟเวอร์ MySQL และแคชจะทำงานพร้อมกันบนเซิร์ฟเวอร์เดียวกัน ไดอะแกรมนี้แยกออกเพื่อวัตถุประสงค์ในการอธิบาย

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

ตาราง MySQL สิบเอ็ดตารางของ WordPress

WP3.8-ERD

ตาราง MySQL เริ่มต้นของ WordPress 3.8 รูปภาพมารยาท WordPress Codex ได้รับอนุญาตภายใต้ GPL

ตอนนี้เราเข้าใจแล้วว่าฐานข้อมูลและตารางเหล่านี้ทำงานอย่างไร มาพูดถึงตารางเฉพาะสิบเอ็ดตารางที่ WordPress สร้างขึ้นและใช้โดยค่าเริ่มต้น:

  • wp_commentmeta – ข้อมูลเมตาที่เกี่ยวข้องกับความคิดเห็น เช่น คีย์และค่า จะถูกเก็บไว้ในฐานข้อมูลนี้ ไม่มีข้อมูลเมตาเช่นผู้เขียนและวันที่ส่ง แต่เป็นข้อมูลเบ็ดเตล็ดที่ WordPress ใช้เป็นครั้งคราว ข้อมูลนี้บางครั้งเป็นทางเลือกหรือไม่ได้ใช้ มันเกี่ยวข้องโดยตรงกับ wp_comments

  • wp_comments – ตารางนี้มีความคิดเห็นทั้งหมดเกี่ยวกับบทความและหน้าของ WordPress รวมถึงข้อมูลที่เกี่ยวข้องทั้งหมด เช่น ผู้เขียน ที่อยู่อีเมล วันที่ส่ง และโพสต์ที่แสดงความคิดเห็น

  • wp_links – ฐานข้อมูลนี้ใช้เพื่อเก็บข้อมูลลิงก์ในโพสต์ของ WordPress แต่ได้เลิกใช้ไปแล้วเมื่อบางเวอร์ชันของ WordPress ก่อน แม้ว่าจะยังคงอยู่ แต่น่าสงสัยว่าคุณจะเห็นเครื่องนี้กำลังถูกใช้งานอยู่

  • wp_options – ตัวเลือกใดๆ ที่ตั้งค่าไว้ในแผงการตั้งค่าจะถูกจัดเก็บไว้ในฐานข้อมูลนี้

  • wp_postmeta – เช่นเดียวกับ wp_commentmeta wp_postmeta มีข้อมูลทางเลือกเกี่ยวกับการโพสต์ เว้นแต่จะมีกรณีการใช้งานเฉพาะ กรณีนี้ไม่น่าจะถูกใช้งานอย่างหนัก

  • wp_posts – wp_posts มีข้อมูลทั้งหมดเกี่ยวกับโพสต์และข้อมูลที่เกี่ยวข้อง ตารางนี้มีการใช้งานอย่างหนักและมีเนื้อหาทั้งหมดของเว็บไซต์

  • wp_terms – ตารางนี้เก็บเนื้อหาเช่นแท็กและหมวดหมู่ที่โพสต์ถูกจัดประเภทด้วย

  • wp_term_relationships – ตารางนี้รับผิดชอบในการรักษาความสัมพันธ์ระหว่างโพสต์และหมวดหมู่และแท็กที่เกี่ยวข้อง มีการตั้งค่าความสัมพันธ์ของ MySQL ที่นี่เช่นกัน: ตารางเชื่อมต่อกับทั้งโพสต์และข้อกำหนดผ่านตาราง wp_term_taxonomy

  • wp_term_taxonomy – สิ่งนี้จัดการการติดตามว่าประเภทของอนุกรมวิธานที่เกี่ยวข้องกับโพสต์ มันเชื่อมโยงกลับไปที่ wp_terms เช่นเดียวกับ wp_term_relationships และเพียงแค่บันทึกการเชื่อมโยงกับหมวดหมู่ แท็ก และอื่นๆ

  • wp_usermeta – ตาราง meta อื่น wp_usermeta จัดการข้อมูลเมตาที่เป็นตัวเลือกที่เกี่ยวข้องกับ wp_users

  • wp_users – wp_users มีข้อมูลทั้งหมดที่เกี่ยวข้องกับผู้ใช้ WordPress รวมถึงข้อมูล เช่น ชื่อผู้ใช้ สิทธิ์ของผู้ดูแลระบบ และรหัสผ่านที่เข้ารหัส

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