2012-02-15 5 views
2

Когда мой C#, WPF UI запускается, одна из вкладок вызывает этот код при загрузке. Самые последние данные отображаются 11 февраля 2012 года, хотя есть документы InstallationSummary за 15 февраля 2012 года. Когда я нажимаю кнопку обновления, этот точный код вызывается, только на этот раз отображаются самые последние результаты. Как может тот же код производить два разных результата?Правильные результаты запроса RavenDB после второго попытки

IQueryable<EntityBase> installationSummaries = 
    QueryAndSetEtags(session => session.Query<InstallationSummary>() 
    .Include(x => x.ApplicationServerId) 
    .Include(x => x.ApplicationWithOverrideVariableGroup.ApplicationId) 
    .Include(x => x.ApplicationWithOverrideVariableGroup.CustomVariableGroupId) 
    .OrderByDescending(summary => summary.InstallationStart) 
    .Take(numberToRetrieve)); 

Примечание: У меня такая же проблема с другим запросом. Кажется, что я не спрашивал через некоторое время, я получаю неправильные результаты. Если я запрошу снова сразу после того, как я это сделал, я получаю правильные результаты. Мне интересно, нужно ли мне создавать индекс. Существует более 10 000 документов InstallationSummary, и производительность в порядке. Это то, с чем я столкнулся.

+0

Попробуйте это - не нагружайте результаты при загрузке вкладок. затем посмотрите, требуется ли ему один или два щелчка обновления для получения правильных результатов. Похоже на устаревший индекс. – ZVenue

+0

@ZVenue: Спасибо, но мне не нужно пытаться это, потому что Даниэль дал ответ ниже. –

ответ

4

Звучит как проблема с просроченным индексом. Попробуйте добавить эту строку и посмотреть, если это помогает

.Customize(x => x.WaitForNonStaleResultsAsOnNow()) 

Update: Лучше использовать WaitForNonStaleResultsAsOnNow(), чем WaitForNonStaleResults()

Edit: Почему это?
Причина в том, что ваш запрос создаст временный индекс, который автоматически будет удален после некоторого времени бездействия. Кроме того, они не переживут перезапуск RavenDB. Теперь у вас есть несколько вариантов:

  • продвигать индекс быть постоянным использованием студии управления

  • создать индекс внутри приложения и использовать этот индекс при запросе

  • подожди Ворон самостоятельно оптимизировать себя и автоматически продвигать индекс (это произойдет, только если запрос будет выполняться достаточно часто, что кажется маловероятным в вашем случае)

  • использовать .WaitForNonStaleRes ULS() вариант, как описано выше (это худший, потому что это может иметь очень негативное влияние на производительность приложений, и нет никакой необходимости, потому что другие варианты гораздо лучше)

+0

Может ли устаревший индекс по-прежнему иметь место, даже после того, как я уже получил последние данные? Я могу получить правильные результаты, закрыть приложение, снова открыть и увидеть старые результаты снова. Должен ли этот устаревший индекс? Это может произойти даже через несколько часов ... Кстати, я попробую это немного ... –

+0

Это сделало трюк. Спасибо. Я просто не понимаю, как/почему индекс может быть устаревшим, даже после получения последних, несколько раз, за ​​последние несколько часов. Может быть, так оно и есть. –

+0

Боб, пожалуйста, см. Мое редактирование выше. –

Смежные вопросы