Giải pháp vĩnh viễn cho vấn đề lập chỉ mục chung


23

Chúng tôi đã phát triển một số dự án magento với hồ sơ tồn kho lớn và luôn phải đối mặt với vấn đề lập chỉ mục mà chúng tôi đã thử mọi thứ tìm thấy trên internet để giải quyết vấn đề lập chỉ mục hàng ngày như cắt ngắn các bảng phẳng và lập chỉ mục lại bằng CLI, đặt cron cho lập chỉ mục nhưng đây là vấn đề đau đầu hàng ngày của chúng tôi phải đối mặt với vấn đề lập chỉ mục.

Chúng tôi đang tìm kiếm giải pháp vĩnh viễn cho vấn đề này trong khi chúng tôi làm việc trên các dự án có các kịch bản khác nhau như cập nhật sản phẩm hàng ngày hoặc nhập sản phẩm từ một số nguồn cấp dữ liệu khác hàng ngày.

Bất cứ ai có một số thực hành tốt nhất với điều này hoặc một số cách giải quyết xin vui lòng chia sẻ chúng sẽ được đánh giá cao.


Tôi đã lãng phí một năm trong Magento và các phần mở rộng của nó và kiến ​​trúc dữ liệu cực kỳ kém hiệu quả và ngu ngốc của nó làm cho một trang web thương mại điện tử chỉ với 10 nghìn sản phẩm cộng thêm bị hỏng. Tất cả những cảnh báo này nên được đưa ra cho bất kỳ ai bắt đầu thấy Magento CE. Magw onwers nên bị đưa ra tòa vì lãng phí hàng ngàn giờ đàn ông. Chỉ cần để cơ sở dữ liệu lập chỉ mục, không thực hiện công việc của cơ sở dữ liệu. Tôi khuyên rằng thay vì lãng phí tiền vào một máy chủ chuyên dụng và sau đó là hàng giờ làm việc không ngủ qua đêm, tốt hơn nên chuyển sang nền tảng thương mại điện tử được lưu trữ hoặc nguồn mở sử dụng máy chủ MS SQL.
semiprecious.com

Bạn đã bao giờ nghĩ rằng có thể bạn đã không tìm thấy tiện ích mở rộng phù hợp hoặc cấu hình máy chủ phù hợp chưa? Nếu một số phần mềm không phù hợp với nhu cầu của bạn thì không nhất thiết có nghĩa là nó vô dụng. Tôi đã kiếm được bánh mì (và bia) trong hơn 5 năm qua từ Magento và tôi cũng có rất nhiều khách hàng hài lòng. Một số với hơn 10k danh mục.
Marius

Chúng là chính xác, do cách CE hoạt động bảo trì dữ liệu là một vấn đề với 10 đến 100 nghìn skus. EE tốt hơn nhờ các cập nhật lập chỉ mục mà họ đã thực hiện nhưng đó là cho các công ty có doanh thu hàng triệu đô la. Bạn có thể ném hosting vào nó nhưng bạn sẽ biến ROI của mình thành âm. Giải pháp chúng tôi sử dụng là các quy trình rất chuyên nghiệp & delta tải lên tương tự như các giải pháp như sử dụng SAP & Walmart, kết hợp với giải pháp định giá đặc biệt (ATG-esque) mà bỏ qua vấn đề lập chỉ mục (tính toán lại lề / thuộc tính fx & nội tuyến), kết hợp với cụm lưu trữ. Câu trả lời đơn giản là không, Magento không được thiết kế tối ưu.

Câu trả lời:


31

Điều quan trọng là phải hiểu chỉ số nào chậm và tại sao

Độ phức tạp của danh mục và cuối cùng là kiến ​​trúc cửa hàng sẽ quyết định thời gian tái lập chỉ mục - kết hợp với cơ sở hạ tầng bên dưới.

  • Nếu bạn đã có 50.000 sản phẩm và 10 lượt xem cửa hàng, bạn có thể đảm bảo vài triệu hàng catalog_url_rewritesẽ mất thời gian để xử lý.

  • Nếu bạn đã có 100 sản phẩm, nhưng 5.000 thuộc tính, bạn có thể đảm bảo catalog_attributeshoặc catalog_product_flatbảng sẽ mất một thời gian để xây dựng lại hoặc nằm phẳng trên mặt của nó

  • Nếu bạn có 1.000 sản phẩm, nhưng 500 thuộc tính có thể tìm kiếm, thì catalog_fulltext_searchmột lần nữa sẽ mất một tuổi để hoàn thành

