ทางออกถาวรสำหรับปัญหาการจัดทำดัชนีทั่วไป


23

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

เรากำลังมองหาวิธีการแก้ปัญหาอย่างถาวรสำหรับปัญหานี้ในขณะที่เราทำงานในโครงการที่มีสถานการณ์ที่แตกต่างกันเช่นการปรับปรุงผลิตภัณฑ์ทุกวันหรือนำเข้าผลิตภัณฑ์จากฟีดอื่น ๆ ทุกวัน

ใครก็ตามที่มีวิธีปฏิบัติที่ดีที่สุดด้วยวิธีนี้หรือวิธีแก้ปัญหาบางอย่างโปรดแบ่งปันพวกเขาที่จะได้รับการชื่นชมมาก


ฉันเสียเวลาไปกับวีโอไอพีมาเป็นเวลาหนึ่งปีและมีส่วนขยายรวมถึงสถาปัตยกรรมข้อมูลที่ไม่มีประสิทธิภาพและงี่เง่าที่ทำให้ไซต์อีคอมเมิร์ซที่มีขนาด 10K รวมทั้งผลิตภัณฑ์อึมครึม คำเตือนเหล่านี้ทั้งหมดควรได้รับการเริ่มต้นเพื่อดู Magento CE วีโอไอพีต้องไปที่ศาลเพื่อเสียเวลาหลายพันชั่วโมง เพียงให้ฐานข้อมูลทำการทำดัชนีอย่าทำงานของฐานข้อมูล ฉันแนะนำว่าแทนที่จะเสียเงินไปกับเซิร์ฟเวอร์เฉพาะและจากชั่วโมงทำงานที่ไม่ต้องนอนหลับข้ามคืนคุณควรย้ายไปที่แพลตฟอร์มอีคอมเมิร์ซที่โฮสต์หรือโอเพ่นซอร์สที่ใช้เซิร์ฟเวอร์ MS SQL
semiprecious.com

คุณเคยคิดบ้างไหมว่าบางทีคุณไม่พบส่วนขยายที่ถูกต้องหรือการกำหนดค่าเซิร์ฟเวอร์ที่ถูกต้อง หากซอฟต์แวร์บางตัวไม่ตรงกับความต้องการของคุณไม่ได้แปลว่ามันไร้ประโยชน์ ฉันได้รับขนมปังของฉัน (และเบียร์) เป็นเวลา 5 ปีที่ผ่านมาจาก Magento และฉันก็มีลูกค้าที่พึงพอใจมากมายเช่นกัน บางแห่งมีแคตตาล็อกมากกว่า 10k
Marius

พวกเขาถูกต้องเนื่องจากวิธีการที่ CE ใช้งานการบำรุงรักษาข้อมูลเป็นปัญหากับ 10 ถึง 100 ถึงพัน skus EE ดีกว่าเนื่องจากมีการอัพเดตการทำดัชนี แต่ทำเพื่อ บริษัท รายได้ที่มีมูลค่าหลายล้านเหรียญ คุณสามารถโยนโฮสต์ได้ แต่คุณจะทำให้ ROI ของคุณติดลบ โซลูชันที่เราใช้นั้นเป็นกระบวนการที่ผู้เชี่ยวชาญและเดลต้าอัปโหลดคล้ายกับโซลูชันเช่นการใช้ SAP & Walmart รวมกับโซลูชันการกำหนดราคาพิเศษ (ATG-esque) ซึ่งข้ามปัญหาการจัดทำดัชนี (fx & inline margin / แอตทริบิวต์ recalcs) รวมกับคลัสเตอร์ โฮสติ้ง คำตอบง่าย ๆ วีโอไอพีไม่ได้ออกแบบมาอย่างเหมาะสม

คำตอบ:


31

สิ่งสำคัญคือการเข้าใจว่าดัชนีใดช้าและทำไม

