我正在开发一个内置于asp.net mvc 4的新开源CMS。这种个人项目主要是为了提高我的技能并尝试学习RavenDB。我最初开始使用EF Code first和Sql compact edition构建它。然后我开始学习RavenDB,所以我直接进入并将数据存储重新编写到RavenDB。但是,我注意到随着我越来越多地进入它,我的解决方案和项目在Visual Studio中构建的时间越来越长,甚至在初始网站启动时运行的时间越来越长。使用EF和SQL CE时不是这种情况。我知道应用程序开始加载新文档存储并创建索引有很大的打击,但是当我添加更多索引时,它似乎需要更长时间,而且我不明白这会如何减慢实际速度构建解决方案文件。我想也许我在这里做错了。我使用的是asp.net mvc 4和RavenDB build 700。
我想知道这是否与我的索引有关,因为它是在我开始向项目添加索引时开始的。也许我正在创造它们错误或编码错误???这是我创建索引时的代码,以及几个索引示例。
// Register RavenDB Indexes
IndexCreation.CreateIndexes(typeof(Posts_BySlug).Assembly, Store);
IndexCreation.CreateIndexes(typeof(Posts_ByCategorySlug).Assembly, Store);
IndexCreation.CreateIndexes(typeof(Categories_BySlug).Assembly, Store);
IndexCreation.CreateIndexes(typeof(PostTypes_BySlug).Assembly, Store);
IndexCreation.CreateIndexes(typeof(Accounts_ByEmail).Assembly, Store);
IndexCreation.CreateIndexes(typeof(Settings_ByName).Assembly, Store);
IndexCreation.CreateIndexes(typeof(Posts_ByParentID).Assembly, Store);
以下是我的几个索引。我现在只有一个Map / Reduce,其余只使用Maps。
public class Posts_ByParentID : AbstractIndexCreationTask<Post>
{
public Posts_ByParentID()
{
Map = posts => from post in posts
select new { ParentID = post.ParentID, Status = post.Status };
}
}
public class PostTypes_BySlug : AbstractIndexCreationTask<PostType>
{
public PostTypes_BySlug()
{
Map = postTypes => from postType in postTypes
select new { Slug = postType.Slug };
}
}
您可以看到非常基本的索引。到目前为止我只有9个。项目加载后,我在每个请求大多运行1个查询,后端运行1-3个。总响应时间均低于1秒。这只是初始应用程序启动最多可能需要45秒,而解决方案构建时间最长可达45秒,而使用EF时则为5秒。我只是不希望它变得更糟。此外,我注意到如果我的网站闲置5-10分钟,那么当我请求新页面时,需要另外30-45秒才能响应。有什么想法吗?
对不起,很长的帖子。我感谢任何帮助。
答案 0 :(得分:3)
从评论主题中移出部分答案。仍然不确定构建时间,但在索引创建方面......
您只需要一次CreateIndexes()调用。您将它传递给整个程序集,并扫描程序集中包含的所有索引并创建它们 您发布的代码将创建每个索引7次。