Giải pháp cho mọi vấn đề mà bạn gặp phải không phải là 1 kích thước phù hợp với tất cả, đó là về kiến ​​trúc cửa hàng của bạn đúng cách; có cơ sở hạ tầng phù hợp để hỗ trợ và sử dụng tần suất / chiến lược chỉ mục lại, cả hai đều hỗ trợ hiệu suất và hiệu suất nội dung.

  • Thêm bộ nhớ đệm phía trước sẽ không giúp ích gì cả
  • Ném thêm phần cứng vào tình huống có thể
  • Giải quyết kích thước / độ phức tạp của danh mục sẽ giúp
  • Sử dụng các công cụ lập chỉ mục của bên thứ ba sẽ giúp
  • Bên ngoài các chỉ mục nhất định (ví dụ: tìm kiếm> SOLR) sẽ giúp

Ngoài ra còn có trường hợp đánh giá xem các chỉ số nhất định có được yêu cầu hay không. Sử dụng sản phẩm / danh mục không phải lúc nào cũng làm cho tất cả các cửa hàng nhanh hơn; chúng tôi đã thấy nó làm cho các cửa hàng chậm hơn nhiều. Vì vậy, bạn có thể thấy rằng sau khi kiểm tra hiệu suất trước / sau - chúng thậm chí không được xem xét.


8

tl; dr

Không có giải pháp đạn bạc. Có một số cách giải quyết, tôi đề nghị Sonassi_Fastsearchindex- nhưng đó là đặc biệt cho tìm kiếm danh mục.

Có lẽ vô hiệu hóa cập nhật chỉ mục về lưu - lập lịch để chạy qua đêm - sẽ cung cấp một số cứu trợ? Kết hợp với việc thêm nhiều bộ nhớ đệm - memcached, Redis, APC - và bộ đệm toàn trang như Varnish (nếu bạn đang chạy CE) có thể giúp bạn bắt đầu. Nếu bạn có kế hoạch sử dụng Varnish, hãy xem Nexcess_Turpentinetrên github để bắt đầu nhanh.

Thêm thông tin

Các vấn đề lập chỉ mục - cụ thể là catalog_url_rewrites - được biết đến và ghi lại trong cộng đồng. Magento đã xử lý những điều này trong phiên bản Enterprise vì đây là những khách hàng bị ảnh hưởng xấu nhất. Nhiều khách hàng EE có sản phẩm 10k + và nhiều lượt xem cửa hàng, trang web, v.v.

Tuy nhiên, nếu bạn có một danh mục lớn và một số lượng lớn các thuộc tính bạn có thể thấy mình ở vị trí lập chỉ mục sẽ mất một khoảng thời gian dài - cụ thể là catalog_url_rewrite, sản phẩm_flat - trong trường hợp đó, đề xuất của tôi là không khắc phục thời gian chạy chỉ mục chiều dài nhưng thay vì giảm tải một số xử lý để cho phép hộp dành chu trình CPU lập chỉ mục thay vì phục vụ nội dung .

Các câu hỏi để tự hỏi:

  • Tôi có bị mất việc kinh doanh do các vấn đề về chỉ mục không?
  • Tôi có bị mất năng suất do các vấn đề về chỉ mục không?
  • Tôi có nguy cơ mất các chuyển đổi hay tỷ lệ chuyển đổi của tôi bị ảnh hưởng?
  • Có phải khách hàng của tôi có nguy cơ mua các mặt hàng hết hàng là kết quả trực tiếp của các chỉ mục không đồng bộ (hàng tồn kho, v.v.)
  • Là quy tắc định giá danh mục của tôi là một phần của kinh doanh cốt lõi của tôi và
  • Là tỷ lệ chuyển đổi tìm kiếm tại chỗ của tôi cao hơn định mức (8-10%), do đó được hưởng lợi từ việc lập chỉ mục tốt hơn?

Không có giải pháp đạn bạc nào cho vấn đề cụ thể này - vì là nhà cung cấp giải pháp, bạn nên giúp khách hàng của mình đưa ra quyết định sẽ cải thiện tốt nhất doanh số và doanh nghiệp trong khi vẫn giữ chi phí thấp.

