2012-02-15 73 views
2

當我的C#,WPF UI啓動時,其中一個選項卡在加載時調用此代碼。顯示的最新數據是2012年2月11日,即使2012年2月15日有InstallationSummary文檔。當我點擊刷新按鈕時,調用完全相同的代碼,只是這次顯示最近的結果。同一個代碼如何產生兩個不同的結果?第二次嘗試後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 2012-02-16 00:42:42

+0

@Zenue:謝謝,但我不需要去嘗試,因爲Daniel在下面提供了答案。 – 2012-02-16 01:22:16

回答

4

聽起來像一個陳舊的索引問題。嘗試添加此行,看看是否有幫助

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

更新:這是更好地使用WaitForNonStaleResultsAsOnNow()比WaitForNonStaleResults()

編輯:這是爲什麼?
原因是,您的查詢將創建一個臨時索引,在一段時間不活動後自動將被刪除。此外,它們將無法在RavenDB重新啓動時存活。查詢

  • 等待烏鴉去當

    • 推動指數使用管理工作室

    • 你的應用程序中創建一個索引,使用該索引是永久的:現在你有幾個選項自我優化並自動提升索引(這隻會在查詢運行頻率足夠的情況下發生,這在您的情況下似乎不太可能)

    • 使用.WaitForNonStaleRes ULS()如上面概述(這是最差,因爲它可以對應用程序的性能非常不利的影響,而且也沒有必要,因爲其他選項好得多)

  • +0

    即使在我已經檢索到最新版本之前,舊的索引是否仍然如此?我可以獲得正確的結果,關閉應用程序,重新打開並再次查看舊結果。陳舊的索引會導致這種情況嗎?這可能會在幾個小時後發生......順便說一下,我會稍微嘗試一下...... – 2012-02-16 01:08:35

    +0

    這樣做了。謝謝。即使在過去幾個小時內多次獲得最新數據後,我也不明白如何/爲什麼索引可能陳舊。也許就是這樣。 – 2012-02-16 01:21:41

    +0

    鮑勃,請參閱我上面的編輯。 – 2012-02-16 02:22:08

    相關問題