magento - Антон Капля
DESCRIPTION
Magento отчеты любой сложности за недорогоTRANSCRIPT
![Page 1: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/1.jpg)
Magentocommerce.com
«Доклад о Magento»
Капля Антон
![Page 2: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/2.jpg)
О себе● Капля Антон● Сотрудник консалтингового отдела (aka ECg)● Работаю в Мадженто более трех лет● Был замечен в таких проектах как
● Ford (Мадженто которая работает с SQL Server)● Регулярных релизах (1.11-1.13)● И прочем непотребстве….
![Page 3: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/3.jpg)
О презентации
● Новые фичи в Мадженто● Aгрегация и денормализация● Оценим новые индексаторы● Сварганим пару простых примеров
![Page 4: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/4.jpg)
Чего нового в Мадженто 1.13
● Расширенная библиотека для работы с базой данных ● Материализация запросов● Индексаторы
![Page 5: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/5.jpg)
Библиотека управления объектами БД
● Декомпозиция адаптера базы данных● SQL конструкторы● Управляющие объекты
![Page 6: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/6.jpg)
Пример: создание триггера
PHP /**@var $connection Varien_Db_Adapter_Interface */$sqlTrigger = new Magento_Db_Sql_Trigger();$sqlTrigger->setTarget('tag') ->setEvent(Magento_Db_Sql_Trigger::SQL_EVENT_INSERT) ->setName('trg_tag_before_insert') ->setBody('INSERT INTO new_tag (tag_id) VALUES (NEW.tag_id);'); $connection->query((string)$sqlTrigger);
SQLCREATE TRIGGER trg_tag_before_insertAFTER INSERTON tag FOR EACH ROWBEGIN INSERT INTO new_tag (tag_id) VALUES (NEW.tag_id);END;
![Page 7: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/7.jpg)
Материализованное представление● Материализированое представление — объект базы
данных содержащий результат выполнения запроса.● Основная задача — организация сложно согласованных
данных для для быстрого доступа к ним.● Доступ к данным материализированого представления
может быть оптимизирован посредством индексов.
![Page 8: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/8.jpg)
Где это нужно
● Сложные запросы● Отчеты● Агрегация данных● Интеграции уровня БД
![Page 9: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/9.jpg)
Концепт
● View для хранения кешируемого запроса● Таблицы для кеширования данных● Логику управления перелоижм на PHP
![Page 10: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/10.jpg)
Реализация в Мадженто
![Page 11: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/11.jpg)
Примеры использования в Мадженто
/** @var $select Varien_Db_Select */$client = Mage::getModel('enterprise_mview/client');$client->init('my_first_mview_in_magento') ->execute('enterprise_mview/action_mview_create', array( 'select' => $select ));
Создание нового мат. представления:
![Page 12: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/12.jpg)
Реализация в Мадженто
![Page 13: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/13.jpg)
Сценарии обновления
● Обновление всех данных● Обновленние конкретных данных (по идентификатору)● Обновление только изменных данных
![Page 14: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/14.jpg)
Пример: Количество продуктов
Закешируем запрос с количеством продуктов/** @var $select Varien_Db_Select */$select ->from(array('cpe' => 'catalog_product_entity'), array()) ->joinLeft(array('csi' => 'cataloginventory_stock_item'), 'csi.product_id = cpe.entity_id', array()) ->columns(array( 'entity_id' => 'cpe.entity_id', 'sku' => 'cpe.sku', 'qty' => new Zend_Db_Expr('IFNULL(csi.qty, 0)') )); /** @var $client Enterprise_Mview_Model_Client */$client = Mage::getModel('enterprise_mview/client');$client->init('product_qty') ->execute('enterprise_mview/action_mview_create', array( 'select' => $select ));
![Page 15: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/15.jpg)
Пример: Количество продуктов
По умолчанию нам доступна команда обновления всех данных$client->init('product_qty'); ->execute('enterprise_mview/action_mview_refresh');
По умолчанию нам доступна команда обновления всех данных
Для обновления по ключу нам необходимо задать ключ$client->getMetadata() ->setKeyColumn('entity_id') ->save();$client->execute('enterprise_mview/action_mview_refresh_row', array( 'value' => 16));
![Page 16: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/16.jpg)
Обновление только изменных данных
● Логирование изменяемых данных.● Мадженто использует триггеры баз данных
![Page 17: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/17.jpg)
Пример: Активация лога изменений
Подготовим таблицу которая будет накапливать изменения:
Активируем лог указав интересующую нас таблицу и колонку
$client = Mage::getModel('enterprise_mview/client');$client->init('product_qty') ->execute('enterprise_mview/action_changelog_create');
$client->init('product_qty') ->execute('enterprise_mview/action_changelog_subscription_create', array( 'target_table' => 'catalog_product_entity', 'target_column' => 'entity_id',));
![Page 18: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/18.jpg)
Метаданные
![Page 19: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/19.jpg)
Пользовательский сценарий
● Сложная подготовка данных ● Enterprise_Mview_Model_Action_Interface● Индексаторов в Мадженто
![Page 20: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/20.jpg)
Досадные ограничения
● MySQL Bug #11472 Triggers not executed following foreign key updates/deletes
● Инвалидация продиктованная бизнес логикой
![Page 21: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/21.jpg)
Альтернатива
● CDC (Change Data Capture) и разбор mysqlbinlog
● Flexviews
![Page 22: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/22.jpg)
Вопросы
![Page 23: Magento - Антон Капля](https://reader034.vdocuments.mx/reader034/viewer/2022042815/5583d3c4d8b42ace2f8b4b4c/html5/thumbnails/23.jpg)
Спасибо за внимание!!!