HowTo

Magentoのインデックスの基本的な更新について

Magento2(以下「2」略)のプロモーション機能の一部として「Cart Price Rule」というものがあります。これは割引のルールを作る機能ですが、そのルールを保存した直後はまだフロント側では適応されていません。
なぜ「ストアフロント」にはまだその内容が適用されていないのでしょうか。

次のような警告メッセージが管理画面から表示され、戸惑ったことは御座いませんでしょうか?
多くのユーザーが体験していることですので、心配する必要は御座いません。
これはインデクシング(インデックスの再構築)と呼ばれています。

管理画面からの警告管理画面からの警告

 

本記事ではMagentoでのインデクシングについて説明していきたいと思います。

1.インデクシングの主な目的について

インデクシングの主な目的は、ストアのパフォーマンスを向上させることで、開発者のdevdocsで次のように定義されています。

Indexing is how Magento transforms data such as products and categories, to improve the performance of your storefront. As data changes, the transformed data must be updated or reindexed. Magento has a very sophisticated architecture that stores lots of merchant data (including catalog data, prices, users, and stores) in many database tables. To optimize storefront performance, Magento accumulates data into special tables using indexers.

翻訳:インデクシングはMagentoが商品やカテゴリなどのデータを変換して、ストアフロントのパフォーマンスを向上させる方法です。
データが変更されると、変換されたデータを更新またはインデックスの再構築づけする必要があります。
Magentoは非常に精巧なアーキテクチャを備え、大量のマーチャントデータ(カタログデータ、価格、ユーザー、ストアなど)を複数データベーステーブルに保存します。

ストアフロントのパフォーマンスを最適化するために、Magentoはインデクサーを使用している特別なテーブルにデータを蓄積します。

事例:

     ・商品価格:例えば商品の価格を4.99ドルから3.99ドルに変更する場合、 Magentoは、ストアフロントに表示するために価格変更を「再構築」する必要があります。 インデクシングがない場合、Magentoはすべての価格、カタログ価格ルール、割引額、バンドル価格を計算する必要がありますので、かなりストアのパフォーマンスに影響します。

    ・製品属性:商品価格と同様の理由でレイヤーナビゲーション(layered navigation)で使用できるすべての属性を収集します。
より早く読むために同じ場所にまとめています。

   ・シンプルな商品の場合は非常に容易で在庫ありの場合と在庫切れの場合がありますが、構成可能な商品・グループ商品・バンドル商品の場合、かなり複雑です。
在庫あり・在庫切れはメイン商品に関連付けられているサブ商品によりますので、ステータスの取得には長い時間がかかります。
紹介したこと以外にパフォーマンスへの影響は他にもたくさんありますので、開発者のページにアクセスして参照してください。

2.インデクシング用語 (Indexing terminology)

  • 定義:辞書によるとここでは、システムに入力された初期データとして単純に理解されています。そしてメンテナンスを容易にするために編成されています。
  • インデックス(Index)について

インデックスは、読み取りと検索を高速化するために最適化された元のデータです。各インデックスは、集計および事前計算されたデータとも考えられます。
そして、それらは特定のアルゴリズムで再作成されることもできます。

  • インデクサー(Indexer)について

インデクサーはインデックスを作成する対象です。

3.インデックスの管理 (Index Management)

インデックス表の基本的な項目インデックス表の基本的な項目

 

インデックスの基本的な項目 (version Magento CE 2.4.2):

  • インデックス表内の列の詳細:
インデックス表の項目説明インデックス表の項目説明

 

  • インデックスの再構築 (Reindex/Rebuilt Indexes)について:

▼インデックスの管理表を使用する:

インデックス表の使用方法インデックス表の使用方法

 

・保存時に更新(Update on Save):インデックステーブルは、元のデータが変更された後に更新されます。
インデクサーは、エンティティが保存または削除されたときにインデクシングの再構築をトリガーするためにカスタムコードを使用する必要があります。
これはデフォルトの設定です。

・スケジュールでの更新(Update by Schedule):インデックステーブルは、構成されたスケジュールに従ってcron jobによって更新されます。

*注:「スケジュールでの更新」はcustomer_gridのインデクサーをサポートしていません。そのため、 [保存時に更新]を使用するか、または「php bin / magento indexer:reindexcustomer_grid」のコマンドで手動でインデックスの再構築をする必要があります。

▼コマンドを使用する:

管理インターフェイスで直接にインデックスの再構築をすることはできないため、これはターミナルサーバーでのみ行います。 「phpbin / magentoインデクサー」という構文により、システムが次の提案を出ることになります。

Indexer:info

Indexer:reindex

Indexer:reset

Indexer:set-dimensions-mode

Indexer:set-mode

Indexer:show-dimensions-mode

Indexer:show-modeindexer:status

*注:Indexer:reindexは、インデクシングの再構築を実行するために最も一般的に使用されるステートメントです。
インデックスコードの追加としてのステートメントを実施するとそのコードとのインデックスの再構築のみ実施され、空白のままにすると、すべてのコードが実施されます。

結論:

Magentoのシステムは非常に複雑であるため、ストアのパフォーマンスを向上させるにはインデックスの作成が非常に必要です。
各インデックスの再構築はコマンドサーバーでのみ実行されるか、cronjobに基づいて管理画面で[保存時に更新](リアルタイム)または[スケジュールでの更新]の選択としてカスタマイズで実行されることも出来ます。

この記事では、インデックスの再構築の基本とMagentoでの使用方法を紹介しました。何かした閲覧していただけた方のお役に立てているのであれば幸いです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

原稿:

Là một người dùng Magento2 bạn có bao giờ thắc mắc khi chúng ta lưu một mục trong menu cụ thể là “Cart Price Rule” để tạo discount thì ngoài “store-front” của bạn chưa được áp dụng sự thay đổi đó hay đơn giản là khi vừa save thì bạn nhận được thông báo warning từ trang admin tương tự thế này:

Thông báo warning từ admin screen Thông báo warning từ admin screen

 

Không cần lo lắng bởi vì ai sử dụng cũng từng thắc mắc như thế, công nghệ này gọi là Indexing và trong mục này chúng ta sẽ tìm hiểu về indexing trong Magento2.

1. Mục đích chính của Indexing

Mục đích chính của Indexing là cải thiện hiệu năng của cửa hàng cụ thể được định nghĩa trong devdocs của nhà phát triển như sau:

Indexing is how Magento transforms data such as products and categories, to improve the performance of your storefront. As data changes, the transformed data must be updated or reindexed. Magento has a very sophisticated architecture that stores lots of merchant data (including catalog data, prices, users, and stores) in many database tables. To optimize storefront performance, Magento accumulates data into special tables using indexers.

            Ví dụ:

  • Giá sản phẩm: bạn thay đổi giá của một mặt hàng từ $ 4,99 thành $ 3,99. Magento phải “reindex” lại sự thay đổi giá để hiển thị trên mặt tiền cửa hàng của bạn. Nếu không có indexing thì Magento phải tính toán tất cả price, catalog price rule, discount amount, bundle pricing… mà việc này sẽ ảnh hưởng lớn đến hiệu suất cửa hàng của bạn.
  • Thuộc tính của sản phẩm: Cái này thu thập tất cả các thuộc tính có thể được sử dụng trong điều hướng theo lớp vì cùng một lý do. Có tất cả chúng ở một nơi để đọc nhanh hơn.
  • Đối với các simple product thì rất dễ dàng. Chúng có thể còn hàng hoặc hết hàng, nhưng đối với configurable, groups và bundle producti không phải là điều dễ dàng. Chúng có thể còn hàng hoặc hết hàng tùy thuộc vào sản phẩm con kết hợp với sản phẩm chính. Để lấy được trạng thái của chúng sẽ rất mất nhiều thời gian.

Còn nhiều những ảnh hưởng đến hiệu năng chưa kể đến bạn có thể truy cập vào trang của nhà phát triển để tham khảo thêm.

2. Indexing terminology (Thuật ngữ Indexing):

Dictionary: ở đây được hiểu đơn giản là dữ liệu ban đầu được nhập vào

hệ thống. Dictionary được tổ chức bình thường để tiện cho việc bảo trì.

Index: Index là các dữ liệu ban đầu được tối ưu hóa để đọc và tìm kiếm nhanh hơn. Các index có thể là những dữ liệu đã được tổng hợp và tính toán trước. Chúng có thể được tạo lại bằng các thuật toán nhất định.

Indexer Là các đối tượng để tạo index.

Quản lý các Index (Index Management)

Các mục cơ bản trong bảng IndexCác mục cơ bản trong bảng Index
  • Các chỉ mục cơ bản (version Magento CE 2.4.2):
  • Chi tiết các cột trong bảng:
Giới thiệu các mục trong bảng IndexGiới thiệu các mục trong bảng Index

 

  • Reindex:
  • -Sử dụng bảng quản lý Index:
Cách sử dụng bảng quản lý IndexCách sử dụng bảng quản lý Index

 

  • Update on Save: Các index tables sẽ được cập nhật sau khi dữ liệu ban đầu bị thay đổi. Indexer phải sử dụng custom code để kích hoạt quá trình reindexing khi các entity được save hoặc delete. Đây là cài đặt mặc định.
  • Update by Schedule: Các index table sẽ được cập nhật bằng cron job theo lịch được config.

* Chú ý: Update by Schedule thì không hỗ trợ cho indexer customer_grid. Bạn phải sử dụng Update on Save  hoặc reindex thủ công bằng lệnh “php bin/magento indexer:reindex customer_grid”

  • Sử dụng Command: Chúng ta không thể reindex ngay trong giao diện admin vì vậy chỉ thực hiện việc này ở terminal server. Bằng cú pháp “php bin/magento indexer” bạn sẽ thấy hệ thống gợi ý cho bạn:

Indexer:info

Indexer:reindex

Indexer:reset

Indexer:set-dimensions-mode

Indexer:set-mode

Indexer:show-dimensions-mode

Indexer:show-modeindexer:status

Indexer:reindex là câu lệnh thường được sử dụng nhiều nhất để thực thi reindexing. Nếu thực thi câu lệnh với thêm một mã index thì chỉ thực thi reindex với mã đó, nếu bỏ trống thì thực thi tất cả các mã.

Tổng kết:

Vì hệ thống của Magento2 rất phức tạp nên việc tạo index là rất cần thiết để cải thiện hiệu năng cửa hàng, các reindex chỉ thực thi ở command server hoặc chạy theo cronjob có thể tùy chỉnh ở admin bằng cách chọn “Update on Save” (thời gian thực) hay “Update by Schedule” (đặt lịch) và mong những điều trên khiến bạn hiểu cơ bản về Indexing và cách sử dụng chúng trong Magento2.

 

弊社ではMagento2を利用した多機能ECサイトの構築・越境EC/中国越境ECの開発をして企業様をサポートしています。 ご興味ある方は是非問い合わせください。

※注意

本ブログの投稿内容に関するお問い合わせをして頂いてもご返信できませんので、何卒ご了承ください。