ความซับซ้อนของแคตตาล็อกและสถาปัตยกรรมการจัดเก็บในท้ายที่สุดจะกำหนดระยะเวลาที่จะใช้ดัชนี re - รวมกับโครงสร้างพื้นฐาน

  • หากคุณมีผลิตภัณฑ์ 50,000 รายการและมุมมองร้านค้า 10 แห่งคุณสามารถรับประกันได้ว่าแถวคู่ล้านแถวcatalog_url_rewriteจะใช้เวลาในการประมวลผล

  • หากคุณมี 100 ผลิตภัณฑ์ แต่คุณลักษณะ 5,000 คุณสามารถรับประกันcatalog_attributesหรือcatalog_product_flatตารางจะใช้เวลาในวัยที่จะสร้างหรือตกแบนบนใบหน้าของมัน

  • หากคุณมีผลิตภัณฑ์ 1,000 รายการ แต่มีแอตทริบิวต์ที่ค้นหาได้ 500 รายการคุณcatalog_fulltext_searchจะต้องใช้เวลาในการค้นหา

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

  • การเพิ่มส่วนหน้าแคชจะไม่ช่วยอะไรเลย
  • การขว้างฮาร์ดแวร์มากขึ้นในสถานการณ์อาจ
  • การระบุขนาด / ความซับซ้อนของแคตตาล็อกจะช่วยได้
  • การใช้เครื่องมือทำดัชนีของบุคคลที่สามจะช่วยได้
  • การจัดทำดัชนีภายนอกบางอย่าง (เช่นการค้นหา> SOLR) จะช่วยได้

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


8

TL; DR

ไม่มีวิธีแก้ปัญหากระสุนเงิน มีวิธีแก้ไขปัญหาบางอย่างที่ฉันแนะนำSonassi_Fastsearchindex- แต่นั่นเป็นการค้นหาแคตตาล็อกโดยเฉพาะ

บางทีการปิดใช้งานการอัปเดตดัชนีเกี่ยวกับการบันทึก - การตั้งเวลาให้ทำงานข้ามคืน - จะช่วยบรรเทาบ้าง เมื่อรวมกับการเพิ่มแคช - memcached, Redis, APC - และแคชแบบเต็มหน้าเช่น Varnish (ถ้าคุณใช้ CE) อาจช่วยให้คุณเริ่มต้นได้ หากคุณวางแผนที่จะใช้วานิชดูที่Nexcess_Turpentinegithub เพื่อเริ่มต้นอย่างรวดเร็ว

ข้อมูลมากกว่านี้

ปัญหาการจัดทำดัชนี - เฉพาะ catalog_url_rewrites - เป็นที่รู้จักและจัดทำเอกสารในชุมชน Magento จัดการสิ่งเหล่านี้ในรุ่น Enterprise เพราะเป็นลูกค้าที่ได้รับผลกระทบมากที่สุด ลูกค้า EE จำนวนมากมีผลิตภัณฑ์ 10k + และมุมมองร้านค้าหลายเว็บไซต์ ฯลฯ

อย่างไรก็ตามหากคุณมีแคตตาล็อกจำนวนมากและมีคุณสมบัติจำนวนมากคุณอาจพบว่าตัวเองอยู่ในตำแหน่งที่การจัดทำดัชนีจะใช้เวลานาน - โดยเฉพาะ catalog_url_rewrite, product_flat - ในกรณีนี้คำแนะนำของฉันคือไม่แก้ไขดัชนีรันไทม์ความยาว แต่จะoffload การประมวลผลบางอย่างที่จะช่วยให้กล่องที่จะใช้จ่ายรอบการทำงานการจัดทำดัชนีมากกว่าการให้บริการเนื้อหา

