Khi nào các chỉ số bị vô hiệu?


23

Tôi có một cửa hàng và tất cả các chỉ số TẤT CẢ đều không hợp lệ. Tôi nhận thấy rằng tôi không có đầu mối, khi một chỉ mục bị vô hiệu.

Bạn có thể cho tôi một danh sách các sự kiện "tất cả", làm cho một hoặc nhiều chỉ số này trở nên không hợp lệ không?

  • Thuộc tính sản phẩm
  • Giá sản phẩm
  • Danh mục URL Viết lại
  • Dữ liệu phẳng sản phẩm
  • Danh mục sản phẩm
  • Danh mục tìm kiếm danh mục
  • Thẻ dữ liệu tổng hợp
  • Tình trạng tồn kho

Câu trả lời:


18

Thực hiện một grep trên thư mục mã sẽ giúp bạn có một danh sách các tệp kích hoạt tính hợp lệ. grep -Ri '::STATUS_REQUIRE_REINDEX' .

Các tập tin cốt lõi sau đây kích hoạt tính hợp lệ

./core/Mage/CatalogSearch/Model/Indexer/Fulltext.php
./core/Mage/Catalog/Model/Product/Indexer/Flat.php
./core/Mage/Catalog/Model/Product/Indexer/Price.php
./core/Mage/Catalog/Model/Category/Indexer/Flat.php
./core/Mage/Catalog/Model/Category/Indexer/Product.php
./core/Mage/Catalog/Model/System/Config/Backend/Catalog/Product/Flat.php
./core/Mage/Catalog/Model/System/Config/Backend/Catalog/Category/Flat.php
./core/Mage/Catalog/Model/Indexer/Url.php
./core/Mage/Backup/Helper/Data.php
./core/Mage/CatalogInventory/Model/Indexer/Stock.php
./core/Mage/ImportExport/Model/Import.php

Các sự kiện cơ bản trong lõi Magento CE là

Thuộc tính sản phẩm

thuộc tính lưu cụ thể (là một phần của sản phẩm phẳng), store, store_group nếu sản phẩm danh mục phẳng được bật

Giá sản phẩm

kiểm tra cài đặt cấu hình lưu (như phạm vi giá). hoặc lưu sản phẩm, tạo / xóa trang web

Danh mục URL Viết lại

không có hiệu lực cụ thể

Dữ liệu phẳng sản phẩm

Thuộc tính lưu cụ thể (là một phần của sản phẩm phẳng), nếu sản phẩm danh mục phẳng được bật, Sau khi bật sản phẩm phẳng

Danh mục dữ liệu phẳng

Kiểm tra là danh mục phẳng được kích hoạt và thể loại lưu cụ thể, Sau khi kích hoạt danh mục phẳng

Danh mục sản phẩm

kiểm tra là danh mục danh mục phẳng được kích hoạt và thể loại lưu cụ thể

Danh mục tìm kiếm danh mục

thuộc tính lưu cụ thể (là một phần của thuộc tính có thể tìm kiếm), store, store_group nếu sản phẩm danh mục phẳng được bật

Thẻ dữ liệu tổng hợp

Không bao giờ bị vô hiệu trừ các điều kiện chung được đề cập dưới đây

Tình trạng tồn kho

Hệ thống cụ thể> Cài đặt cấu hình trong tab kho lưu trữ, ví dụ hiển thị các sản phẩm chứng khoán

Tất cả chúng đều bị vô hiệu hóa sau khi khôi phục lại bản sao lưu từ System > Tools > Backupvà tạo, xóa hoặc di chuyển xung quanh các trang web, cửa hàng và kho lưu trữ Sau khi chạy nhập dữ liệu cho sản phẩm, các mục sau đây không hợp lệ: catalog_product_price, catalog_carget_product, catalogsearch_fulltext, catalog_product_fl

Một số bộ chỉ mục như dữ liệu phẳng và bộ chỉ mục URL dường như cũng bị vô hiệu bằng cách lưu core_config_datacác giá trị.


14

Có lẽ đó là một ý tưởng để tạm thời tạo một bản viết lại cho trang web này trên

Mage_Index_Model_Resource_Process

Sau đó làm một cái gì đó như:

<?php

class YourNamespace_YourModule_Model_Resource_Process
    extends Mage_Index_Model_Resource_Process
{

    public function updateStatus($process, $status)
    {
        if ($status === Mage_Index_Model_Process::STATUS_REQUIRE_REINDEX) {
            Mage::log(sprintf('Indexer %s was invalidated.', $process->getIndexer()->getName()), null, 'invalid_index.log', true);
            foreach (debug_backtrace() as $db) {
                Mage::log(sprintf('%s::%s', $db['class'], $db['function']), null, 'invalid_index.log', true);
            }
        }
        return parent::updateStatus($process, $status);
    }

}

