避免在产品属性值保存时无效产品平板表reindexing -- magento-1.7 领域 和 attributes 领域 和 indexing 领域 magento 相关 的问题

Avoid invalidating product flat table reindexing upon product attribute value save


简体版||繁體版
1
vote

问题

中文

magento 1.7。

我注意到,当您更新清单数量时,不需要对Catalog_Product_Flat的reindex。

这很有用,因为我可以设置一个Cron作业,每天晚上凌晨3点更新库存。导入20,000项的数据只需一分钟即可。如果需要reindex,它将至少添加10分钟。

现在,我想还显示估计抵达时间的售货量。我可以与库存数量同时导入数据。但是如果我为该日期创建常规属性,那么每次导入时,索引都将无效。这不是正确吗?

是否有任何方法我可以创建一种属性,如股票数量,即一个不需要任何reindexing?我知道在1.7中有一个库存状态指数,但似乎只是通过更改库存数量(我们使用Manage Stock = No)无效。

我认为是一个黑客,我可以使用"news_from_date" (无论如何,我们不使用)来保存该日期。

更新 我改变了问题标题,更好地反映了我的问题。

从根本上说,我想避免 catalog_product_flat_1 表reindex。为什么?因为它丢弃了表并重建它,而且虽然正是正是正常的。凭借70,000多项来驯鹿(更新),停机时间至少为5分钟。

为了避免reindexing,我建议创建一个像库存数量一样的属性,但也许这太难了。

保存每个产品并更新其索引条目如何?我认为通过更新查询,Catalog_Prodct_Flat_1表将继续工作,前端将继续工作。是正确的假设吗?

个人保存方法更新索引,或者它们使其使其无效?

只要Magento只是向平台索引发送更新查询,我认为前端将保持运行。一个完整的reindex会使前端不可用作一段时间。

英文原文

Magento 1.7.

I noticed that when you update inventory quantities, a reindex of catalog_product_flat is not required.

That's useful, because I can set up a cron job to update inventory every night at 3 am. Importing the data for 20,000 items only takes about a minute. If reindex was required, it would add at least another 10 minutes.

Now, I want to also show Estimated Time of Arrival dates for out of stock items. I can import the data at the same time as the stock quantities. But if I create a regular attribute for that date, then every time I import, the index will be invalidated. Isn't that correct?

Is there any way I can create an attribute that works like stock quantity does, i.e. one that doesn't require any reindexing? I know there is a stock status index in 1.7, but it does not seem to get invalidated by just changing stock quantities (we use Manage Stock = No).