คำถามที่ถามตัวเอง:

  • ฉันสูญเสียธุรกิจเนื่องจากปัญหาการจัดทำดัชนีหรือไม่
  • ฉันกำลังสูญเสียผลผลิตเนื่องจากปัญหาการจัดทำดัชนีหรือไม่
  • ฉันมีความเสี่ยงต่อการสูญเสียการแปลงหรืออัตราการแปลงของฉันเป็นทุกข์หรือไม่?
  • ลูกค้าของฉันมีความเสี่ยงที่จะซื้อสินค้าหมดซึ่งเป็นผลโดยตรงของดัชนีที่ไม่สอดคล้องกัน (สินค้าคงคลัง ฯลฯ )
  • กฎการกำหนดราคาแคตตาล็อกของฉันเป็นส่วนหนึ่งของธุรกิจหลักของฉันหรือไม่
  • อัตรา Conversion บนเว็บไซต์ของฉันสูงกว่าเกณฑ์ปกติ (8-10%) หรือไม่ซึ่งได้ประโยชน์จากการจัดทำดัชนีที่ดีกว่า

ไม่มีวิธีแก้ปัญหากระสุนเงินสำหรับปัญหานี้ - ในฐานะผู้ให้บริการโซลูชันคุณควรช่วยลูกค้าในการตัดสินใจว่าจะปรับปรุงการขายและธุรกิจให้ดีที่สุดในขณะที่ยังคงต้นทุนค่าใช้จ่ายต่ำ

ทางเลือก

ลดการค้นหาแคตตาล็อกและเลเยอร์ nav ไปที่ Solr

ไต่ระดับแนวนอน เพิ่มเซิร์ฟเวอร์ Apache / nginx เซิร์ฟเวอร์เพิ่มเติม = ปริมาณงานพร้อมกันมากขึ้น นี่ไม่ใช่ 1: 1 Nexcess มี whitepaper ที่ยอดเยี่ยมเกี่ยวกับประสิทธิภาพและการกำหนดค่า Apache ที่นี่: http://www.nexcess.net/magento-best-practices-whitepaper

และถ้าคุณเลือกที่จะไปกับวานิช - จำไว้ว่า:

ป้อนคำอธิบายรูปภาพที่นี่


เราขอขอบคุณอุปกรณ์ประกอบฉาก แต่การจัดทำดัชนีใหม่ไม่เกี่ยวข้องกับการแคชหน้า มันเป็นการดำเนินงานส่วนหลังทั้งหมด การลดโหลดส่วนหน้าจะป้องกันไม่ให้ดัชนีใหม่ใช้เวลานาน แต่จะไม่ทำให้เร็วขึ้น
Ben Lessani - Sonassi

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

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

เรามีผลิตภัณฑ์เพียงไม่กี่ร้อยเท่านั้นและยังคงใช้เวลาหลายนาทีในการบันทึกผลิตภัณฑ์แบบง่ายบน Magento 1.7 และฉันจ่ายมากกว่า $ 500 ต่อเดือนสำหรับเซิร์ฟเวอร์ Rackspace โดยเฉพาะ ฉันไม่แน่ใจว่าจะเริ่มต้นอย่างไร แต่ฉันสงสัยว่าบางดัชนีอาจเสียหาย ใครสามารถแนะนำที่ปรึกษาวีโอไอพีที่ดี?
Max Hodges

5

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

ฉันสร้างสำเนาใหม่ของ shell / indexer.php> shell / myindexer.php