Điều đó sẽ dễ dàng xác định chính xác khi một người lập chỉ mục bị vô hiệu và theo dõi cuộc gọi chịu trách nhiệm về nó.


10

Vì những người khác đã trả lời cụ thể câu hỏi của bạn. Tôi nghĩ có lẽ tốt hơn để giải thích tại sao việc lập chỉ mục là cần thiết và làm thế nào nó liên quan đến Magento và mối quan hệ với cơ sở dữ liệu hiện đại .

Chỉ mục: một danh sách theo thứ tự chữ cái tên, chủ đề, v.v., với các tham chiếu đến những nơi chúng xảy ra, thường được tìm thấy ở cuối sách.

Vậy chính xác thì Index là gì về Cơ sở dữ liệu ?

Một chỉ mục là một cấu trúc dữ liệu sắp xếp một số bản ghi trên một hoặc nhiều trường và tăng tốc độ truy xuất dữ liệu. Điều này là để tránh quét qua các khối đĩa mà bảng kéo dài, khi tìm kiếm thông qua cơ sở dữ liệu.

Và Indexing là gì về Magento ? Sản phẩm phụ của EAV (Giá trị thuộc tính thực thể) AKA một cơ sở dữ liệu trong cơ sở dữ liệu. Với nhiều bảng tra cứu, tập hợp tất cả các thuộc tính được gắn cờ là được lập chỉ mục để được kết hợp thành một bảng phẳng của tất cả các bảng tra cứu, để truy vấn nhanh hơn và ít I / O hơn và chu kỳ CPU.

Tôi nhớ lại một đề cập rằng khi Magento ban đầu được phát triển, tính linh hoạt cao trong danh sách ưu tiên, đó là điều dễ hiểu tại sao họ chọn đi theo mô hình dữ liệu EAV. Cuối cùng, tuy nhiên, chi phí cho sự linh hoạt như vậy đã phải trả giá bằng hiệu suất và nó đã khiến Magento thất vọng ngay từ đầu.

Nhìn chung, các Kỹ sư Magento được giao nhiệm vụ, trước hết và quan trọng nhất, với việc xây dựng hệ thống linh hoạt nhất, có thể tùy chỉnh nhất có thể và lo lắng về hiệu suất sau này. Tại sao Magento lại chậm như vậy?

EAV là tuyệt vời cho kho dữ liệu nhưng khủng khiếp cho giao dịch. Vậy tại sao chúng ta cần chỉ số để bắt đầu? Vì cách tiếp cận tương tự của mô hình quan hệ đã được thực hiện lại, Magento giờ phải xử lý tất cả những điều mà MySQL tự thực hiện trong nội bộ. Một số điều cần xem xét, chẳng hạn như các Chỉ mục đã tồn tại trong các bảng MySQL. Với ý nghĩ đó, hãy xem xét mô hình dữ liệu EAV ngay bây giờ:

  • E ntity = Bảng
  • Một ttribution = Field
  • V alue = Giá trị

Điều tương tự phải được thực hiện lại, đó là IMO rất "chống mẫu".

Ngoài ra, đây cũng chính là lý do bạn tìm thấy var/locksbộ chỉ mục sử dụng để khóa quá trình lập chỉ mục. Cơ sở dữ liệu tương tự có khóa hàng / bảng.

Bây giờ khi một bản ghi, giả sử một giá trị sản phẩm đã được thay đổi flat tablehoặcindex (như những gì MySQL sẽ đề cập đến) phải được cập nhật để được phản ánh cho các truy vấn khi dữ liệu mới được thay đổi được tìm thấy nhanh chóng và hiệu quả mà không cần quét qua nhiều bản ghi. Các bảng phẳng tồn tại như được sử dụng trong cùng một lý do MySQL có chúng, không có chỉ mục như vậy (như một cuốn sách), nó yêu cầu quét toàn bộ bảng để lấy bản ghi. Điều này có nghĩa là số lượng I / O khổng lồ cho cả Đĩa và Bộ nhớ cũng như chu kỳ CPU để xác định vị trí dữ liệu được yêu cầu, điều này rất tệ cho hiệu năng.

Vì Magento sử dụng mô hình dữ liệu EAV, có rất nhiều bảng tra cứu phải được quét để ghép tất cả dữ liệu lại với nhau để xác định vị trí dữ liệu được yêu cầu. Đây là những gì xảy ra nếu bạn vô hiệu hóa danh mục phẳng. Giống như MySQL, quét bản ghi so với sử dụng một chỉ mục (bảng phẳng) để được sử dụng để xác định vị trí bản ghi một cách nhanh chóng trong khi bảo quản các chu kỳ I / O quý giá. Tạo một bảng và không thêm bất kỳ chỉ mục nào cũng giống như không sử dụng các bảng phẳng trong magento. Trong khi hai kịch bản này có thể hoạt động tốt trong các kịch bản khác nhau, See Ben tại Sonassi trả lời rất tốt cho câu hỏi này. (Gợi ý nó liên quan đến việc hiểu phạm vi của dữ liệu.)

