Работает ли magento 2 без триггеров SQL? - PullRequest
0 голосов
/ 05 июня 2018

Вот ситуация.

Я использую magento 2.1.6 Enterprise edition.В документации magento сказано, что «Magento использует триггеры базы данных MySQL для улучшения доступа к базе данных во время переиндексации».

Но мой вопрос в том, что произойдет, если я использую базу данных без триггеров.Потому что я планирую перенести базу данных в Google Cloud SQL.В документации по облаку Google говорится, что следует избегать триггеров, если вы собираетесь использовать репликацию, поскольку это может привести к несогласованности реплики.

Что лучше, то лучше всего это делать?

1 Ответ

0 голосов
/ 06 июня 2018

Magento использует триггеры базы данных MySQL для улучшения доступа к базе данных при переиндексации .

Magento не поддерживает custom triggers в базе данных Magento потому что пользовательские триггеры могут создавать несовместимости с будущими версиями Magento.

Механизм индексации Magento использует значение состояния в процессе запуска переиндексации.

Вы можете проверить состояние индексатора в панели администратора

Система> Управление новыми индексами

enter image description here

или вручную с помощью командной строки. Просмотр списка индексаторов

Чтобы просмотреть список всех индексаторов:

bin/magento indexer:info

Список отображается следующим образом:

catalog_category_product                 Category Products
catalog_product_category                 Product Categories
catalog_product_price                    Product Price
catalog_product_attribute                Product EAV
cataloginventory_stock                   Stock
catalogrule_rule                         Catalog Rule Product
catalogrule_product                      Catalog Product Rule
catalogsearch_fulltext                   Catalog Search

Как это работает?

Короче говоря, Magento 2 создает триггеров для каждого “Update by Schedule” индекса.

Эти триггеры срабатывают по любому INSERT, UPDATE and DELETE в любой из таблиц сущности.

  • При запуске они создают новую запись с идентификатором сущности в конкретной таблице изменений.

  • Когда запускается задание cron, оно сравниваетversion_id его таблицы mview_state с version_ids таблицы журнала изменений.

  • Индекс обновляется для всех объектов, помеченных как измененные.Кэши для определенных объектов также аннулируются (очищаются).

Триггеры

Когда для индекса установлено значение «Обновление по расписанию», Magento 2 создает серию триггеров для него.Только для catalog_product_flat создано 30 триггеров.

mysql> show triggers \G

*************************** 1. row ***************************
             Trigger: trg_catalog_product_entity_after_insert
               Event: INSERT
               Table: catalog_product_entity
           Statement: BEGIN
INSERT IGNORE INTO `catalog_product_flat_cl` (`entity_id`) VALUES (NEW.`entity_id`);
END
              Timing: AFTER
             Created: 2018-01-10 16:04:59.54
            sql_mode: 
             Definer: some-magento-user@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
*************************** 2. row ***************************
             Trigger: trg_catalog_product_entity_after_update
               Event: UPDATE
               Table: catalog_product_entity
           Statement: BEGIN
INSERT IGNORE INTO `catalog_product_flat_cl` (`entity_id`) VALUES (NEW.`entity_id`);
END
              Timing: AFTER
             Created: 2018-01-10 16:04:59.56
            sql_mode: 
             Definer: some-magento-user@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
*************************** 3. row ***************************
             Trigger: trg_catalog_product_entity_after_delete
               Event: DELETE
               Table: catalog_product_entity
           Statement: BEGIN
INSERT IGNORE INTO `catalog_product_flat_cl` (`entity_id`) VALUES (OLD.`entity_id`);
END
              Timing: AFTER
             Created: 2018-01-10 16:04:59.57
            sql_mode: 
             Definer: some-magento-user@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci

Все три триггера, которые вы видите здесь, реагируют на изменения в таблице «catalog_product_entity» (см. Таблицу).События: INSERT, UPDATE и DELETE.Поскольку существует 10 таблиц, которые влияют на содержимое материализованного представления catalog_product_flat, для всех случаев необходимо триггеры 3 x 10 = 30.

Заключение

Если вы хотитеизменить каталог товаров так, как это невозможно через панель администратора Magento, или это можно сделать быстрее с помощью прямого запроса SQL с помощью phpMyAdmin или с помощью скрипта, это все еще возможно, даже в производственном интернет-магазине.Конечно, вы должны хорошо знать таблицы MySQL Magento.Но методы частичной переиндексации из Update by Schedule гарантируют, что все необходимые индексы и плоские таблицы будут обновлены, и даже определенные кэши станут недействительными.

Ссылки:

...