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

1,614 views

Published on

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,614
On SlideShare
0
From Embeds
0
Number of Embeds
970
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. Magentocommerce.com «Доклад о Magento» Капля Антон
  2. 2. О себе ● Капля Антон ● Сотрудник консалтингового отдела (aka ECg) ● Работаю в Мадженто более трех лет ● Был замечен в таких проектах как ● Ford (Мадженто которая работает с SQL Server) ● Регулярных релизах (1.11-1.13) ● И прочем непотребстве….
  3. 3. О презентации ● Новые фичи в Мадженто ● Aгрегация и денормализация ● Оценим новые индексаторы ● Сварганим пару простых примеров
  4. 4. Чего нового в Мадженто 1.13 ● Расширенная библиотека для работы с базой данных ● Материализация запросов ● Индексаторы
  5. 5. Библиотека управления объектами БД ● Декомпозиция адаптера базы данных ● SQL конструкторы ● Управляющие объекты
  6. 6. Пример: создание триггера 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); SQL CREATE TRIGGER trg_tag_before_insert AFTER INSERT ON tag FOR EACH ROW BEGIN INSERT INTO new_tag (tag_id) VALUES (NEW.tag_id); END;
  7. 7. Материализованное представление ● Материализированое представление — объект базы данных содержащий результат выполнения запроса. ● Основная задача — организация сложно согласованных данных для для быстрого доступа к ним. ● Доступ к данным материализированого представления может быть оптимизирован посредством индексов.
  8. 8. Где это нужно ● Сложные запросы ● Отчеты ● Агрегация данных ● Интеграции уровня БД
  9. 9. Концепт ● View для хранения кешируемого запроса ● Таблицы для кеширования данных ● Логику управления перелоижм на PHP
  10. 10. Реализация в Мадженто
  11. 11. Примеры использования в Мадженто /** @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 )); Создание нового мат. представления:
  12. 12. Реализация в Мадженто
  13. 13. Сценарии обновления ● Обновление всех данных ● Обновленние конкретных данных (по идентификатору) ● Обновление только изменных данных
  14. 14. Пример: Количество продуктов Закешируем запрос с количеством продуктов /** @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 ));
  15. 15. Пример: Количество продуктов По умолчанию нам доступна команда обновления всех данных $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 ));
  16. 16. Обновление только изменных данных ● Логирование изменяемых данных. ● Мадженто использует триггеры баз данных
  17. 17. Пример: Активация лога изменений Подготовим таблицу которая будет накапливать изменения: Активируем лог указав интересующую нас таблицу и колонку $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', ));
  18. 18. Метаданные
  19. 19. Пользовательский сценарий ● Сложная подготовка данных ● Enterprise_Mview_Model_Action_Interface ● Индексаторов в Мадженто
  20. 20. Досадные ограничения ● MySQL Bug #11472 Triggers not executed following foreign key updates/deletes ● Инвалидация продиктованная бизнес логикой
  21. 21. Альтернатива ● CDC (Change Data Capture) и разбор mysqlbinlog ● Flexviews
  22. 22. Вопросы
  23. 23. Спасибо за внимание!!!

×