【问题标题】:Spring-boot + Ignite create null value tombstones in cassandraSpring-boot + Ignite 在 cassandra 中创建空值墓碑
【发布时间】:2020-08-25 05:18:42
【问题描述】:

我使用 cassandra 作为 Ignite 的 3rd 方存储。为了将数据持久化到 Ignite,我使用 spring-boots ignite-jpa 实现,并且我的对象通常具有未填充的字段,因此为空。自然,当数据被持久化到 cassandra 中时,这会创建一个空值墓碑,在我的例子中,由于数据量很大。

有谁知道我是否可以指定在插入期间不设置(取消设置)具有空值的字段(列)的配置?

我知道 cassandra 中的 null 值具有特殊含义,并且在更新为 null 的情况下,这种方法最终不会覆盖列值。不过,我不关心那个案子。

到目前为止,我所做的是实现我的自定义 CassandraCacheStoreFactory,但如果有更简单的方法,我正在徘徊。

【问题讨论】:

  • 将此改进贡献给现有的 Ignite + Cassandra 集成,它将被添加到未来的常规 Ignite 版本中。

标签: spring-boot cassandra null ignite tombstone


【解决方案1】:

如果插入空值,集群端无法告诉 Cassandra 忽略它。

但在客户端,您可以使用驱动程序告诉它忽略空值,这样它就不会将其发送到 Cassandra。

看看 InsertOptions.InsertOptionsBuilder 有一个方法告诉驱动程序忽略空值:withInsertNulls(boolean insertNulls),我认为它适合您的用例:

https://docs.spring.io/spring-data/cassandra/docs/current/api/org/springframework/data/cassandra/core/InsertOptions.InsertOptionsBuilder.html#withInsertNulls-boolean-

【讨论】:

  • 谢谢。看了看,但这适用于直接的 spring-boot -> cassandra persistence (如果我没记错的话)。实际上,两者之间存在使用不同机制的 ignite。但很高兴知道。再次感谢。
猜你喜欢
  • 2017-08-16
  • 2023-03-08
  • 2016-05-31
  • 2023-03-18
  • 2017-04-06
  • 1970-01-01
  • 2019-05-02
  • 2018-08-20
  • 2019-05-17
相关资源
最近更新 更多