【问题标题】:Prevent tombstones creation防止创建墓碑
【发布时间】:2018-08-20 16:21:44
【问题描述】:

我需要在不为任何列创建墓碑的情况下对 Cassandra 表执行插入操作。我正在使用与此类似的查询:

insert into my_table(col1,col2,col3) values(val1,val2,null)

其中 col1、col2 和 col3 是 my_table 中的所有属性。 除了在我们的查询中仅传递非空属性并让 cassandra 将其余属性设置为空之外,还有其他解决方案或解决方法可以防止为 col3 创建墓碑吗?

【问题讨论】:

  • 你用什么来插入数据?

标签: cassandra datastax-enterprise cassandra-3.0


【解决方案1】:

不要在插入中包含col3,它不会设置任何内容。

insert into my_table(col1,col2) values(val1,val2)

如果对磁盘结构感到好奇,请执行nodetool flush 并在创建的 sstable 上运行 sstabledump 以查看差异。

【讨论】:

  • 感谢您的回复。我已经尝试过了,它可以工作,但是我可以做些什么来防止使用原始查询创建墓碑?
  • 你不能,一个显式的 null 是一个墓碑,因为它不知道其他节点上是否有数据,它必须屏蔽它。
【解决方案2】:

如果您插入空值,Cassandra 将创建墓碑。如果您知道 col3 将为 null,请不要在查询中使用它。

insert into my_table(col1,col2) values(val1,val2)

我会推荐两篇关于这个主题的非常好的文章

【讨论】:

    【解决方案3】:

    假设您正在使用准备好的语句,您可以使用 introduced in Cassandra 2.2.0 的“未设置”功能,它允许您使用不带值且无需在服务器上创建墓碑的保留准备好的语句变量。 Java driver 3.0.0 和其他驱动程序都支持它。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2018-04-15
      • 2017-08-16
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多