23
Magentocommerce.com «Доклад о Magento» Капля Антон

Magento - Антон Капля

Embed Size (px)

DESCRIPTION

Magento отчеты любой сложности за недорого

Citation preview

Page 1: Magento - Антон Капля

Magentocommerce.com

«Доклад о Magento»

Капля Антон

Page 2: Magento - Антон Капля

О себе● Капля Антон● Сотрудник консалтингового отдела (aka ECg)● Работаю в Мадженто более трех лет● Был замечен в таких проектах как

● Ford (Мадженто которая работает с SQL Server)● Регулярных релизах (1.11-1.13)● И прочем непотребстве….

Page 3: Magento - Антон Капля

О презентации

● Новые фичи в Мадженто● Aгрегация и денормализация● Оценим новые индексаторы● Сварганим пару простых примеров

Page 4: Magento - Антон Капля

Чего нового в Мадженто 1.13

● Расширенная библиотека для работы с базой данных ● Материализация запросов● Индексаторы

Page 5: Magento - Антон Капля

Библиотека управления объектами БД

● Декомпозиция адаптера базы данных● SQL конструкторы● Управляющие объекты

Page 6: Magento - Антон Капля

Пример: создание триггера

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 - Антон Капля

Материализованное представление● Материализированое представление — объект базы

данных содержащий результат выполнения запроса.● Основная задача — организация сложно согласованных

данных для для быстрого доступа к ним.● Доступ к данным материализированого представления

может быть оптимизирован посредством индексов.

Page 8: Magento - Антон Капля

Где это нужно

● Сложные запросы● Отчеты● Агрегация данных● Интеграции уровня БД

Page 9: Magento - Антон Капля

Концепт

● View для хранения кешируемого запроса● Таблицы для кеширования данных● Логику управления перелоижм на PHP

Page 10: Magento - Антон Капля

Реализация в Мадженто

Page 11: Magento - Антон Капля

Примеры использования в Мадженто

/** @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 - Антон Капля

Реализация в Мадженто

Page 13: Magento - Антон Капля

Сценарии обновления

● Обновление всех данных● Обновленние конкретных данных (по идентификатору)● Обновление только изменных данных

Page 14: Magento - Антон Капля

Пример: Количество продуктов

Закешируем запрос с количеством продуктов/** @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 - Антон Капля

Пример: Количество продуктов

По умолчанию нам доступна команда обновления всех данных$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 - Антон Капля

Обновление только изменных данных

● Логирование изменяемых данных.● Мадженто использует триггеры баз данных

Page 17: Magento - Антон Капля

Пример: Активация лога изменений

Подготовим таблицу которая будет накапливать изменения:

Активируем лог указав интересующую нас таблицу и колонку

$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 - Антон Капля

Метаданные

Page 19: Magento - Антон Капля

Пользовательский сценарий

● Сложная подготовка данных ● Enterprise_Mview_Model_Action_Interface● Индексаторов в Мадженто

Page 20: Magento - Антон Капля

Досадные ограничения

● MySQL Bug #11472 Triggers not executed following foreign key updates/deletes

● Инвалидация продиктованная бизнес логикой

Page 21: Magento - Антон Капля

Альтернатива

● CDC (Change Data Capture) и разбор mysqlbinlog

● Flexviews

Page 22: Magento - Антон Капля

Вопросы

Page 23: Magento - Антон Капля

Спасибо за внимание!!!