在MongoDB中,因果一致的会话是否需要读取可能回滚的数据?

时间:2018-06-20 18:12:35

标签: mongodb mongodb-query

如果我在MongoDB中使用因果一致的会话,我可以执行一个已确认的写入,该写入在写入多数之前被确认。因为得到确认的速度如此之快,所以我可以进行读取并查看写入结果。但是,由于我没有等待“多数”确认,因此我的写作是否可能会回滚,但我不知道,因为我所做的“阅读”并不依赖于大多数成员。集群实际上正在获取数据?

1 个答案:

答案 0 :(得分:0)

  

我可以执行一个已确认的写入,该写入在被写入多数之前会被确认,如果我的写入有可能被回滚

如果不是指定write concern majority,则可以,您的写操作可能会回滚。但是,如果是,则写入是 unacknowledged ,MongoDB不会为未确认的写入操作返回操作时间和集群时间。未经确认的写入并不表示任何因果关系。

此外,如果您指定retryable writes为true,则客户端将尝试一次重试。这有助于解决瞬态网络错误和副本集选择,但不能解决持久性网络错误。

  

我所做的“读取”不依赖于集群中的大多数成员实际获取数据吗?

Causally Consistent会话中,读操作将在写操作之后等待查看群集时间。

查看有关Implementation of Cluster Write Causal Consistency in MongoDB

的更多信息