我有項目導入器刪除所有項目子項目並創建新的子項目。最近我將它切換到存儲桶,現在我遇到了刪除問題。 我刪除項目使用:Sitecore - 刪除存儲桶子項目
myItem.DeleteChildren();
沒有桶大約需要20分鐘。現在大約需要1小時5k物品。我需要在刪除之前恢復存儲桶項目,然後再次同步? 什麼是刪除可拆卸物品的最快捷方式?
我有項目導入器刪除所有項目子項目並創建新的子項目。最近我將它切換到存儲桶,現在我遇到了刪除問題。 我刪除項目使用:Sitecore - 刪除存儲桶子項目
myItem.DeleteChildren();
沒有桶大約需要20分鐘。現在大約需要1小時5k物品。我需要在刪除之前恢復存儲桶項目,然後再次同步? 什麼是刪除可拆卸物品的最快捷方式?
你可以更進一步。通過禁用所有三種功能,我能夠在幾分鐘內導入30k。
using (new Sitecore.SecurityModel.SecurityDisabler())
{
using (new Sitecore.Data.Events.EventDisabler())
{
using (new ProxyDisabler())
{
//delete code here
}
}
}
如果存儲桶中有很多項目,它將在每個正在刪除的項目上執行事件。將您的刪除代碼放入事件禁用程序中:
using (new EventDisabler())
{
myItem.DeleteChildren();
}
這將停止所有發生的事件並且應該快得多。作爲一個警告 - 在執行此操作時索引不會立即更新,因此您可能希望在導入器運行後在主數據庫上運行索引更新。
另一種選擇是更新導入中的現有項目,而不是先刪除所有項目。
我可以以編程方式運行索引更新嗎? – petros
我的猜測是,您的刪除現在需要更長的時間,因爲存儲桶在刪除時正在更新索引。儘管您可以通過禁用您的.DeleteChildren調用中的事件來加速它,但仍需要更新爲您的存儲桶更新的索引才能正常運行。
所以要回答你的問題,沒有辦法加速它,同時仍然保留完整的功能。
如果你想在動作測試,請嘗試以下操作:
using(new EventDisabler()) myItem.DeleteChildren();
應該把刪除加速到它原來所在之處,但在桶的價格,將無法正常工作,直到索引建立完成。
我建議你採用一種集成方法,即不需要完全刪除和重建物品商店。
我可以以編程方式運行索引更新嗎? – petros
是的。但它也應該趕上它自己。最終。請注意;從進行導入和索引更新的時間開始,通過存儲桶API查詢的任何內容都會給出不一致/錯誤的結果。 索引重建:http://stackoverflow.com/questions/31419638/sitecore-refresh-index –
在調用DeleteChildren()之前可能(以編程方式)unbucket?我不知道總共需要多長時間,但可能比現在更快
當我添加存儲桶子項目時,是否必須像通常一樣使用與myBucket.Add()方法不同的東西?我添加了一些項目,並且我可以在Sitecore內容編輯器中找到它們 – petros
只需像正常一樣添加項目,它們就會放入存儲桶中。如果他們沒有自動進入桶,那麼你的模板沒有被設置爲標準值中的「桶」。 –