Ravendb запрос правильные результаты после второй попытки

StackOverflow https://stackoverflow.com/questions/9303144

  •  25-10-2019
  •  | 
  •  

Вопрос

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

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 документов по установке, и производительность в порядке. Это точность, с которой у меня проблемы.

Это было полезно?

Решение

Похоже на устаревшем индексе. Попробуйте добавить эту строку и посмотреть, поможет ли это

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

Обновление: лучше использовать waitfornonstaleresultsasonnow (), чем wabtfornonstaleresults ()

РЕДАКТИРОВАТЬ: Почему это?
Причина в том, что ваш запрос создаст временный индекс, который автоматически будет удален после некоторого времени бездействия. Кроме того, они не выживут в перезапуске Ravendb. Теперь у вас есть несколько вариантов:

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

  • Создайте индекс в вашем приложении и используйте этот индекс при запросе

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top