ปรับแต่ง shell / myindexer.php รอบ ๆ บรรทัดที่ 154

} else if ($this->getArg('reindex') || $this->getArg('reindexall')) {

ไปยัง

} else if ($this->getArg('reindex') || $this->getArg('reindexall')  || $this->getArg('reindexallrequired') ) {

และเพิ่มการตรวจสอบนี้รอบ ๆ บรรทัด 166

//reindex only if required
if( $this->getArg('reindexallrequired') && $process->getStatus() == Mage_Index_Model_Process::STATUS_PENDING )
    continue;

ก่อน

$startTime = microtime(true);
$process->reindexEverything();
$resultTime = microtime(true) - $startTime;
Mage::dispatchEvent($process->getIndexerCode() . '_shell_reindex_after');

จากนั้นฉันก็เพิ่มเชลล์สคริปต์ใหม่ลงใน cpanel cron เพื่อให้ทำงานในทุกๆ 5 นาที

/home/public_html/shell/indexer.php --reindexallrequired >/dev/null

เชลล์สคริปต์ดังกล่าวทำงานทุก ๆ 5 นาทีและทำการทำดัชนีใหม่เฉพาะกระบวนการที่จำเป็นต้องมีการทำดัชนีใหม่ซึ่งจะช่วยลดความเสี่ยงของการโหลดจำนวนมากไปยังเซิร์ฟเวอร์ cpu รวมถึงกระบวนการทำดัชนีใหม่ทั้งหมดนั้นรวดเร็วมาก หากไม่มีกระบวนการใดต้องการการทำดัชนีใหม่ก็จะไม่เรียกใช้กระบวนการทำดัชนีใหม่ อย่าลืมวางโหมดการทำดัชนีใหม่ไว้ที่ "Update on Save" ในหน้าการจัดการดัชนี หากคุณไม่ทราบคุณสามารถรับตัวเลือกนี้ในการดำเนินการ> เปลี่ยนโหมดดัชนีข้างปุ่มส่ง


@changeling ยินดีต้อนรับ ฉันดีใจที่มันคุ้มค่ากับคุณ
rbncha

ฉันได้รวมสิ่งนี้ไว้ในสคริปต์ของฉันในกรณีที่ทุกคนพบว่ามีประโยชน์: gist.github.com/steverobbins/ …
Steve Robbins

4

จะเป็นการง่ายกว่าถ้าคุณให้ข้อมูลเพิ่มเติม (ขนาดสินค้าคงคลังผู้เยี่ยมชมเครื่องจักร) แต่เป็นไปได้:

  • เราใช้Sonassi_Fastsearchindexส่วนขยายสำหรับดัชนีการค้นหาแคตตาล็อก แม้ว่ามันจะเป็นเพียงแค่การจัดทำดัชนีหัวเรื่องคำอธิบายและ sku (ฉันคิดว่าฉันสังเกตเห็นแล้ว) มันใช้งานได้ดีและลดเวลาในการทำดัชนีการค้นหาแคตตาล็อก
  • มีแนวโน้มว่าจะมีตัวทำดัชนีบางตัวที่คุณไม่ต้องเรียกใช้เช่นแท็กหรือคุณลักษณะของผลิตภัณฑ์ บางครั้งมันก็เพียงพอแล้วถ้าคุณทำเพียงราคาแบนผลิตภัณฑ์หมวดหมู่สินค้าและแคตตาล็อกค้นหาเป็นประจำและอื่น ๆ อาจจะทุกวัน
  • เราซิงโครไนซ์ผลิตภัณฑ์กับระบบภายนอกทุกสองชั่วโมงและในขณะเดียวกันเราก็จัดทำดัชนีด้วยสคริปต์ PHP ดังนั้นเรามี cronjob สำหรับตัวสร้างดัชนีแต่ละตัวที่เราต้องการเรียกใช้ในช่วงเวลาหนึ่งและให้ cron นี้เรียกใช้สคริปต์ สิ่งนี้ดูเหมือนจะเป็นจุดกึ่งกลางที่ดีที่สุดระหว่างสิ่งที่เซิร์ฟเวอร์สามารถทำได้และข้อมูลผลิตภัณฑ์ที่เป็นปัจจุบัน

สิ่งนี้ทำงานบน Magento CE 1.7.0.2; ยังคงเจ็บปวดอยู่ แต่;)


โดยทั่วไปแล้วเรากำลังเผชิญกับปัญหาสินค้าแบนดัชนีอื่น ๆ ทั้งหมดได้ดี
ravisoni

3

ใช้ Dnd_Patchindexurl ฉันสามารถลดเวลาของ catalog_url_rewrite reindex ได้เกือบ 70%

ฉันคิดว่ามันเป็นทางออกที่ดีในการยกเว้นผลิตภัณฑ์ที่ปิดใช้งานหรือผลิตภัณฑ์ที่มองไม่เห็นเพื่อสร้าง URL ของผลิตภัณฑ์เหล่านี้!

