情况是这样的。
我使用的是magento 2.1.6企业版。在magento文档中,有人说“magento使用mysql数据库触发器在重新索引期间改进数据库访问”。
但我的问题是如果我使用没有触发器的数据库会发生什么。因为我计划把数据库移到googlecloudsql上。在googlecloud文档中,他们说如果要使用复制,就要避免触发器,因为它可能会导致复制中的不一致性。
什么是最好的才是最好的?
情况是这样的。
我使用的是magento 2.1.6企业版。在magento文档中,有人说“magento使用mysql数据库触发器在重新索引期间改进数据库访问”。
但我的问题是如果我使用没有触发器的数据库会发生什么。因为我计划把数据库移到googlecloudsql上。在googlecloud文档中,他们说如果要使用复制,就要避免触发器,因为它可能会导致复制中的不一致性。
什么是最好的才是最好的?
1条答案
按热度按时间yvt65v4c1#
magento使用mysql数据库触发器来改进重新索引期间的数据库访问。
magento不支持任何
custom triggers
因为自定义触发器可能会导致与将来的magento版本不兼容。magento索引机制在重新索引触发过程中使用状态值。
您可以在管理面板中检查索引器的状态
系统>新索引管理
或者手动使用命令行。查看索引器列表
要查看所有索引器的列表,请执行以下操作:
列表显示如下:
它是如何工作的?
简而言之,magento 2为每个
“Update by Schedule”
索引。这会触发任何
INSERT, UPDATE and DELETE
在实体的任何表上。在触发时,它们在特定的changelog表中创建一个具有实体id的新条目。
当cron作业运行时,它会将其mview\u state表的version\u id与change log表的version\u id进行比较。
将更新标记为已更改的所有实体的索引。特定实体的缓存也会失效(清除)。
触发器
当索引设置为“按计划更新”时,magento 2会为其创建一系列触发器。仅对于目录\产品\平面,就创建了30个触发器。
您在这里看到的3个触发器都响应表“catalog\u product\u entity”(请参阅表)中的更改。事件包括insert、update和delete。由于有10个表影响物化视图目录产品平面的内容,因此需要3 x 10=30个触发器来覆盖所有情况。
结论
如果您想以一种通过magento的管理面板无法实现的方式修改目录产品,或者通过phpmyadmin或脚本的直接sql查询可以更快地完成,这仍然是可能的,即使在生产webshop上也是如此。当然,您需要对magento的mysql表有很好的了解。但是,updatebyschedule中的部分重新索引技术确保了所有必要的索引和平面表都被更新,甚至特定的缓存也会失效。
参考文献:
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