关于 Bin.asNull 与真正的空值与逻辑删除的澄清

Clarification regarding Bin.asNull vs real null value vs thombstone

我正在寻找有关发生的事情以及它如何影响以下操作之间的集群复制之间的一些说明:

 def test() = {
    val key = new Key("ns", Configuration.dummySetName, 2)
    client.put(null, key, new Bin("bin0", Value.NULL)) // Is that Thombstone? All Row Will be deleted?
    client.put(null, key, new Bin("bin2", "value1")) // set bin2 value to be value1
    client.put(null, key, Bin.asNull("bin2")) // Is that deleted on the commit? any zombie records can be with value1? is it shipped via XDR? is durableDelete change something?
    val record = client.get(null, key)
    println(record)
  }
  1. 立墓碑是什么意思?它是通过 XDR 运送的吗?它可以创建“僵尸记录”吗?
  2. 持久删除和非持久删除有什么区别?它们是否通过 XDR 在集群之间传送?我得到持久删除 true 意味着它正在创建墓碑,这使我回到 1
  3. 将 null 放入特定的 bin 中以使用 bin.asNull 和放置 tombstone 有什么区别?都发货了吗?

我有点懵,

谢谢!

持久删除将创建一个墓碑,这是一个小记录,它将保留在系统中,直到它覆盖的记录的所有先前版本都消失(以及其他一些附带条件)。 Durable Delete 文档的详细信息。

墓碑阻止 'zombie' 记录或冷重启后记录复活。

持久删除和非持久删除均由 XDR 提供。不过,非持久删除有不同的机制。持久删除(或逻辑删除)与任何其他记录一样发送。

将 null 放入特定的 bin 将删除该 bin。如果它是记录中最后一个剩余的 bin,它将删除该记录,并且如果在使 bin 无效的写入上设置了持久删除策略,则删除将是持久的。我不知道在 bin 中写入 null 和使用 Bin.asNull 之间的区别。如果我不得不猜测的话,我希望它是一样的。