RavenDB和一致性

时间:2017-07-24 08:19:16

标签: ravendb eventual-consistency

我是RavenDB的新手,并花了一些时间阅读细节。我对如何处理最终的一致性问题感到有些困惑。

假设网页用户正在创建某个内容。例如一个新的"案例"。 (即首先发送POST请求并在RavenDB中创建新文档)。一旦创建,用户就会被路由回到案例概述(即GET请求通过查询所有案例文档的乌鸦来获取所有案例)。现在我可以告诉我,我无法确定刚创建的案例文档是否会包含在此查询中,因为索引可能已过时?

对于其他用户,他们不太可能关心案例是否一次出现,因为他们很可能不知道它是在第一时间创建的,所以没关系。但是,如果案例概述中缺少实际创建案例的用户,则很可能会非常困惑。换句话说,这是一个必须解决的问题。

如何?

2 个答案:

答案 0 :(得分:3)

您可以使用WaitForReplicationAfterSaveChanges,请参阅:https://ravendb.net/docs/article-page/3.5/http/server/scaling-out/replication/write-assurance

答案 1 :(得分:0)

我通常会这样做:

public IQueryable<Foo> GetAllFoos(bool waitForUpdatedIndex = false)
{
    IRavenQueryable<Foo> ret = _documentSession.Query<Foo>();

    if (waitForUpdatedIndex)
        ret.Customize(q => q.WaitForNonStaleResultsAsOfNow());

    return ret;
}

如果用户之前添加了新项目,我会将true传递给waitForUpdatedIndex