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() 之前取消存储?我不知道总共需要多长时间,但可能会比现在快
我有项目导入器,它删除所有项目子项目并创建新的子项目。最近我把它换成了桶,现在我在删除时遇到了问题。 我使用以下方法删除项目:
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() 之前取消存储?我不知道总共需要多长时间,但可能会比现在快