Lựa chọn thay thế

Giảm tải tìm kiếm danh mục và điều hướng lớp đến Solr.

Quy mô theo chiều ngang. Thêm nhiều máy chủ Apache / nginx. Nhiều máy chủ hơn = thông lượng đồng thời hơn. Đây không phải là 1: 1. Nexcess có một whitepaper tuyệt vời về hiệu năng và cấu hình Apache tại đây: http://www.nexcess.net/magento-best-practices-whitepaper

Và, nếu bạn chọn đi với Varnish - hãy nhớ:

nhập mô tả hình ảnh ở đây


Chúng tôi đánh giá cao các đạo cụ, nhưng lập chỉ mục lại không liên quan gì đến bộ nhớ đệm phía trước; nó hoàn toàn là một hoạt động back-end. Giảm tải phía trước sẽ ngăn chỉ mục lại mất nhiều thời gian hơn, nhưng chắc chắn sẽ không làm cho nó nhanh hơn.
Ben Lessani - Sonassi

Những gì tôi nhận được là giảm lưu lượng truy cập đến hộp. Mối quan tâm cuối cùng ở đây là trang web trở nên không khả dụng trong khi lập chỉ mục hoặc bị khóa trong một khoảng thời gian không xác định trong khi công việc chạy. Vào cuối ngày, nếu việc lập chỉ mục không có tác động tiêu cực đến tiền tuyến, thì công việc sẽ kéo dài bao lâu. Không có sửa chữa hoặc cải thiện để lập chỉ mục thời gian tải. Không ai muốn có câu trả lời "Nâng cấp lên phiên bản trả phí" - vì vậy đề xuất của tôi là cải thiện tính khả dụng của lối vào của bạn và lên lịch để chỉ mục chạy hết giờ.
philwinkle

Hoàn toàn, tôi hiểu rằng - nhưng trong khi tính sẵn có là quan trọng đối với một trang web; nó không đủ cho một trang web thương mại điện tử. Nếu bạn thực sự không thể mua hàng do các chỉ mục bị khóa, thì trang web cũng có thể không hoạt động.
Ben Lessani - Sonassi

chúng tôi chỉ có vài trăm sản phẩm và vẫn mất vài phút để lưu một sản phẩm đơn giản trên Magento 1.7 và tôi phải trả hơn 500 đô la mỗi tháng cho một máy chủ Rackspace chuyên dụng. Tôi không chắc bắt đầu từ đâu, nhưng tôi nghi ngờ một số chỉ số có lẽ bị hỏng. Bất cứ ai có thể đề nghị một tư vấn magento tốt?
Max Hodges

5

Trong hầu hết các hội thảo Magento nặng, hầu như rất khó để Quản lý Chỉ mục phụ trợ Magento hoạt động. Tôi đã có vấn đề này thường xuyên. Chạy kịch bản shell mọi lúc bởi nhà phát triển thường rất bận rộn. Thông thường tôi khắc phục vấn đề này vĩnh viễn như thế này.

Tôi tạo một bản sao mới của shell / indexer.php> shell / myindexer.php

Tùy chỉnh shell / myindexer.php một số xung quanh dòng 154

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

Đến

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

và, thêm kiểm tra này xung quanh dòng 166

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

trước

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

Và sau đó tôi thêm tập lệnh shell mới vào cpanel cron để chạy sau mỗi 5 phút

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

Vì shell script chạy trên cứ sau 5 phút và nó chỉ giới thiệu lại các quy trình yêu cầu reindexing, nó giảm nguy cơ tải nặng cho cpu máy chủ cũng như toàn bộ quá trình reindexing rất nhanh. Nếu không có quy trình yêu cầu reindexing, đơn giản là nó sẽ không chạy quy trình reindexing. Ngoài ra, hãy nhớ đặt chế độ reindexing thành "Cập nhật khi lưu" trong trang Quản lý chỉ mục. Nếu bạn không biết, bạn có thể nhận tùy chọn này trong Hành động> Thay đổi chế độ chỉ mục bên cạnh nút Gửi.


@changeling, bạn được chào đón. Tôi rất vui vì nó xứng đáng với bạn.
rbncha

Tôi đã kết hợp điều này vào kịch bản của mình, trong trường hợp bất kỳ ai cũng thấy nó hữu ích: gist.github.com/steverobbins/ mẹo
Steve Robbins

