2011-06-29 54 views
3

我想在我的Raven DB中輪詢新文檔。推薦的方法是什麼?我可以使用IndexTimestamp還是可以依賴文檔的順序?關於在RavenDB中輪詢新文檔的建議

我想我要麼做兩步: 1.檢查是否有新東西,如果是這樣的話: 1.1。獲取最新的X文檔。

或者在一個步驟中:獲取最新的X文檔並讓它返回這些文檔,或者告訴我根據我發送的一些參數沒有什麼新內容。

僅供參考:我沒有相應的文檔CLR對象。

+2

是您的架構,使得你不得不輪詢數據庫?您可以採取的另一種方法是在數據庫中聆聽寫入事件並對其執行操作。 –

+0

LinusK, 你可能想看看我們如何用走私工具來做到這一點。 它明確地做你想要的,從最後一次看到以來得到最新的文件。 代碼爲: https://github.com/ravendb/ravendb/blob/master/Raven.Smuggler/Smuggler.cs –

回答

1

我不會爲此進行調查,但我會使用RavenDB附帶的Changes API從RavenDB中獲取連續的文檔流。

退房變化API這裏http://ravendb.net/docs/2.0/client-api/changes-api

我個人使用帶有某種消息總線(RabbitMQ的)的變化API,以確保每一個變化被處理和彈性。

如果您仍然想要投票,只需使用您的日期時間創建索引並按降序排序。

var result = session.Query<Orders>() 
        .OrderByDescending(x => x.Created) 
        .Take(10) 
        .ToList(); 

如果您需要處理每個文檔,您可能需要創建標記文檔,其中包含所獲得文檔的標識並確保它們未被處理。

爲了做到這一點:

marker id : polling/processed/order/1 

指數:

from o in orders 
let processed = LoadDocument("polling/processed/" + o.Id) 
select new { 
    WasProcessed = processed != null, 
    Created = o.Created 
} 

你有幾個選項,希望幫助:)