将数据迁移到Sitecore CMS时的优化提示

时间:2011-03-22 01:29:00

标签: sitecore sitecore6

我目前面临的任务是将自定义CMS实施中的大约200K项目导入Sitecore。我创建了一个简单的导入页面,它使用Entity Framework连接到外部SQL数据库,并创建了所有必需的数据模板。

在测试导入大约5K项目时,我意识到我需要找到一种方法来使导入运行更快,所以我开始寻找一些有关为此目的优化Sitecore的信息。我的结论是,没有太多具体信息,所以我想分享我发现的内容,并为其他人提供进一步优化的基础。我的目标是为Sitecore创建某种维护模式,可以在导入大量数据时使用。

我找到的最有用的信息是Mark Cassidy的博文http://intothecore.cassidy.dk/2009/04/migrating-data-into-sitecore.html。在这篇文章的底部,他提供了一些关于何时运行导入的提示。

  • 如果要迁移大量数据,请尝试并禁用尽可能多的Sitecore事件处理程序以及您可以使用的任何其他内容。
  • 使用BulkUpdateContext()
  • 不要忘记您的目标语言
  • 如果可以,请使字段共享和无版本。这应该有助于迁移执行速度。

我从这个列表中注意到的第一件事是BulkUpdateContext类,因为我从未听说过它。我很快就明白为什么在SND论坛和PDF文档中搜索没有回复。所以想象一下,当我真正测试它并发现它可以将项目创建/删除改进至少十倍时,我感到惊讶!

我接下来要看的第一点是,他基本上建议创建一个只包含执行导入所需的基本要素的Web配置版本。到目前为止,我已删除了与创建,保存和删除项目和版本相关的所有事件。我还从web配置中的master数据库元素以及任何自定义事件,日程表和搜索配置中删除了历史引擎和系统索引声明。我希望有很多其他东西我可以去删除/禁用以提高性能。管道?时间表?

您有哪些优化提示?

2 个答案:

答案 0 :(得分:15)

顺便提一下,BulkUpdateContext()是一个非常具有误导性的名称 - 因为它确实提高了项目创建的速度,而不是项目更新速度。但正如你也指出的那样,它大大提高了你的导入速度: - )

自从我写这篇文章以来,我在进行导入时为正常的例程添加了一些新东西。

  • 定期缩小数据库。它们往往变得庞大而笨重。去做这个;首先转到Sitecore控制面板 - >数据库并选择“清理数据库”。在此之后,在SQL服务器上执行常规的ShrinkDB
  • 如果导入“master”数据库,则禁用索引尤其。有关参考,请参阅http://intothecore.cassidy.dk/2010/09/disabling-lucene-indexes.html
  • 尽量不要导入“master”但是..你通常会发现导入“web”要快得多,主要是因为这个数据库不是(默认情况下)连接到HistoryManager或其他小工具

如果你真的很冒险,那么你可以尝试尝试我自己一直在考虑尝试,但从来没有去过。他们可能会工作,但我不能保证他们会: - )

  • 尝试从App_Config / FieldTypes.config中删除所有字段类型。这里的理论是,这应该基本上禁用Sitecore对这些字段内容的所有特殊处理(比如更新LinkDatabase等)。完成导入后,您需要手动触发LinkDatabase的重建,但这是一个相对较小的代价

希望这有点帮助: - )

答案 1 :(得分:1)

我猜你已经知道了,但是将代码放在SecurityDisabler()块中可能会加速。

我会更担心Sitecore如何处理这么多数据...假设你只进行一次导入,谁关心这个过程需要多长时间。这会经常发生吗?