【问题标题】:Advice on polling for new documents in RavenDB在 RavenDB 中轮询新文档的建议
【发布时间】:2013-11-05 22:30:37
【问题描述】:

我想在我的 Raven DB 中轮询新文档。推荐的方法是什么?我可以使用 IndexTimestamp 还是可以依赖文档的顺序?

我想我想分两步完成: 1.检查是否有新的东西,如果有: 1.1。获取最新的 X 文档。

或者一步:获取最新的 X 文档并让它返回这些文档,或者根据我发送的一些论点告诉我没有新内容。

仅供参考:我没有与文档对应的 CLR 对象。

【问题讨论】:

  • LinusK,您可能想看看我们是如何使用 smuggler 实用程序做到这一点的。它明确地按照您的意愿行事,获取自上次看到以来的最新文档。代码在这里:github.com/ravendb/ravendb/blob/master/Raven.Smuggler/…
  • 您的体系结构是否迫使您轮询数据库?您可以采取的另一种方法是监听数据库中的写入事件并对其采取行动。

标签: ravendb


【解决方案1】:

我不会轮询它,但我会使用 RavenDB 附带的 Changes API 来从 RavenDB 获取连续的文档流。

在此处查看更改 API http://ravendb.net/docs/2.0/client-api/changes-api

我个人会将 Changes API 与某种消息总线 (RabbitMQ) 一起使用,以确保每个更改都得到处理并具有弹性。

如果您仍想投票,只需使用您的日期时间创建一个索引并按降序排序。

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
}

给你一些选择,希望对你有帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多