I was thinking that as a hack, I could use the "news_from_date" (which we don't use anyway) to hold that date.

UPDATE I changed the question Title to better reflect what my problem really is.

Fundamentally, I want to avoid the catalog_product_flat_1 table reindex. Why? Because it drops the table and rebuilds it, and while that is happening the frontend is non-functional. With 70,000+ items to reindex (and more coming), the downtime is at least 5 minutes.

To avoid reindexing, I suggested creating an attribute that works like stock qty, but perhaps that is too hard to do.

What about saving each product and updating its index entry? I think that with UPDATE queries, the catalog_prodct_flat_1 table would continue working, and the frontend would continue working. Is that a correct assumption?

Do individual product saving methods update the index, or do they invalidate it?

As long as Magento is only sending update queries to the flat table index, I think the frontend would remain operational. A complete reindex renders the frontend unusable for some time.

        

回答列表

1
 
vote

如果只想在不运行索引器的情况下更新单个产品属性,请使用以下方法。可以通过这种方式更新每秒几百个产品。

首先,添加新产品属性 estimated_time_of_arrival
在您的更新脚本中:

  $product->addAttributeUpdate(     'estimated_time_of_arrival',     $date,     $storeId // numeric store id value, e.g. Mage::app()->getStore()->getId() );   

如果它是一个全局scope属性, $storeId 甚至都不重要。
如果您不关心商店ID范围,您也可以使用:

  $product->setData('estimated_time_of_arrival', $date)     ->getResource()     ->saveAttribute($product, 'estimated_time_of_arrival');   

两种方法是等效的(后者将使用 $product->getStoreId() 如果该属性具有网站或商店视图范围)。

当然,如果在某种方式使用该属性需要索引,则您将在更新后reindex。

 

If you only want to update a single product attribute without running the indexer, use the following method. It will be possible to update a couple of hundred products per second that way.

First, add a new product attribute estimated_time_of_arrival.
The, in your update script:

$product->addAttributeUpdate(     'estimated_time_of_arrival',     $date,     $storeId // numeric store id value, e.g. Mage::app()->getStore()->getId() ); 

If it's a global scope attribute, the $storeId doesn't even matter.
If you don't care about the store ID scope, you can also use:

$product->setData('estimated_time_of_arrival', $date)     ->getResource()     ->saveAttribute($product, 'estimated_time_of_arrival'); 

Both methods are equivalent (the latter will use $product->getStoreId()if the attribute has a website or store view scope).

Of course, if you use that attribute in some way that requires indexing, you will have to reindex after the updates.

 
 
 
 
1
 
vote
股票库存库存数据被保存到另一个 cataloginventory_stock_item 表而不是产品eav属性,而不是必需的产品平面数据索引。但它触发了<强大>股票状态分度。因为您需要简单的方法是使用标准产品属性。但它需要产品平面数据索引在前端和商店使用平面目录产品表(请参阅 admin-&gt; system-&gt; catalog 设置)。
第二个选项使用另一个表来存储您的属性,但您应该在显示产品时使用其他查询加载这些属性。这是不正确的方法。
您可以在保存产品时关闭自动索引,并在更新商店产品后,您可以自动完成所有索引。查看逻辑:
   $files = glob("/tmp/zend_cache*"); foreach($files as $f) {         unlink($f); } 0  

更新

您可以使用此方法更新无索引的属性:

   $files = glob("/tmp/zend_cache*"); foreach($files as $f) {         unlink($f); } 1  
 

Stock inventory data is saved to another cataloginventory_stock_item table rather than product eav attributes and no required Product Flat Data indexation. But it triggers Stock Status indexation. For you needs easy way is using standard product attributes. But it requires Product Flat Data index when you want display these attributes on frontend and your store uses Flat Catalog Product table (see admin->system->config->catalog settings).
Second option is using another table to store your attributes, but you should load these attributes with additional query while displaying products. It is not right approach.
You can switch off auto indexation while saving products and after update your store products you can do all index automatically. See logic:

//switch index mode to manual $pCollection = Mage::getSingleton('index/indexer')             ->getProcessesCollection(); foreach ($pCollection as $process) {    $process->setMode(Mage_Index_Model_Process::MODE_MANUAL)->save(); }  //here your product updating logic foreach($products as $product){     $product->setSomeValue('some value')->setAnotherValue($anotherValue);     try{        $product->save();     }catch(Exception $e){        Mage::logException($e);     } } //product updating ends here  //switch index mode to real time and reindex foreach ($pCollection as $process) {     $process->setMode(Mage_Index_Model_Process::MODE_REAL_TIME)->save();     try{        $process->reindexEverything();     }catch(Exception $e){        Mage::logException($e);     } } 

Updated

You can use this method for updating attributes without indexation:

$productIds = array($product->getId()); // you can add several product ids to this array if their attribute-value pairs are same. $attributes = array('estimated_time_of_arrival' => $someValue);// you can add several attribute-value pair to this array. $storeId    = Mage::app()->getStore()->getId(); Mage::getSingleton('catalog/product_action')->updateAttributes($productIds, $attributes, $storeId); 
 
 
 
 
0
 
vote

当我使用cron更新产品属性值时,我面临着一些类似的问题。这些产品在分类上市的前端显示"缺货" 。但它显示在后端的库存。

我发现这个问题是$ _product-&gt; getsalable()始终返回 false 。 我们如何解决这些问题?

 

I am facing somewhat similar issue, When i update product attribute value using cron. Those products shows "Out of stock" in front-end at category listing. But it shows in-stock in back-end.

I found the issue is with $_product->getSaleable() always return false. How can we resolve such issue?

 
 
 
 

相关问题

1  var /锁总是空的  ( Var locks is always empty ) 
我在Magento安装中看到了Var / Locks文件夹。但它始终是空的 - 即使是索引器正在运行。 我假设如果索引器触发多次触发,则会导致问题,这是正确的吗? 但我无法追踪为什么它总是留空。 Var / Locks设置为777 [Drwxrwxrwx] var /锁将由var / logs的同一用户拥有(...

2  类别URL重写损坏  ( Category url rewrites corrupted ) 
我在Enterprise_URL_REWRITE中被损坏的URL,如下所示: category/subcategory.html-274 注意,数字在后缀之后。当我重新输入url_redirect过程时,数字递增到275。 任何身体都有任何想法? ...

0  8000+客户群体破坏网站  ( 8000 customer groups breaking site ) 
我知道上传这个很多客户组会减慢reindexing,而且我正在索引缓慢,但现在加载我的客户标签差不多2分钟。 它也杀死了整个地方的过程,随机崩溃了网站。 我需要这个以实现每位客户的价格,因为存在的插件不适用于我需要的东西。 有什么我可以做的吗?向索引者提供更多带宽以某种方式? 感谢 ...

47  价格重新指数在结账时导致DB死锁  ( Price re index causes db deadlocks during checkout ) 
我遇到了一个问题,在那里我认为产品价格重新索引过程导致结账过程中的死锁例外。 我在结账过程中抓住了这个例外: 订单转换异常:sqlstate [40001]:序列化失败:尝试锁定时发现1213个死锁;尝试重新启动事务 不幸的是,由于捕获了异常的位置,我没有完整的堆栈跟踪,但检查InnoDB状态我能够追踪死锁: ...

1  产品偶尔会消失  ( Products occasionally disappear ) 
客户已经提到了一个不可能重新产生的错误,因此只留下基于理论的解决方案。 我以为我会检查其他人是否偶然发现了这个问题并使用了指导或解决方案。 网站大纲 我们的客户已有 60,000 +产品 超过40个网站(在单一的Magento构建中) 当它们运行重新索引时,需要最多需要4个小时(是的,我们的导入脚本禁用重新...

1  什么会导致目录重写索引器需要在完成后立即刷新?  ( What would cause catalog rewrites indexer to need refreshed immediately after it ) 
在重新筛选目录URL重写之后,Magento表示我们需要再次纠正它们。我正在使用命令行以将indexer.php作为后台任务运行: nohup php indexer.php --reindex catalog_url > /home/ubuntu/rewrites_index_20130218 2> /home...

5  目录索引需要3到4天  ( Catalog indexing take 3 to 4 days ) 
我对CLI的手动索引有关的问题,我的命令 php indexer.php reindexall将需要3到4天来强制索引。 这里是当前目录的一些状态。 商店数量4 类别300 + 产品数量40000 + 每个产品的属性数200 + page11>(创建平面图约300+列) 我正在使用Mamgi工具导入...

3  以编程方式锁定索引器  ( Locking indexer programmatically ) 
我尝试使用此代码锁定我的索引器,因为我曾经做过: <?php $_items = $_order->getItemsCollection(); ?> <?php $_index = 0; ?> <?php $_count = $_items->count(); ?> <?php $_giftMessage = '...

1  为什么产品不会被索引?  ( Why would product not be indexed ) 
我有一个可配置的产品,可在目录中启用,可见,搜索。它有一个儿童产品,也能够拥有和库存。但前端不可见产品。 我发现这是因为它不在平板上。不是它在任何索引表中出现。什么可能导致它是如此由magento忽略的产品? ...

1  magento 2:迁移后,客户reindex不起作用  ( Magento 2 after migration customer reindex is not working ) 
这是我从终端索引上索引的问题。 column 'created_in' used in key specification without a key length, query was: CREATE TABLE IF NOT EXISTS `customer_grid_flat` 请帮助我解决这个...

1  避免在产品属性值保存时无效产品平板表reindexing  ( Avoid invalidating product flat table reindexing upon product attribute value sa ) 
magento 1.7。 我注意到,当您更新清单数量时,不需要对Catalog_Product_Flat的reindex。 这很有用,因为我可以设置一个Cron作业,每天晚上凌晨3点更新库存。导入20,000项的数据只需一分钟即可。如果需要reindex,它将至少添加10分钟。 现在,我想还显示估计抵达时间的售货量...

2  Magmi似乎没有更新价格指数? [关闭]  ( Magmi doesnt seem to update the price index ) 
关闭。这个问题是 off-topic 。它目前不接受答案。 想要改进这个问题?更新问题,所以它是对于magento堆栈交换。 关闭 5年前。 ...

10  Reindex单产品  ( Reindex single product ) 
我想在更新后reindex单一产品。 现在我使用: $product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'foobar'); // edit something $product->save(); $stockItem = M...

2  在冲突的URL路径冲突的情况下,有哪些规则管理哪个实体“赢”  ( What are the rules that govern which entity wins in the case of conflicting ur ) 
如果多个实体(例如类别,产品,CMS页面和模块FrontName)所有尝试使用相同的SEF URL,那么Magento用于决定哪些算法或进程将保存在中core_url_rewrite 具有所需的 request_path ,它将附加的后缀解析冲突(例如'sale-123.html')。 提出问题另一种方式,如果一个C...

2  重新计算产品的价格(应用“目录价格规则”)  ( Recalculating a products price applying catalog price rules ) 
我有一个模块,可直接在数据库中更改产品的价格。我想要 catalog price rules ,我们网站上的各种折扣,在我更新基本价格后应用于产品的价格。 保存项目,无论是在管理区域还是 ->save() 呼叫设置价格,但它需要太长时间才能保存我们所需要的所有项目。我想重新计算折扣价格而不做别的。 我已经尝试了各种"...

1  替代索引解决方案,是否有任何建议?  ( Alternative indexing solution is there any suggestions ) 
原来的魔法索引恰好是如此慢,在我的情况下我有数百万的skus需要被索引,转换为平台桌和amp; URL重写。 我不是在谈论搜索索引。 原始洋光盘索引需要多天&amp;然后它停止 在代码中挖掘后,我看到了它非常复杂的任务,通常它删除所有 99887661 表,导致网站脱机 有关自定义索引器的任何建议,更快的索引器??...

1  在我的男人类别中,其他类别产品显示我只分配6个产品,但我不知道为什么40个产品显示  ( In my mens category other category product is showing i only assign 6 products ) 
在我的男人类别中,其他类别产品显示我只分配6个产品,但我不知道为什么40个产品在这里显示,请帮助我。 我只将6个产品分配给我从菜单和产品功能检查的此类别,但我没有找到任何解决方案。 让我们假设我有一个类别,衣服和这个类别有一个子类别的T恤。 现在我将产品添加到T恤类别(通过选中添加产品屏幕中的框),但我不检查服装类别...

3  Magento 1.9.3.2搜索返回空结果  ( Magento 1 9 3 2 search returns empty result ) 
升级后,Magento搜索不起作用。 我尝试过这个 https://magento.stackexchange.com//67952 选择 e 。*, search_result 。 relevance , price_index 。 price , price_index 。 tax_class_id , ...

3  Enterprise 1.14.0.1 - 搜索索引标记处理时不实际处理  ( Enterprise 1 14 0 1 search index marked processing when not really processing ) 
这已经开始发生在Enterprise 1.14.0.1的几次上,我想知道有人是否经历过同样的问题。我注意到"目录搜索索引" 在admin中列为"处理" 。我做了在"var /锁" 中删除任何杂散锁定文件的通常步骤,它仍然存在。 如果我看 index_process 我可以看到"catalogsearch_fullte...

1  Reindex价格问题(价值清单与列列表不匹配)  ( Reindex price issue value list does not match column list ) 
有人使用了Innoext_advance pricing模块吗? 升级到magento 1.7 reindex崩溃或插入无效数据。 崩溃堆栈跟踪: Exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[21S01]: Insert value...

0  找不到基表或视图:1146表'cpaneluser_magento.catalog_category_flat'不存在'  ( Base table or view not found 1146 table cpaneluser magento catalog category fl ) 
在尝试reindex catalog_category_flat(类别平面数据)时我正在遇到以下错误。我确实尝试使用phpmyadmin和magento数据库修复工具修复数据库,但仍未修复。你可以调查错误,让我知道是否有其他方法来解决问题? Stack trace: #0 /home/cpaneluser/pub...

2  Google索引HTTPS用于主页 - 解决方案?  ( Google indexing https for homepage solutions ) 
似乎谷歌已经开始索引我网站的主页的安全网址 - 这导致了CSS和JS链接打破了la https - 布局破碎,但我不确定如何解决它,因为该线程中的答案没有解释需要改变的内容,而且我甚至不会知道在哪里以Google 开头 是否有人知道一个解决方案,可以停止谷歌索引安全的主页,或者该做什么,以允许CSS和JS文件具有...

3  产品保存的reidex [复制]  ( Reindex required on product save ) 
这个问题已经在这里有答案: magento企业:产品不重新显示产品保存 (2个答案) ...

2  关闭禁用产品的URL重写索引  ( Turn off url rewrite indexing for disabled products ) 
如何关闭在Magento 1.9中的禁用产品索引的目录URL索引? ...

9  父类别在子类别中显示产品,即使产品未分配给父类别  ( Parent category is showing products in subcategories even though product was no ) 
让我们假设我有一个类别,衣服和这个类别有一个子类别的T恤。 现在我将产品添加到T恤类别(通过选中添加产品屏幕中的框),但我不检查服装类别。所以,我认为这意味着该产品只会出现在前端的T恤类别中,而不是在父类别服装中。 但是,产品出现在服装和T恤类别中。 这是一个问题,因为T恤类别是"包括导航菜单中" &gt;没有类别,...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有