2011-06-29 31 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 
} 

你有几个选项,希望帮助:)