阅读文档几次,但仍然无法理解"多数"和"线性化" 阅读问题的行为差异:
"majority"
该查询返回实例的最新数据,该数据被确认为已写入副本集中的大多数成员.
"linearizable"
该查询返回反映所有成功写入的数据,这些写入以写入关注"多数"发出并在读取操作开始之前被确认.
文档还提到了一个选项"writeConcernMajorityJournalDefault",它说该选项设置为false,即使使用"linearizable",数据也可以回滚.
有人可以解释一下,这两个问题如何起作用以及这个选项如何影响它们?
我使用 Serde 反序列化用 YAML 编写的自定义配置文件。该文件可以包含各种类型的定义,我表示为内部标记的枚举:
OfKindFoo:
kind: Foo
bar: bar;
baz: baz;
OfKindQux:
kind: Qux
quux: qux;
Run Code Online (Sandbox Code Playgroud)
我用 Rust 表示它是这样的:
#[derive(Deserialize)]
#[serde(tag = "kind")]
enum Definition {
Foo(Foo),
Qux(Qux),
}
#[derive(Deserialize)]
struct Foo {
bar: String,
baz: String,
}
#[derive(Deserialize)]
struct Qux {
quux: String,
}
Run Code Online (Sandbox Code Playgroud)
我希望用户能够kind完全省略该字段,并且当它被省略时,Serde 应该默认将其反序列化为Foo.
我开始Deserialize在Definition. 我正在尝试将其反序列化为映射并查找kind键并根据此键以及它是否存在返回相应的枚举变体。
我需要以某种方式将其他地图字段的反序列化分别“转发”到Foo::deserialize或Bar::deserialize。fn deserialize只接受一个参数,即Deserializer. 有没有办法将地图“转换”为解串器或以其他方式获得在该特定地图上“开始”的解串器?
我无法使用,#[serde(other)]因为它返回Err缺少标签。即使没有,文档也指出other只能应用于“单元变体”,即不包含任何数据的变体。