$ php ./shell/indexer.php -reindexall
Product Attributes index was rebuilt successfully in 00:00:11
Product Prices index was rebuilt successfully in 00:00:22
Catalog URL Rewrites index was rebuilt successfully in 00:08:49
Product Flat Data index was rebuilt successfully in 00:00:51
Category Products index was rebuilt successfully in 00:00:19
Catalog Search Index index was rebuilt successfully in 00:00:12
Stock Status index was rebuilt successfully in 00:00:00
Tag Aggregation Data index was rebuilt successfully in 00:00:00

หลังจาก:

$ php ./shell/indexer.php -reindexall
Product Attributes index was rebuilt successfully in 00:00:12
Product Prices index was rebuilt successfully in 00:00:24
Catalog URL Rewrites index was rebuilt successfully in 00:02:52
Product Flat Data index was rebuilt successfully in 00:00:57
Category Products index was rebuilt successfully in 00:00:25
Catalog Search Index index was rebuilt successfully in 00:00:13
Stock Status index was rebuilt successfully in 00:00:00
Tag Aggregation Data index was rebuilt successfully in 00:00:00

ฉันติดตั้งบน 1.9.1.1 และทำงานได้ดีมาก!

สามารถติดตั้งได้ผ่านการเชื่อมต่อมากเกินไปhttp://www.magentocommerce.com/magento-connect/catalog/product/view/id/15074/s/dn-d-patch-index-url-1364/category/12863/


1

อัปเกรดเป็น EE 1.13 ดัชนีได้รับการปรับปรุงอย่างมากในรุ่นนี้


2
แต่ไคลเอนต์ส่วนใหญ่ชอบเวอร์ชันชุมชน
ravisoni

1
ตกลง 1.8 จะออกมาในอีกไม่กี่สัปดาห์ข้างหน้า แต่ส่วนใหญ่จะไม่รวมการปรับให้เหมาะสมของดัชนี ฉันไม่ชอบมันเหมือนกัน แต่นี่เป็นวิธีที่ง่ายที่สุดปลอดภัยที่สุดและอาจถูกที่สุดที่จะทำให้ดัชนีของคุณทำงานได้
Paul Grigoruta

เป็นไปไม่ได้หรือที่จะหาทางแก้ปัญหาอย่างถาวร
ravisoni

ในกรณีส่วนใหญ่ที่ใครบางคนมี SKU จำนวนมากที่พวกเขากำลังวิ่งเข้าไปในกำแพงอิฐกับดัชนี CE 1.7 ที่มีอยู่แล้วพวกเขาควรไปกับ EE 1.13 มีไซต์จำนวนมากทำงานอย่างราบรื่นด้วยดัชนี CE 1.7 และ EE 1.12 เหล่านี้ที่มี SKU 10-25k กุญแจสำคัญคือการจัดการพวกเขาในระดับเวิร์กโฟลว์ส่วนใหญ่และมีโครงสร้างพื้นฐานที่เหมาะสม
davidalger

CE เป็นตัวเลือกที่เพียงพออย่างสมบูรณ์แบบ คุณสมบัติใน EE 1.13 มีการแก้ไขข้อบกพร่อง - ว่าชุมชนได้ขับรถเข้าไปใน CE อยู่แล้ว ไม่ว่าคุณจะใช้ CE หรือ EE หรือไม่ก็ตามไม่ว่าจะใช้เวลาในการทำดัชนีหรือไม่ก็ตามนั้นขึ้นอยู่กับความซับซ้อนของแคตตาล็อกการกำหนดค่าเซิร์ฟเวอร์การทำงานพร้อมกันของผู้เข้าชมและความถี่ดัชนีใหม่ EE ไม่ใช่กระสุนวิเศษและแน่นอนว่าไม่ใช่วิธีแก้ปัญหาที่เหมาะสมสำหรับปัญหาที่เกี่ยวข้องกับสถาปัตยกรรม
Ben Lessani - Sonassi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.