4

Sẽ dễ dàng hơn để nói nếu bạn có thể cung cấp thêm một số dữ liệu (kích thước khoảng không quảng cáo, khách truy cập, máy), nhưng đây là một khả năng:

  • chúng tôi sử dụng Sonassi_Fastsearchindexphần mở rộng cho chỉ mục Tìm kiếm danh mục. Mặc dù nó chỉ lập chỉ mục tiêu đề, mô tả và sku (tôi nghĩ rằng tôi đã nhận thấy), nhưng nó hoạt động rất tốt và giảm thời gian lập chỉ mục danh mục.
  • rất có thể sẽ có một số bộ chỉ mục mà bạn không phải chạy, tức là cho các thẻ hoặc cho các thuộc tính sản phẩm. Đôi khi nó là đủ nếu bạn chỉ làm giá, sản phẩm phẳng, danh mục sản phẩm và danh mục tìm kiếm thường xuyên, và những người khác có thể hàng ngày.
  • chúng tôi đồng bộ hóa các sản phẩm với một hệ thống bên ngoài cứ sau hai giờ và trong khi đó, chúng tôi lập chỉ mục với các tập lệnh php. Vì vậy, chúng tôi có một cronjob cho mỗi người lập chỉ mục mà chúng tôi muốn chạy đến một thời điểm nhất định và để cron này thực thi tập lệnh. Đây dường như là khoảng giữa tốt nhất giữa những gì máy chủ có thể làm và dữ liệu sản phẩm cập nhật.

Điều này đang chạy trên Magento CE 1.7.0.2; vẫn còn một nỗi đau;)


Chúng tôi thường phải đối mặt với vấn đề với sản phẩm phẳng tất cả các chỉ số khác đều ổn.
ravisoni

3

bằng cách sử dụng Dnd_Patchindexurl tôi đã có thể cắt giảm thời gian reindex của catalog_url_rewrite xuống gần 70%

Tôi nghĩ rằng đó là một giải pháp tốt để loại trừ các sản phẩm bị vô hiệu hóa hoặc các sản phẩm không hiển thị để tạo URL của chúng mà không có gì!

$ 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

Sau:

$ 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

Tôi đã cài đặt nó vào 1.9.1.1 và hoạt động rất tốt!

Có thể được cài đặt thông qua Connect quá http: //www.magentoc Commerce.com/magento-connect/catalog/product/view/id/15074/s/dn-d-patch-index-url-1364/c Ab / 12863 /


1

Nâng cấp lên EE 1.13. Các chỉ số đã được cải thiện rất nhiều trong phiên bản này.


2
Nhưng hầu hết khách hàng thích phiên bản cộng đồng.
ravisoni

1
Đã đồng ý. 1.8 sẽ ra mắt trong một vài tuần nhưng nhiều khả năng nó sẽ không bao gồm các tối ưu hóa chỉ mục. Tôi cũng không thích nó, nhưng đây là cách dễ nhất, an toàn nhất và có thể rẻ nhất để người lập chỉ mục của bạn thực hiện.
Paul Grigoruta

là điều này là không thể để tìm một giải pháp lâu dài.
ravisoni

Trong hầu hết các trường hợp, khi ai đó có nhiều SKU đến mức họ thực sự chạy vào một bức tường gạch với các bộ chỉ mục CE 1.7 hiện có, thì họ nên đi với EE 1.13. Có rất nhiều trang web hoạt động trơn tru ngoài kia với các bộ chỉ mục CE 1.7 và EE 1.12 có 10-25k SKU. Điều quan trọng là quản lý chúng ngay trên cấp độ công việc và có cơ sở hạ tầng phù hợp.
davidalger

CE là một lựa chọn hoàn toàn đầy đủ. Các tính năng trong EE 1.13 là sửa lỗi - dù sao cộng đồng cũng đã lái vào CE. Bất kể điều đó và bất kể bạn sử dụng CE hay EE - thời gian lập chỉ mục sẽ luôn phụ thuộc hoàn toàn vào độ phức tạp của danh mục, cấu hình máy chủ, đồng thời của khách truy cập và tần suất chỉ mục lại. EE không phải là viên đạn ma thuật, và chắc chắn không phải là một giải pháp thích hợp cho bất kỳ vấn đề nào liên quan đến kiến ​​trúc.
Ben Lessani - Sonassi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.