Mặc dù đó không phải là câu trả lời trực tiếp cho câu hỏi của bạn, nhưng việc hiểu các bộ phận chuyển động và được chuẩn bị tốt hơn cho chúng sẽ giúp giảm bớt một số vấn đề đau đầu khi lập chỉ mục. " Điều trị vấn đề chứ không phải là triệu chứng. "

Khám phá thêm về phần bên trong của các hệ thống cơ sở dữ liệu hiện đại có thể giúp hiểu rõ hơn về cách thức và lý do Lập chỉ mục là cần thiết và cách nó liên quan (phần nào) với Lập chỉ mục của Magento.

Để tóm tắt: Hiểu phạm vi vấn đề của bạn trước khi áp dụng các giải pháp một cách mù quáng. Vì không phải mọi bit dữ liệu sẽ giống hệt nhau và lập kế hoạch và thực hiện các giải pháp SAU KHI bạn đã hiểu rõ / đầy đủ về vấn đề. Tối ưu hóa cơ sở dữ liệu có thể rất bổ ích cho quản lý thay đổi. Chẳng hạn như ngăn chặn sự sợ hãi DEADLOCKS.

Bạn cũng có thể muốn xem xét việc thiết lập tất cả các bộ chỉ mục của mình Manualvà thiết lập các quy trình thay thế để xây dựng lại chỉ mục vào giờ thấp điểm (khi quản trị viên đi vắng). Chỉ Product PricesStock Statusnên được đặt thành Update on Save.

Bây giờ hãy xem xét cách lập chỉ mục hoạt động từ quan điểm kỹ thuật. Các mô-đun chính chịu trách nhiệm lập chỉ mục Mage_Index. Mô hình cơ bản của indexer: Indexer, Process, Event.

Mage_Index_Model_Indexerlà bộ chỉ mục, tất cả các tương tác với các mô-đun mô-đun khác Mage_Indexxảy ra thông qua dịch vụ này. Nó chứa các phương thức sau:

  • processEntityAction() Tạo và đăng ký sự kiện và bắt đầu quá trình lập chỉ mục
  • logEvent() Tạo một sự kiện và đăng ký nó để lập chỉ mục tiếp theo;
  • indexEvent() Chạy các sự kiện lập chỉ mục;
  • getProcessesCollection()Trả về bộ sưu tập của tất cả các quy trình như Thuộc tính sản phẩm, Giá sản phẩm, Phần thưởng Url danh mục, v.v. Thông thường sau khi thay đổi bản chất, như phương thức _afterSavehoặc _afterCommitchúng tôi thực hiện chỉ mục lại một phần.

Các Mage_Index_Model_Processhoặc quá trình là bản chất của indexer của bạn mà các cửa hàng tình trạng, hoạt động chạy cuối cùng. Tất cả các quy trình được lưu trữ trong bảng index_process. Chương trình có một phương thức getIndexer()trả về chỉ mục của mô hình. Hầu hết các nhiệm vụ được ủy thác theo quy trình của mô hình chỉ mục.

Mage_Index_Model_Eventlưu trữ thông tin về sự kiện đã xảy ra. Ví dụ: chúng tôi lưu trữ sản phẩm và sau khi lưu, chúng tôi tạo một sự kiện mới và lưu trữ thông tin về loại thực thể chúng tôi vừa lưu, id có tinh thần gì và chúng tôi đã thực hiện hành động nào cho chất này.

Một danh sách chung khi mất hiệu lực xảy ra:

  1. danh mục / sản phẩm (TIẾT KIỆM, XÓA, MASS_ACTION)
  2. danh mục / danh mục (TIẾT KIỆM, XÓA)
  3. danh mục / resource_eav_attribution (TIẾT KIỆM, XÓA)
  4. khách hàng / nhóm (TIẾT KIỆM)
  5. cataloginventory / stock_item (TIẾT KIỆM)
  6. thẻ / thẻ (TIẾT KIỆM)
  7. lõi / cửa hàng (TIẾT KIỆM, XÓA)
  8. lõi / store_group (TIẾT KIỆM, XÓA)
  9. lõi / trang web (TIẾT KIỆM, XÓA)

Bất kỳ mô hình tài nguyên nào có chỉ mục đã đăng ký trong mô-đun config.xml, khi lưu giao dịch. afterCommitCallback()được gọi với một tiền tố. Đây là nơi các sự kiện chỉ mục được ghi lại, vì nó ở cuối một giao dịch thành công.

... Và điều khiến tôi buồn là EAV vẫn xuất hiện trong Magento 2. :(

Tài liệu tham khảo:


1
merch.docs.magento.com/ee/user_guide/system-operations/ trộm Xem "Sự kiện kích hoạt giới thiệu lại"
B00mer
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.