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

将数据迁移到Sitecore CMS时的优化提示,sitecore,sitecore6,Sitecore,Sitecore6,我目前面临的任务是将大约20万个项目从定制CMS实现导入Sitecore。我创建了一个简单的导入页面,该页面使用EntityFramework连接到外部SQL数据库,并创建了所有必需的数据模板 在大约5K个项目的测试导入过程中,我意识到我需要找到一种方法使导入运行得更快,因此我开始寻找一些关于为此优化Sitecore的信息。我的结论是,没有太多的具体信息,所以我想分享我的发现,并为其他人进一步优化做准备。我的目标是为Sitecore创建某种维护模式,以便在导入大量数据时使用 我在马克·卡西迪的博

我目前面临的任务是将大约20万个项目从定制CMS实现导入Sitecore。我创建了一个简单的导入页面,该页面使用EntityFramework连接到外部SQL数据库,并创建了所有必需的数据模板

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

我在马克·卡西迪的博客上找到了最有用的信息。在这篇文章的底部,他提供了一些关于何时运行导入的提示

  • 如果要迁移大量数据,请尝试禁用尽可能多的Sitecore事件处理程序以及其他任何可以避免的方法
  • 使用BulkUpdateContext()
  • 别忘了你的目标语言
  • 如果可以,将字段设置为共享和未设置版本。这将有助于提高迁移执行速度
我从这个列表中注意到的第一件事是BulkUpdateContext类,因为我从来没有听说过它。我很快就明白了为什么在SND论坛和PDF文档中搜索时没有返回任何点击。所以想象一下,当我实际测试它并发现它将项目创建/删除至少提高了十倍时,我会有多么惊讶

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


你有哪些优化技巧

顺便说一句,BulkUpdateContext()是一个非常容易引起误解的名称,因为它确实提高了项目创建速度,而不是项目更新速度。但正如您也指出的,它大大提高了导入速度:-)

自从我写了那篇文章之后,我在做导入的时候在我的常规程序中添加了一些新的东西

  • 定期缩小数据库。它们往往变得又大又笨重。这样做;首先转到Sitecore控制面板->数据库并选择“清理数据库”。在此之后,在SQL server上定期执行ShrinkDB
  • 禁用索引,尤其是在导入“主”数据库时。有关参考,请参阅
  • 但是,请尽量不要导入到“master”中。。您通常会发现导入“web”的速度要快得多,主要是因为该数据库(默认情况下)未连接到HistoryManager或其他小工具
如果你真的很有冒险精神的话,有一件事你可以试试,我一直在考虑自己试试,但从来没有想到。它们可能会起作用,但我不能保证它们会起作用:-)

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

希望这有点帮助:-)

我猜您已经找到了这一点,但是将代码放在SecurityDisabler()块中也可以加快速度


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

好问题,好答案,非常有用的信息:)。谢谢导入到web?那么下次他点击发布按钮时会发生什么@Bryan我认为他的意思是在测试导入时导入到web数据库,然后在您满意的情况下对主数据库运行它为什么要使用ShrinkDB?除非磁盘是您的问题,否则您只是在为自己设置一些昂贵的文件增长操作。是的,它已经在SecurityDisabler块中运行。Sitecore性能无疑是我所担心的问题,但很早的测试表明它会处理好它。导入是为了一次性从旧CMS迁移,但我会在调整模板时运行几次。只要遵守基本规则,200K项目实际上不会给Sitecore安装带来问题。如果可能,树枝上的叶子不超过100片,以此类推。但即便如此;如果源CMS基于一些会使深度分支变得困难的东西,那么在上面加上lucene索引将使Sitecore能够轻松地导航结构;只需避免导入内容上的深层Sitecore查询表达式,并尽量远离XSLT即可