2011-06-29 10 views
3

Raven DBで新しい文書をポーリングします。これを行うための推奨される方法は何ですか? IndexTimestampを使用することはできますか、またはドキュメントの順序に頼ることはできますか?RavenDBでの新しい文書のポーリングに関するアドバイス

私は2つのステップでそれをやりたいと思います: 1.何か新しいものがあるかどうか確認してください。もしそうなら、 1.1。最新のXドキュメントを入手してください。

または一歩:最新のXドキュメントを入手して返すか、私が送ったいくつかの議論には何も新しいことはないと教えてください。

FYI:ドキュメントに対応するCLRオブジェクトがありません。

+2

は、データベースをポーリングすることを余儀なくされていることをあなたのアーキテクチャようになっているのに役立ちます?あなたが取ることができるもう1つのアプローチは、データベースにイベントを書き込んで、そのイベントを処理することです。 –

+0

LinusK、 smugglerユーティリティを使用して、これをどのように行うかを見てみるとよいでしょう。 あなたが望むものを明示的に行い、最後に見たものから最新の文書を入手しています。 そのコードは次のとおりです。 https://github.com/ravendb/ravendb/blob/master/Raven.Smuggler/Smuggler.cs –

答えて

1

私はそれをポーリングしませんが、RavenDBに含まれているChanges APIを使用して、RavenDBから連続したドキュメントストリームを取得します。

私は個人的に確認してくださいすべての変更が処理され、弾力されていることを確認するメッセージバス(RabbitMQの)のいくつかの種類を変更APIを使用することになり、ここでhttp://ravendb.net/docs/2.0/client-api/changes-api

を変更APIをチェックしてください。

まだポーリングしたい場合は、日付時間でインデックスを作成し、降順でソートしてください。

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

あなたはすべてのドキュメントを処理する必要がある場合は、あなたが取得し、それらが処理されていないことを確認した文書のIDが含まれるマーカーの文書を作成することもできます。

はそれを行うには:

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 
} 

あなたのためのいくつかのオプションを、希望:)

関連する問題