- การจัดทำดัชนีทำงานใน Magento อย่างไร
- มันทำอะไรกันแน่?
- ทำไมถึงต้องมี?
คำตอบ:
มีดัชนีชนิดต่าง ๆ ใน Magento
ตัวจัดทำดัชนีทั้งหมดอยู่ที่นั่นเพื่อทำให้สิ่งต่าง ๆ ทำงานได้เร็วขึ้น
ฉันจะครอบคลุมที่นี่เพียงไม่กี่คน
ดัชนี
คงที่มี 2 ดัชนีดังกล่าว หนึ่งสำหรับหมวดหมู่และอีกหนึ่งสำหรับผลิตภัณฑ์
ตามค่าเริ่มต้นหมวดหมู่และเอนทิตีผลิตภัณฑ์ (และลูกค้าและที่อยู่ลูกค้า แต่ไม่สำคัญในสถานการณ์นี้) เป็นเอนทิตีEAV นี่เป็นสิ่งที่ดีมากสำหรับการเพิ่มความสามารถ แต่มันเป็นนักฆ่าประสิทธิภาพเพราะเพื่อให้ได้รับค่าทั้งหมดสำหรับคุณลักษณะทั้งหมดที่คุณต้องการจำนวนมากเข้าร่วมหรือหลายแบบสอบถาม
นี่คือที่ซึ่งตัวสร้างดัชนีแบนเข้ามาเล่น
มันแปลงโครงสร้าง EAV เป็นโครงสร้างแบบแบน ฉันหมายความว่ามันสร้างตาราง (หนึ่งสำหรับแต่ละมุมมองร้านค้าใน Magento) ที่มีหนึ่งคอลัมน์ที่สอดคล้องกับแอตทริบิวต์ ทำให้การเลือกเร็วขึ้น สำหรับหมวดหมู่คุณลักษณะทั้งหมดจะถูกแปลงเป็นคอลัมน์ตาราง สำหรับผลิตภัณฑ์เฉพาะรายการที่คุณทำเครื่องหมายว่า 'ใช้ในรายการผลิตภัณฑ์' เนื่องจากคุณสามารถขายผลิตภัณฑ์ทุกประเภทที่มีคุณลักษณะที่แตกต่างกันและการสร้างตารางหนึ่งด้วยคอลัมน์ gazillion อาจไม่สามารถทำได้
นอกจากนี้ผลิตภัณฑ์บางอย่างอาจถูกปิดใช้งานหรืออาจไม่ได้อยู่ในเว็บไซต์บางแห่งและไม่จำเป็นต้องรวมไว้ในรายการเพื่อค้นหา สิ่งเหล่านี้จะถูกยกเว้นโดยตัวจัดทำดัชนี
ตารางแบนที่สร้างขึ้นจะใช้สำหรับการอ่านข้อมูลใน fronend ส่วนแบ็คเอนด์ยังคงใช้โครงสร้าง EAV
ดัชนีการค้นหาแคตตาล็อก
คุณสามารถค้นหาผลิตภัณฑ์โดยใช้ค่าคุณลักษณะมากมาย บางส่วนอาจไม่รวมอยู่ในตารางแบนที่สร้างขึ้นโดยตัวสร้างดัชนีแบบเรียบ ดัชนีนี้เติมในตารางที่มีค่าแอตทริบิวต์ที่สามารถค้นหาได้สำหรับผลิตภัณฑ์ดังนั้นจึงง่ายต่อการค้นหาโดยอิงตามคำหลัก การมีข้อมูลทั้งหมดในตารางเดียว (หรือหนึ่งช่อง) ทำให้สามารถใช้การค้นหาข้อความแบบเต็มและได้ผลลัพธ์ที่เกี่ยวข้อง
ราคาสินค้า
ราคาของผลิตภัณฑ์อาจได้รับผลกระทบจากตัวแปรมากมาย ตัวอย่างเช่นกลุ่มลูกค้าเว็บไซต์กฎส่วนลดแคตตาล็อก
เช่นเดียวกับข้างต้นการรับผลิตภัณฑ์ที่มีราคาจะหมายถึงการเข้าร่วมจำนวนมากหรือการเลือกหลายรายการ นอกจากนี้ผลิตภัณฑ์มัดมีระบบการกำหนดราคาที่แปลก ตัวสร้างดัชนีนี้รวบรวมข้อมูลในบางตาราง ( catalog_product_index_price_*
) และทำให้การเลือก (การเรียงลำดับและการกรอง) ง่ายขึ้นมาก
แคตตาล็อก url Rewrites
สิ่งนี้จะทำความสะอาดกฎการเขียน url ใหม่โดยการตั้งค่าว่า url ใดสอดคล้องกับผลิตภัณฑ์หรือหมวดหมู่ใด วิธีนี้ง่ายกว่าสำหรับระบบภายในของการจัดการ URL เพื่อตัดสินใจว่าควรดูหน้าใดเมื่อเรียก URL ที่ไม่ได้มาตรฐาน แทนที่จะค้นหาคีย์ผลิตภัณฑ์และหมวดหมู่ URL ทั้งหมดจะค้นหาในตารางเดียว
ผลิตภัณฑ์หมวดหมู่
ในวีโอไอพีคุณสามารถตั้งค่าแอตทริบิวต์หมวดหมู่ที่ชื่อว่า 'Is Anchor' เป็นจริงหรือเท็จ หากเป็นจริงก็หมายความว่าหมวดหมู่ที่เป็นปัญหาจะแสดงรายการผลิตภัณฑ์ทั้งหมดจากหมวดหมู่ย่อย อีกครั้งการพิจารณาเรียลไทม์นี้จะใช้ทรัพยากรมากกว่าเพียงแค่อ่านหนึ่งตาราง ตัวสร้างดัชนีนี้สร้างการเชื่อมโยงระหว่างผลิตภัณฑ์และหมวดหมู่ตามการเชื่อมโยงที่คุณตั้งไว้ในส่วนหลังและการตั้งค่าสถานะ 'Is Anchor' ในหมวดหมู่
สถานะสต็อก
สำหรับผลิตภัณฑ์ที่เรียบง่ายมันง่าย พวกเขาสามารถอยู่ในสต็อกหรือหมด แต่สำหรับกำหนดค่าจัดกลุ่มและมัดนั้นไม่ใช่เรื่องง่าย พวกเขาสามารถมีในสต็อกหรือหมดสต็อกขึ้นอยู่กับผลิตภัณฑ์เด็กที่เกี่ยวข้องกับผลิตภัณฑ์หลัก อีกครั้ง (ฉันแค่ทำซ้ำตัวเองที่นี่) การได้รับสถานะของพวกเขาตามเวลาจริงจะหมายถึงคำถามจำนวนมาก
คุณลักษณะของผลิตภัณฑ์
อันนี้รวบรวมคุณสมบัติทั้งหมดที่สามารถใช้ในการนำทางแบบเลเยอร์ด้วยเหตุผลเดียวกัน มีทั้งหมดในที่เดียวเพื่อการอ่านที่เร็วขึ้น
การรวมแท็ก
ฉันไม่รู้ว่ามันทำอะไร ฉันไม่เคยใช้แท็กในโครงการสดจริง
ไม่สามารถรับเครดิตสำหรับสิ่งนี้เนื่องจากนำมาจากโพสต์ต้นฉบับที่: https://stackoverflow.com/questions/4945307/can-someone-explain-magentos-indexing-feature-in-detail
การจัดทำดัชนีของ Magento คล้ายกับการจัดทำดัชนีระดับฐานข้อมูลเท่านั้น ในฐานะที่เป็นแอนตันสหรัฐฯมันเป็นกระบวนการของการทำให้เป็นปกติเพื่อให้เว็บไซต์ทำงานได้เร็วขึ้น ให้ฉันพยายามอธิบายความคิดบางอย่างที่อยู่เบื้องหลังโครงสร้างฐานข้อมูล Magento และทำไมการจัดทำดัชนีจำเป็นต้องมีความเร็ว
ในฐานข้อมูล MySQL "ทั่วไป" ที่มากขึ้นตารางสำหรับจัดเก็บผลิตภัณฑ์แคตตาล็อกจะมีโครงสร้างดังนี้:
PRODUCT:
product_id INT
sku VARCHAR
name VARCHAR
size VARCHAR
longdesc VARCHAR
shortdesc VARCHAR
... etc ...
สิ่งนี้รวดเร็วสำหรับการดึงข้อมูล แต่ทำให้เกิดปัญหาพื้นฐานสำหรับซอฟต์แวร์อีคอมเมิร์ซชิ้นหนึ่ง: คุณจะทำอย่างไรเมื่อคุณต้องการเพิ่มคุณสมบัติเพิ่มเติม? ถ้าคุณขายของเล่นและแทนที่จะเป็นคอลัมน์ขนาดคุณต้องมี age_range คุณสามารถเพิ่มคอลัมน์อื่นได้ แต่ควรชัดเจนว่าในร้านค้าขนาดใหญ่ (คิดว่า Walmart เป็นต้น) สิ่งนี้จะส่งผลให้แถวที่ว่างเปล่า 90% และพยายามบำรุงรักษาแอตทริบิวต์ใหม่นั้นเป็นไปไม่ได้
เพื่อต่อสู้กับปัญหานี้วีโอไอพีจึงแยกตารางออกเป็นหน่วยย่อย ๆ ฉันไม่ต้องการสร้างระบบ EAV ใหม่ทั้งหมดในคำตอบนี้ดังนั้นโปรดยอมรับรูปแบบที่เรียบง่ายนี้:
PRODUCT:
product_id INT
sku VARCHAR
PRODUCT_ATTRIBUTE_VALUES
product_id INT
attribute_id INT
value MISC
PRODUCT_ATTRIBUTES
attribute_id
name
ตอนนี้เป็นไปได้ที่จะเพิ่มคุณสมบัติตามที่ต้องการโดยป้อนค่าใหม่ลงใน product_attributes แล้วใส่บันทึกที่อยู่ติดกันใน product_attribute_values นี่เป็นสิ่งที่วีโอไอพีทำ (ด้วยความเคารพเล็กน้อยสำหรับประเภทข้อมูลกว่าที่ฉันแสดงที่นี่) ที่จริงแล้วตอนนี้ไม่มีเหตุผลที่สินค้าสองรายการจะมีฟิลด์เหมือนกันเลยดังนั้นเราจึงสามารถสร้างประเภทผลิตภัณฑ์ทั้งหมดด้วยชุดคุณลักษณะที่แตกต่างกัน!
อย่างไรก็ตามความยืดหยุ่นนี้มาพร้อมกับราคา ถ้าฉันต้องการหาสีของเสื้อในระบบของฉัน (เป็นตัวอย่างเล็กน้อย) ฉันต้องค้นหา:
วีโอไอพีเคยทำงานเช่นนี้มาก่อน แต่มันก็ช้ามาก ดังนั้นเพื่อให้ได้ประสิทธิภาพที่ดีขึ้นพวกเขาก็ประนีประนอม: เมื่อเจ้าของร้านได้กำหนดคุณลักษณะที่พวกเขาต้องการให้ไปข้างหน้าและสร้างตารางขนาดใหญ่ตั้งแต่ต้น เมื่อมีบางสิ่งเปลี่ยนแปลงให้ทำออกมาจากอวกาศและสร้างใหม่อีกครั้ง ด้วยวิธีนี้ข้อมูลจะถูกจัดเก็บไว้ในรูปแบบที่ยืดหยุ่นของเราเป็นหลัก แต่สอบถามจากตารางเดียว
ตารางการค้นหาที่เกิดขึ้นเหล่านี้คือ "ดัชนี" ของวีโอไอพี เมื่อคุณทำดัชนีอีกครั้งคุณจะระเบิดตารางเก่าและสร้างใหม่อีกครั้ง
หวังว่าจะอธิบายสิ่งต่าง ๆ เล็กน้อย!
nuke it from space
, nice :)
Magento เป็นระบบที่ค่อนข้างทรงพลังและซับซ้อน อนุญาตให้ทำงานกับข้อมูลจำนวนมาก แต่เมื่อฐานข้อมูลเต็มไปด้วยข้อมูลจำนวนมากมันจะหนักและช้า Magento ใช้ดัชนีเพื่อแก้ปัญหานี้ ดัชนีเป็นตารางฐานข้อมูลเพิ่มเติมที่มีข้อมูลแบบแฟลตบางรายการซึ่งช่วยให้สามารถจัดระเบียบการตอบสนองอย่างรวดเร็วจากฐานข้อมูล
ตามค่าเริ่มต้นระบบหลักจะอัพเดตดัชนีในการบันทึกของแต่ละรายการ แต่ในบางกรณีคุณจำเป็นต้องทำด้วยตนเองเช่นบางประเภทแอ็คชั่นจำนวนมาก ฯลฯ คุณสามารถอัพเดตดัชนีได้ตลอดเวลาจากแบ็กเอนด์ผู้ดูแลระบบ (Admin-> ระบบ -> การจัดการดัชนี) แต่บางครั้งก็ทำให้เกิดปัญหา
ตัวอย่างเช่นหากคุณมีผลิตภัณฑ์ 10k + และหมวดหมู่จำนวนมากการสร้างดัชนีใหม่ 'แคตตาล็อก url rewrite' อาจใช้เวลาหลายชั่วโมง จากนั้นสคริปต์ PHP สามารถหยุดพักได้เนื่องจากเกิน max_execution_time มีวิธีแก้ไขปัญหาต่าง ๆ โดยการเรียกใช้กระบวนการ reindex จากบรรทัดคำสั่ง