Работает ли magento 2 без триггеров SQL?

vinoth спросил: 12 мая 2018 в 04:07 в: mysql

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

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

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

Какое лучшее лучше всего подходит для этого?


1 ответ

Aditya Shah ответил: 12 мая 2018 в 03:22

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

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

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

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

System > Новое управление индексами

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

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

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 запускается, он сравнивает версию_идентификатора своего mview_statetable с 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. Но частичные методы переиндексации из "Обновление по расписанию" гарантируют, что все необходимые индексы и плоские таблицы обновляются, и даже определенные кеши являются недействительными.

Ссылки:

  • https:// magento.stackexchange.com/questions/117030/what-is-mview-in-magento2
  • http://devdocs.magento.com/guides/v2.0/extension-dev-guide/indexing. HTML
  • https://www.bigbridge.nl/blog/essential-magento-2-partial-reindexing/
  • https://en.wikipedia.org/wiki/Materialized_view