Sitecore - 删除存储桶子项

Sitecore - delete bucket subitems

我有项目导入器,它删除所有项目子项目并创建新的子项目。最近我把它换成了桶,现在我在删除时遇到了问题。 我使用以下方法删除项目:

myItem.DeleteChildren();

没有水桶,大约需要 20 分钟。现在 5k 项大约需要 1 小时。我是否需要在删除之前还原存储桶项目然后再次同步? 删除可存储项目的最快方法是什么?

如果桶中有很多项目,它将对每个要删除的项目执行事件。将您的删除代码放入事件禁用器中:

using (new EventDisabler())
{
   myItem.DeleteChildren();
}

这将阻止所有事件触发,而且速度应该会快得多。作为一个警告 - 执行此操作时索引不会立即更新,因此您可能希望在您的导入器 运行.

之后 运行 在主数据库上更新索引

另一种选择是更新导入中的现有项目,而不是先删除所有项目。

我的猜测是,您的删除现在需要更长的时间,因为存储桶在删除时正在更新索引。虽然您可以通过禁用 .DeleteChildren 调用周围的事件来加快速度,但您仍然需要更新这些索引以使存储桶正常运行。

所以要回答你的问题,没有办法在加速的同时仍然保留全部功能。

如果您想在实际中对此进行测试,请尝试以下操作:

using(new EventDisabler()) myItem.DeleteChildren();

它应该可以将删除速度提高到以前的水平,但代价是存储桶无法正常工作,直到建立索引。

我建议您采用集成方法,不需要完全删除和重建您的物品商店。

你可以更进一步。通过禁用所有三个,我能够在几分钟内导入 30k。

using (new Sitecore.SecurityModel.SecurityDisabler())
{
    using (new Sitecore.Data.Events.EventDisabler())
    {
        using (new ProxyDisabler())
        {
            //delete code here
        }
    }
}

也许(以编程方式)在调用 DeleteChildren() 之前取消存储?我不知道总共需要多长时间,但可能会比现在快