小编Kit*_*aev的帖子

"多数"和"可线性化"之间的区别

阅读文档几次,但仍然无法理解"多数"和"线性化" 阅读问题的行为差异:

"majority"
该查询返回实例的最新数据,该数据被确认为已写入副本集中的大多数成员.

"linearizable"
该查询返回反映所有成功写入的数据,这些写入以写入关注"多数"发出并在读取操作开始之前被确认.

文档还提到了一个选项"writeConcernMajorityJournalDefault",它说该选项设置为false,即使使用"linearizable",数据也可以回滚.

有人可以解释一下,这两个问题如何起作用以及这个选项如何影响它们?

mongodb

8
推荐指数
1
解决办法
1569
查看次数

如何使用可选的内部标记反序列化枚举?

我使用 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.

我开始DeserializeDefinition. 我正在尝试将其反序列化为映射并查找kind键并根据此键以及它是否存在返回相应的枚举变体。

我需要以某种方式将其他地图字段的反序列化分别“转发”到Foo::deserializeBar::deserializefn deserialize只接受一个参数,即Deserializer. 有没有办法将地图“转换”为解串器或以其他方式获得在该特定地图上“开始”的解串器?

我无法使用,#[serde(other)]因为它返回Err缺少标签。即使没有,文档也指出other只能应用于“单元变体”,即不包含任何数据的变体。

rust serde

2
推荐指数
1
解决办法
528
查看次数

标签 统计

mongodb ×1

rust ×1

serde ×1