Проект с использованием RavenDB строится очень медленно.Я делаю что-то неправильно? - PullRequest
1 голос
/ 23 марта 2012

Я работаю над новой CMS с открытым исходным кодом, встроенной в asp.net mvc 4. Это личный проект, в основном для улучшения моих навыков, а также для изучения RavenDB.Первоначально я начал создавать его с использованием EF Code и 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);

Вот пара моих индексов.У меня сейчас только одна карта / уменьшение, остальные просто используют карты.

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 секунд, чтобы ответить.Есть мысли?

Извините за длинный пост.Я ценю любую помощь.

1 Ответ

3 голосов
/ 23 марта 2012

Перемещение части ответа из ветки комментариев.Все еще не уверен насчет времени сборки, но с точки зрения создания индекса ...

Вам нужен только один вызов CreateIndexes ().Вы передаете ему ссылку на целую сборку, и она сканирует все индексы, содержащиеся в сборке, и создает их все.
Отправленный вами код будет создавать каждый индекс 7 раз.

...