如果我在MongoDB中使用因果一致的会话,我可以执行一个已确认的写入,该写入在写入多数之前被确认。因为得到确认的速度如此之快,所以我可以进行读取并查看写入结果。但是,由于我没有等待“多数”确认,因此我的写作是否可能会回滚,但我不知道,因为我所做的“阅读”并不依赖于大多数成员。集群实际上正在获取数据?
答案 0 :(得分:0)
我可以执行一个已确认的写入,该写入在被写入多数之前会被确认,如果我的写入有可能被回滚
如果不是指定write concern majority
,则可以,您的写操作可能会回滚。但是,如果是,则写入是 unacknowledged ,MongoDB不会为未确认的写入操作返回操作时间和集群时间。未经确认的写入并不表示任何因果关系。
此外,如果您指定retryable writes为true,则客户端将尝试一次重试。这有助于解决瞬态网络错误和副本集选择,但不能解决持久性网络错误。
我所做的“读取”不依赖于集群中的大多数成员实际获取数据吗?
在Causally Consistent会话中,读操作将在写操作之后等待查看群集时间。
查看有关Implementation of Cluster Write Causal Consistency in MongoDB
的更多信息