我们开发了一些具有大量库存记录的magento项目,并且始终会遇到索引问题,我们一直在尝试尝试在互联网上找到的所有解决方案,以解决日常索引问题,例如截断平面图并使用CLI重新编制索引,将cron设置为索引编制,但这是我们面对索引编制问题的日常头痛。
当我们在项目上工作时,我们正在寻找永久性的解决方案,这些项目有不同的场景,例如每天更新产品或每天从其他饲料中导入产品。
对此有一些最佳做法或解决方法的任何人,请与他们分享,将不胜感激。
我们开发了一些具有大量库存记录的magento项目,并且始终会遇到索引问题,我们一直在尝试尝试在互联网上找到的所有解决方案,以解决日常索引问题,例如截断平面图并使用CLI重新编制索引,将cron设置为索引编制,但这是我们面对索引编制问题的日常头痛。
当我们在项目上工作时,我们正在寻找永久性的解决方案,这些项目有不同的场景,例如每天更新产品或每天从其他饲料中导入产品。
对此有一些最佳做法或解决方法的任何人,请与他们分享,将不胜感激。
Answers:
重要的是要了解哪些索引比较慢以及为什么
目录的复杂性以及最终的商店架构将决定重新索引需要多长时间-并与基础架构结合在一起。
如果您有50,000种产品和10个商店视图,则可以保证处理几百万行catalog_url_rewrite
需要时间。
如果你有100个产品,但5000点的属性,可以保证catalog_attributes
或catalog_product_flat
表将采取年龄重建,或落在平在其正面
如果您有1,000种产品,但有500种可搜索的属性,catalog_fulltext_search
则将需要一段时间才能完成
解决您面临的每一个问题的方法都不是一刀切,这与正确构建商店有关;拥有合适的基础架构来支持它,并使用重新索引的频率/策略来支持内容的新近度和性能。
还需要评估是否甚至需要某些索引。使用固定产品/类别并不总是使所有商店都更快。我们已经看到它使商店的速度变慢了。因此,您可能会在测试前后的性能之后发现它们甚至都不是考虑因素。
tl; dr
没有解决方案。我建议有一些解决方法Sonassi_Fastsearchindex
-但这是专门用于目录搜索的。
也许在保存时禁用索引更新-安排运行一整夜-会有所缓解吗?结合添加更多的缓存-memcached,Redis,APC-以及像Varnish这样的全页缓存(如果您正在运行CE)可能会帮助您入门。如果您打算使用Varnish,请在Nexcess_Turpentine
github上查找快速入门。
更多信息
索引问题-特别是catalog_url_rewrites-在社区中是众所周知的并记录在案。Magento在企业版中处理了这些问题,因为这些是受影响最严重的客户。许多EE客户拥有超过1万种产品,并拥有多个商店视图,网站等。
但是,如果您的目录很大且属性很多,则可能会发现索引将花费很长时间(特别是catalog_url_rewrite,product_flat),在这种情况下,我的建议是不修复索引运行时间长度,而是减轻一些处理的负担,使盒子花费CPU周期索引而不是提供内容。
要问自己的问题:
对于此特定问题,没有灵丹妙药的解决方案-作为解决方案提供商,您应该帮助您的客户做出最能改善销售和业务,同时保持较低间接成本的决定。
备择方案
将目录搜索卸载并分层导航到Solr。
水平缩放。添加更多Apache / nginx服务器。更多的服务器=更多的并发吞吐量。这不是1:1。Nexcess在此处提供了有关性能和Apache配置的出色白皮书:http : //www.nexcess.net/magento-best-practices-whitepaper
而且,如果您选择使用Varnish,请记住:
在大多数笨重的Magento网络商店中,要使Magento后端索引管理正常工作非常困难。我经常遇到这个问题。开发人员一直在运行shell脚本通常很忙。通常,我确实会像这样永久解决此问题。
我创建一个新的shell / indexer.php> shell / myindexer.php副本
在第154行附近自定义shell / myindexer.php
} else if ($this->getArg('reindex') || $this->getArg('reindexall')) {
至
} else if ($this->getArg('reindex') || $this->getArg('reindexall') || $this->getArg('reindexallrequired') ) {
然后在166行附近添加此检查
//reindex only if required
if( $this->getArg('reindexallrequired') && $process->getStatus() == Mage_Index_Model_Process::STATUS_PENDING )
continue;
之前
$startTime = microtime(true);
$process->reindexEverything();
$resultTime = microtime(true) - $startTime;
Mage::dispatchEvent($process->getIndexerCode() . '_shell_reindex_after');
然后将新的Shell脚本添加到cpanel cron中,以每5分钟运行一次
/home/public_html/shell/indexer.php --reindexallrequired >/dev/null
由于上述shell脚本每5分钟运行一次,并且仅对需要重新索引的进程重新编制索引,因此降低了服务器cpu负担沉重的风险,并且整个重新编制索引的过程非常快。如果没有进程需要重新编制索引,它将根本不运行重新编制索引的过程。另外,请记住在“索引管理”页面中将重新索引编制模式设置为“保存时更新”。如果您不知道,可以在“操作”>“提交”按钮旁边的更改索引模式下获得此选项。
如果您可以提供更多数据(库存量,访客,机器),会更容易说,但是有可能:
Sonassi_Fastsearchindex
扩展作为目录搜索索引。尽管它只是索引标题,描述和sku(我想我已经注意到了),但是它很好用,并减少了catalogsearch索引器的时间。它在Magento CE 1.7.0.2上运行;不过还是很痛苦;)
使用Dnd_Patchindexurl,我能够将catalog_url_rewrite重新索引时间减少到将近70%
我认为这是一个很好的解决方案,可以将禁用的产品或不可见的产品排除在外而创建URL!
$ php ./shell/indexer.php -reindexall
Product Attributes index was rebuilt successfully in 00:00:11
Product Prices index was rebuilt successfully in 00:00:22
Catalog URL Rewrites index was rebuilt successfully in 00:08:49
Product Flat Data index was rebuilt successfully in 00:00:51
Category Products index was rebuilt successfully in 00:00:19
Catalog Search Index index was rebuilt successfully in 00:00:12
Stock Status index was rebuilt successfully in 00:00:00
Tag Aggregation Data index was rebuilt successfully in 00:00:00
后:
$ php ./shell/indexer.php -reindexall
Product Attributes index was rebuilt successfully in 00:00:12
Product Prices index was rebuilt successfully in 00:00:24
Catalog URL Rewrites index was rebuilt successfully in 00:02:52
Product Flat Data index was rebuilt successfully in 00:00:57
Category Products index was rebuilt successfully in 00:00:25
Catalog Search Index index was rebuilt successfully in 00:00:13
Stock Status index was rebuilt successfully in 00:00:00
Tag Aggregation Data index was rebuilt successfully in 00:00:00
我在1.9.1.1上安装了它,并且工作得很好!
也可以通过Connect安装http://www.magentocommerce.com/magento-connect/catalog/product/view/id/15074/s/dn-d-patch-index-url-1364/category/12863/
升级到EE 1.13。在此版本中,索引器得到了很大的改进。